Add RemoveLog service endpoint to jobs/:id/log

This replaces https://github.com/travis-ci/travis-api/pull/107.
This commit is contained in:
Hiro Asari 2014-06-11 13:28:16 -04:00
parent 851c2b2db2
commit 1cf298464a
4 changed files with 69 additions and 2 deletions

View File

@ -45,7 +45,7 @@ GIT
GIT
remote: git://github.com/travis-ci/travis-core.git
revision: c5141bb7ffa3ef9c7dac9ce5a1ed17a19b02f7ba
revision: a8d8e4c9c92e436645e80c6fb486fff8a442e6f6
specs:
travis-core (0.0.1)
actionmailer (~> 3.2.12)

View File

@ -64,6 +64,20 @@ class Travis::Api::App
end
end
patch '/:id/log', scope: :private do
# PATCH method for `RemoveLog` service, since we are replacing log content
service = self.service(:remove_log, params)
begin
respond_with service.run
rescue Travis::AuthorizationDenied => e
status 401
{ error: { message: e.message } }
rescue Travis::JobUnfinished, Travis::LogAlreadyRemoved => e
status 409
{ error: { message: e.message } }
end
end
get "/:job_id/annotations" do
respond_with service(:find_annotations, params)
end

View File

@ -76,6 +76,58 @@ describe 'Jobs' do
end
end
describe 'PATCH /jobs/:job_id/log' do
let(:user) { User.where(login: 'svenfuchs').first }
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: -1) }
before :each do
headers.merge! 'HTTP_AUTHORIZATION' => "token #{token}"
end
context 'when user does not have push permissions' do
before :each do
user.permissions.create!(repository_id: job.repository.id, :push => false)
end
it 'returns status 401' do
response = patch "/jobs/#{job.id}/log", { reason: 'Because reason!' }, headers
response.status.should == 401
end
end
context 'when user has push permission' do
context 'when job is not finished' do
before :each do
job.stubs(:finished?).returns false
user.permissions.create!(repository_id: job.repository.id, :push => true)
end
it 'returns status 409' do
response = patch "/jobs/#{job.id}/log", { reason: 'Because reason!' }, headers
response.status.should == 409
end
end
context 'when job is finished' do
let(:finished_job) { Factory(:test, state: 'passed') }
before :each do
user.permissions.create!(repository_id: finished_job.repository.id, :push => true)
end
it 'returns status 200' do
response = patch "/jobs/#{finished_job.id}/log", { reason: 'Because reason!' }, headers
response.status.should == 200
end
end
end
context 'when job is not found' do
# TODO
end
end
it "GET /jobs/:id/annotations" do
annotation_provider = Factory(:annotation_provider)
annotation = annotation_provider.annotations.create(job_id: job.id, status: "passed", description: "Foobar")

View File

@ -14,8 +14,8 @@ Gem::Specification.new do |s|
"Sven Fuchs",
"Mathias Meyer",
"Josh Kalderimis",
"Henrik Hodne",
"Hiro Asari",
"Henrik Hodne",
"Andre Arko",
"Erik Michaels-Ober",
"Brian Ford",
@ -158,6 +158,7 @@ Gem::Specification.new do |s|
"public/images/result/unknown.svg",
"script/console",
"script/server",
"set_up_travis_logs.sh",
"spec/integration/formats_handling_spec.rb",
"spec/integration/responders_spec.rb",
"spec/integration/routes.backup.rb",