Handle chunked=true param in Accept header
This commit is contained in:
parent
0e6757080e
commit
36783e6359
|
@ -4,7 +4,7 @@ class Travis::Api::App
|
||||||
include Helpers::Accept
|
include Helpers::Accept
|
||||||
|
|
||||||
def apply?
|
def apply?
|
||||||
super && !resource.is_a?(String) && !resource.nil?
|
super && !resource.is_a?(String) && !resource.nil? && accepts_log?
|
||||||
end
|
end
|
||||||
|
|
||||||
def apply
|
def apply
|
||||||
|
@ -13,13 +13,28 @@ class Travis::Api::App
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def accepts_log?
|
||||||
|
return true unless resource.is_a?(Log)
|
||||||
|
|
||||||
|
chunked = accept_params[:chunked]
|
||||||
|
chunked ? !resource.aggregated_at : true
|
||||||
|
end
|
||||||
|
|
||||||
def result
|
def result
|
||||||
builder ? builder.new(resource, request.params).data : resource
|
builder ? builder.new(resource, params).data : resource
|
||||||
end
|
end
|
||||||
|
|
||||||
def builder
|
def builder
|
||||||
@builder ||= Travis::Api.builder(resource, { :version => accept_version }.merge(options))
|
@builder ||= Travis::Api.builder(resource, { :version => accept_version }.merge(options))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def accept_params
|
||||||
|
(options[:accept].params || {}).symbolize_keys
|
||||||
|
end
|
||||||
|
|
||||||
|
def params
|
||||||
|
(request.params || {}).merge(accept_params)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -49,5 +49,30 @@ describe 'Jobs' do
|
||||||
response.headers['Location'].should == "https://s3.amazonaws.com/archive.travis-ci.org/jobs/#{job.id}/log.txt"
|
response.headers['Location'].should == "https://s3.amazonaws.com/archive.travis-ci.org/jobs/#{job.id}/log.txt"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with chunked log requested' do
|
||||||
|
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' }
|
||||||
|
response = get "/jobs/#{job.id}/log", {}, headers
|
||||||
|
response.status.should == 406
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'responds with chunks instead of full log' 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)
|
||||||
|
|
||||||
|
headers = { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json; chunked=true' }
|
||||||
|
response = get "/jobs/#{job.id}/log", {}, headers
|
||||||
|
response.should deliver_json_for(job.log, version: 'v2', params: { chunked: true})
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'responds with full log if chunks are not available and full log is accepted' do
|
||||||
|
job.log.update_attributes(aggregated_at: Time.now)
|
||||||
|
headers = { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json; chunked=true, application/vnd.travis-ci.2+json' }
|
||||||
|
response = get "/jobs/#{job.id}/log", {}, headers
|
||||||
|
response.should deliver_json_for(job.log, version: 'v2')
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user