Add ability to specify parts in query to get log

This commit is contained in:
Piotr Sarnacki 2014-08-27 15:52:52 +02:00
parent 8f345f4ea0
commit 4546d29508
3 changed files with 29 additions and 1 deletions

View File

@ -37,7 +37,9 @@ module Travis
end
def log_parts
log.parts.sort_by(&:number).map do |part|
parts = log.parts
parts = parts.where(number: part_numbers) if part_numbers
parts.sort_by(&:number).map do |part|
{
'id' => part.id,
'number' => part.number,
@ -46,6 +48,12 @@ module Travis
}
end
end
def part_numbers
if numbers = options[:part_numbers]
numbers.is_a?(String) ? numbers.split(',').map(&:to_i) : numbers
end
end
end
end
end

View File

@ -51,6 +51,16 @@ describe 'Jobs' do
end
context 'with chunked log requested' do
it 'responds with only selected chunks if part_numbers are requested' do
job.log.parts << Log::Part.new(content: 'foo', number: 1, final: false)
job.log.parts << Log::Part.new(content: 'bar', number: 2, final: true)
job.log.parts << Log::Part.new(content: 'bar', number: 3, final: true)
headers = { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json; chunked=true' }
response = get "/jobs/#{job.id}/log", { part_numbers: '1,3,4' }, headers
response.should deliver_json_for(job.log, version: 'v2', params: { chunked: true})
end
it 'responds with 406 when log is already aggregated' do
job.log.update_attributes(aggregated_at: Time.now)
headers = { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json; chunked=true' }

View File

@ -29,5 +29,15 @@ describe Travis::Api::V2::Http::Log do
{ 'id' => 2, 'number' => 2, 'content' => 'bar', 'final' => true }
]
end
describe "with parts numbers specified" do
let(:data) { described_class.new(log, part_numbers: "1,3", chunked: true).data }
it 'returns only requested parts' do
parts = log.parts.find_all { |p| p.number == 1 }
log.parts.expects(:where).with(number: [1, 3]).returns(parts)
data['log']['parts'].should == [{ 'id' => 1, 'number' => 1, 'content' => 'foo', 'final' => false }]
end
end
end
end