From 1cf298464a0383081326e6212240cb9111d73cd3 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Wed, 11 Jun 2014 13:28:16 -0400 Subject: [PATCH] Add RemoveLog service endpoint to jobs/:id/log This replaces https://github.com/travis-ci/travis-api/pull/107. --- Gemfile.lock | 2 +- lib/travis/api/app/endpoint/jobs.rb | 14 ++++++++ spec/integration/v2/jobs_spec.rb | 52 +++++++++++++++++++++++++++++ travis-api.gemspec | 3 +- 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 307a8a09..f1de4e5c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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) diff --git a/lib/travis/api/app/endpoint/jobs.rb b/lib/travis/api/app/endpoint/jobs.rb index dec9ce34..26d662f2 100644 --- a/lib/travis/api/app/endpoint/jobs.rb +++ b/lib/travis/api/app/endpoint/jobs.rb @@ -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 diff --git a/spec/integration/v2/jobs_spec.rb b/spec/integration/v2/jobs_spec.rb index b865ed59..4a30c638 100644 --- a/spec/integration/v2/jobs_spec.rb +++ b/spec/integration/v2/jobs_spec.rb @@ -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") diff --git a/travis-api.gemspec b/travis-api.gemspec index b517c000..c0d53e10 100644 --- a/travis-api.gemspec +++ b/travis-api.gemspec @@ -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",