Use CancelModel on Jobs endpoint
This commit is contained in:
parent
ef7811ead9
commit
29f80ab31b
|
@ -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
|
||||
|
||||
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]})"
|
||||
|
@ -46,8 +52,12 @@ class Travis::Api::App
|
|||
Metriks.meter("api.request.cancel_job.cant_cancel").mark
|
||||
status 422
|
||||
respond_with json
|
||||
else
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user