Add ability to specify parts in query to get log
This commit is contained in:
parent
8f345f4ea0
commit
4546d29508
|
@ -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
|
||||
|
|
|
@ -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' }
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user