From 29f80ab31ba1d36d242a19d96dce45563c9c7d61 Mon Sep 17 00:00:00 2001 From: Ana Rosas Date: Fri, 27 May 2016 16:15:41 +0200 Subject: [PATCH] Use CancelModel on Jobs endpoint --- lib/travis/api/app/endpoint/jobs.rb | 14 ++++++++++-- spec/integration/v2/jobs_spec.rb | 33 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/lib/travis/api/app/endpoint/jobs.rb b/lib/travis/api/app/endpoint/jobs.rb index e8a0e1e9..02122a61 100644 --- a/lib/travis/api/app/endpoint/jobs.rb +++ b/lib/travis/api/app/endpoint/jobs.rb @@ -2,6 +2,7 @@ require 'travis/api/app' require 'travis/api/workers/job_cancellation' require 'travis/api/workers/job_restart' require 'travis/api/enqueue/services/restart_model' +require 'travis/api/enqueue/services/cancel_model' class Travis::Api::App class Endpoint @@ -28,7 +29,12 @@ class Travis::Api::App post '/:id/cancel' do Metriks.meter("api.request.cancel_job").mark - service = self.service(:cancel_job, params.merge(source: 'api')) + if Travis::Features.owner_active?(:enqueue_to_hub, current_user) + service = Travis::Enqueue::Services::CancelModel.new(current_user, { job_id: params[:id] }) + else + service = self.service(:cancel_job, params.merge(source: 'api')) + end + if !service.authorized? json = { error: { message: "You don't have access to cancel job(#{params[:id]})" @@ -47,7 +53,11 @@ class Travis::Api::App status 422 respond_with json else - Travis::Sidekiq::JobCancellation.perform_async(id: params[:id], user_id: current_user.id, source: 'api') + if service.respond_to?(:enqueue_to_hub) + service.enqueue_to_hub + else + Travis::Sidekiq::JobCancellation.perform_async(id: params[:id], user_id: current_user.id, source: 'api') + end Metriks.meter("api.request.cancel_job.success").mark status 204 diff --git a/spec/integration/v2/jobs_spec.rb b/spec/integration/v2/jobs_spec.rb index 72dac3d0..6b82a1a7 100644 --- a/spec/integration/v2/jobs_spec.rb +++ b/spec/integration/v2/jobs_spec.rb @@ -230,6 +230,15 @@ describe 'Jobs' do response = post "/jobs/#{job.id}/cancel", {}, headers response.status.should == 403 end + + context 'and tries to enqueue cancel event for the Hub' do + before { Travis::Features.activate_owner(:enqueue_to_hub, job.repository.owner) } + + it 'responds with 403' do + response = post "/jobs/#{job.id}/cancel", {}, headers + response.status.should == 403 + end + end end context 'when job is not cancelable' do @@ -239,6 +248,15 @@ describe 'Jobs' do response = post "/jobs/#{job.id}/cancel", {}, headers response.status.should == 422 end + + context 'and tries to enqueue cancel event for the Hub' do + before { Travis::Features.activate_owner(:enqueue_to_hub, job.repository.owner) } + + it 'responds with 422' do + response = post "/jobs/#{job.id}/cancel", {}, headers + response.status.should == 422 + end + end end context 'when job can be canceled' do @@ -255,6 +273,21 @@ describe 'Jobs' do response = post "/jobs/#{job.id}/cancel", {}, headers response.status.should == 204 end + + context 'and enqueues cancel event for the Hub' do + before { Travis::Features.activate_owner(:enqueue_to_hub, job.repository.owner) } + + it 'cancels the job' do + ::Sidekiq::Client.expects(:push) + post "/jobs/#{job.id}/cancel", {}, headers + end + + it 'responds with 204' do + ::Sidekiq::Client.expects(:push) + response = post "/jobs/#{job.id}/cancel", {}, headers + response.status.should == 204 + end + end end end