diff --git a/lib/travis/api/v2/http/log.rb b/lib/travis/api/v2/http/log.rb index 849ffea6..38af5417 100644 --- a/lib/travis/api/v2/http/log.rb +++ b/lib/travis/api/v2/http/log.rb @@ -39,6 +39,7 @@ module Travis def log_parts parts = log.parts parts = parts.where(number: part_numbers) if part_numbers + parts = parts.where(["number > ?", after]) if after parts.sort_by(&:number).map do |part| { 'id' => part.id, @@ -49,6 +50,11 @@ module Travis end end + def after + after = options['after'].to_i + after == 0 ? nil : after + end + def part_numbers if numbers = options['part_numbers'] numbers.is_a?(String) ? numbers.split(',').map(&:to_i) : numbers diff --git a/spec/integration/v2/jobs_spec.rb b/spec/integration/v2/jobs_spec.rb index 5a40d28b..13be7a25 100644 --- a/spec/integration/v2/jobs_spec.rb +++ b/spec/integration/v2/jobs_spec.rb @@ -51,6 +51,18 @@ describe 'Jobs' do end context 'with chunked log requested' do + it 'responds with only selected chunks if after is specified' 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", { after: 1 }, headers + body = JSON.parse(response.body) + + body['log']['parts'].map { |p| p['number'] }.sort.should == [2, 3] + end + 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)