initial work to add build and job cancellation incl updating existing specs

This commit is contained in:
carlad 2015-09-25 16:04:47 +02:00
parent faabb0f727
commit faf60a5f7f
8 changed files with 80 additions and 7 deletions

View File

@ -0,0 +1,13 @@
require 'travis/api/v3/permissions/generic'
module Travis::API::V3
class Permissions::Build < Permissions::Generic
def cancel?
write?
end
def restart?
write?
end
end
end

View File

@ -0,0 +1,13 @@
require 'travis/api/v3/permissions/generic'
module Travis::API::V3
class Permissions::Job < Permissions::Generic
def cancel?
write?
end
def restart?
write?
end
end
end

View File

@ -6,5 +6,15 @@ module Travis::API::V3
return Models::Build.find_by_id(id) if id
raise WrongParams, 'missing build.id'.freeze
end
def cancel
raise WrongParams, 'missing build.id'.freeze unless build.id
payload = {
build: { id: build.id }
}
perform_async(:build_cancellation, type: 'api'.freeze, credentials: { token: token }, payload: JSON.dump(payload))
payload
end
end
end

View File

@ -18,7 +18,7 @@ module Travis::API::V3
route '/build/{build.id}'
get :find
# post :cancel, '/cancel'
post :cancel, '/cancel'
# post :restart, '/restart'
end

View File

@ -0,0 +1,13 @@
module Travis::API::V3
class Services::Build::Cancel < Service
def run
raise LoginRequired unless access_control.logged_in? or access_control.full_access?
raise NotFound unless build = find(:build)
access_control.permissions(build).cancel!
payload = query.cancel(build)
build
end
end
end

View File

@ -26,9 +26,13 @@ describe Travis::API::V3::Services::Build::Find do
before { get("/v3/build/#{build.id}") }
example { expect(last_response).to be_ok }
example { expect(parsed_body).to be == {
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation" => "standard",
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"cancel" => false,
"restart" => false},
"id" => build.id,
"number" => build.number,
"state" => build.state,
@ -99,9 +103,13 @@ describe Travis::API::V3::Services::Build::Find do
after { repo.update_attribute(:private, false) }
example { expect(last_response).to be_ok }
example { expect(parsed_body).to be == {
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation" => "standard",
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"cancel" => false,
"restart" => false},
"id" => build.id,
"number" => build.number,
"state" => build.state,

View File

@ -52,6 +52,10 @@ describe Travis::API::V3::Services::Builds::Find do
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"cancel" => false,
"restart" => false },
"id" => build.id,
"number" => "3",
"state" => "configured",
@ -149,6 +153,10 @@ describe Travis::API::V3::Services::Builds::Find do
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"cancel" => false,
"restart" => false },
"id" => build.id,
"number" => "3",
"state" => "configured",

View File

@ -20,6 +20,10 @@ describe Travis::API::V3::Services::Job::Find do
"@type" => "job",
"@href" => "/v3/job/#{job.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"cancel" => false,
"restart" => false },
"id" => job.id,
"number" => job.number,
"state" => job.state,
@ -140,6 +144,10 @@ describe Travis::API::V3::Services::Job::Find do
"@type" => "job",
"@href" => "/v3/job/#{job.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"cancel" => false,
"restart" => false },
"id" => job.id,
"number" => job.number,
"state" => job.state,