92 lines
3.6 KiB
Ruby
92 lines
3.6 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Travis::API::V3::Services::Log::Find, set_app: true do
|
|
let(:user) { Factory.create(:user) }
|
|
let(:repo) { Factory.create(:repository, owner_name: user.login, name: 'minimal', owner: user)}
|
|
let(:build) { Factory.create(:build, repository: repo) }
|
|
let(:job) { Travis::API::V3::Models::Job.create(build: build) }
|
|
let(:job2) { Travis::API::V3::Models::Job.create(build: build)}
|
|
let(:s3job) { Travis::API::V3::Models::Job.create(build: build) }
|
|
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
|
let(:headers) { { 'HTTP_AUTHORIZATION' => "token #{token}" } }
|
|
let(:parsed_body) { JSON.load(body) }
|
|
let(:log) { Travis::API::V3::Models::Log.create(job: job) }
|
|
let(:log2) { Travis::API::V3::Models::Log.create(job: job2) }
|
|
let(:s3log) { Travis::API::V3::Models::Log.create(job: s3job, content: 'minimal log 1') }
|
|
|
|
before { Travis::API::V3::AccessControl::LegacyToken.any_instance.stubs(:visible?).returns(true) }
|
|
|
|
context 'when log stored in db' do
|
|
describe 'returns log with an array of Log Parts' do
|
|
example do
|
|
log_part = log.log_parts.create(content: "logging it", number: 0)
|
|
get("/v3/job/#{log.job.id}/log", {}, headers)
|
|
expect(parsed_body).to eq(
|
|
'@href' => "/v3/job/#{log.job.id}/log",
|
|
'@representation' => 'standard',
|
|
'@type' => 'log',
|
|
'content' => nil,
|
|
'id' => log.id,
|
|
'log_parts' => [{
|
|
"@type" => "log_part",
|
|
"@representation" => "minimal",
|
|
"content" => log_part.content,
|
|
"number" => log_part.number }])
|
|
end
|
|
end
|
|
describe 'returns log as plain text'
|
|
end
|
|
|
|
context 'when log not found in db but stored on S3' do
|
|
describe 'returns log with an array of Log Parts' do
|
|
before do
|
|
stub_request(:get, "https://s3.amazonaws.com/archive.travis-ci.org/jobs/#{s3job.id}/log.txt").
|
|
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Host'=>'s3.amazonaws.com', 'User-Agent'=>'Ruby'}).
|
|
to_return(:status => 200, :body => "$ git clean -fdx\nRemoving Gemfile.lock\n$ git fetch", :headers => {})
|
|
end
|
|
example do
|
|
s3log.update_attributes(archived_at: Time.now)
|
|
get("/v3/job/#{s3job.id}/log", {}, headers)
|
|
|
|
expect(parsed_body).to eq(
|
|
'@href' => "/v3/job/#{s3job.id}/log",
|
|
'@representation' => 'standard',
|
|
'@type' => 'log',
|
|
'content' => 'minimal log 1',
|
|
'id' => s3log.id,
|
|
'log_parts' => [{
|
|
"@type"=>"log_part",
|
|
"@representation"=>"minimal",
|
|
"content"=>"$ git clean -fdx",
|
|
"number"=>0}, {
|
|
"@type"=>"log_part",
|
|
"@representation"=>"minimal",
|
|
"content"=>"Removing Gemfile.lock",
|
|
"number"=>1}, {
|
|
"@type"=>"log_part",
|
|
"@representation"=>"minimal",
|
|
"content"=>"$ git fetch",
|
|
"number"=>2}])
|
|
end
|
|
end
|
|
describe 'returns log as plain text'
|
|
end
|
|
|
|
context 'when log not found anywhere' do
|
|
describe 'does not return log - returns error' do
|
|
before { log.delete }
|
|
example do
|
|
get("/v3/job/#{job.id}/log", {}, headers)
|
|
expect(parsed_body).to eq({
|
|
"@type"=>"error",
|
|
"error_type"=>"not_found",
|
|
"error_message"=>"log not found"})
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when log removed by user' do
|
|
describe 'does not return log'
|
|
end
|
|
end
|