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_cancellation'
|
||||||
require 'travis/api/workers/job_restart'
|
require 'travis/api/workers/job_restart'
|
||||||
require 'travis/api/enqueue/services/restart_model'
|
require 'travis/api/enqueue/services/restart_model'
|
||||||
|
require 'travis/api/enqueue/services/cancel_model'
|
||||||
|
|
||||||
class Travis::Api::App
|
class Travis::Api::App
|
||||||
class Endpoint
|
class Endpoint
|
||||||
|
@ -28,7 +29,12 @@ class Travis::Api::App
|
||||||
post '/:id/cancel' do
|
post '/:id/cancel' do
|
||||||
Metriks.meter("api.request.cancel_job").mark
|
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?
|
if !service.authorized?
|
||||||
json = { error: {
|
json = { error: {
|
||||||
message: "You don't have access to cancel job(#{params[:id]})"
|
message: "You don't have access to cancel job(#{params[:id]})"
|
||||||
|
@ -47,7 +53,11 @@ class Travis::Api::App
|
||||||
status 422
|
status 422
|
||||||
respond_with json
|
respond_with json
|
||||||
else
|
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
|
Metriks.meter("api.request.cancel_job.success").mark
|
||||||
status 204
|
status 204
|
||||||
|
|
|
@ -230,6 +230,15 @@ describe 'Jobs' do
|
||||||
response = post "/jobs/#{job.id}/cancel", {}, headers
|
response = post "/jobs/#{job.id}/cancel", {}, headers
|
||||||
response.status.should == 403
|
response.status.should == 403
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
context 'when job is not cancelable' do
|
context 'when job is not cancelable' do
|
||||||
|
@ -239,6 +248,15 @@ describe 'Jobs' do
|
||||||
response = post "/jobs/#{job.id}/cancel", {}, headers
|
response = post "/jobs/#{job.id}/cancel", {}, headers
|
||||||
response.status.should == 422
|
response.status.should == 422
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
context 'when job can be canceled' do
|
context 'when job can be canceled' do
|
||||||
|
@ -255,6 +273,21 @@ describe 'Jobs' do
|
||||||
response = post "/jobs/#{job.id}/cancel", {}, headers
|
response = post "/jobs/#{job.id}/cancel", {}, headers
|
||||||
response.status.should == 204
|
response.status.should == 204
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user