v3 update build cancel, access control, specs for build cancel
This commit is contained in:
parent
c6cc6d1b96
commit
d99c3c8c54
|
@ -51,6 +51,10 @@ module Travis::API::V3
|
|||
visible? build.repository
|
||||
end
|
||||
|
||||
def build_writable?(build)
|
||||
writable? build.repository
|
||||
end
|
||||
|
||||
def branch_visible?(branch)
|
||||
visible? branch.repository
|
||||
end
|
||||
|
|
|
@ -7,13 +7,9 @@ module Travis::API::V3
|
|||
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))
|
||||
def cancel(user)
|
||||
payload = {build: {id: id, user_id: user.id, source: 'api'}}
|
||||
perform_async(:build_cancellation, type: 'api'.freeze, payload: JSON.dump(payload))
|
||||
payload
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,8 +6,8 @@ module Travis::API::V3
|
|||
raise NotFound unless build = find(:build)
|
||||
access_control.permissions(build).cancel!
|
||||
|
||||
payload = query.cancel(build)
|
||||
build
|
||||
query.cancel(access_control.user)
|
||||
accepted(build: build, state_change: :cancel)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,9 +3,8 @@ require 'spec_helper'
|
|||
describe Travis::API::V3::Services::Build::Cancel do
|
||||
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
||||
let(:build) { repo.builds.first }
|
||||
let(:sidekiq_payload) { JSON.load(Sidekiq::Client.last['args'].last[:payload]).deep_symbolize_keys }
|
||||
let(:sidekiq_payload) { JSON.load(Sidekiq::Client.last['args'].last[:payload]) }
|
||||
let(:sidekiq_params) { Sidekiq::Client.last['args'].last.deep_symbolize_keys }
|
||||
# before { build.cancel.each(&:delete) }
|
||||
|
||||
before do
|
||||
Travis::Features.stubs(:owner_active?).returns(true)
|
||||
|
@ -52,7 +51,7 @@ describe Travis::API::V3::Services::Build::Cancel do
|
|||
example { expect(JSON.load(body).to_s).to include(
|
||||
"@type",
|
||||
"error_type",
|
||||
"insufficient access",
|
||||
"insufficient_access",
|
||||
"error_message",
|
||||
"operation requires cancel access to build",
|
||||
"resource_type",
|
||||
|
@ -88,59 +87,56 @@ describe Travis::API::V3::Services::Build::Cancel do
|
|||
example { expect(last_response.status).to be == 202 }
|
||||
example { expect(JSON.load(body).to_s).to include(
|
||||
"@type",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"build",
|
||||
"@href",
|
||||
"@representation",
|
||||
"minimal",
|
||||
"permission",
|
||||
"cancel",
|
||||
"id",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
|
||||
"state_change")
|
||||
}
|
||||
|
||||
example { expect(sidekiq_payload).to be == {
|
||||
build: { id: build.id }
|
||||
"build" => {
|
||||
"id" => "#{build.id}",
|
||||
"user_id"=> repo.owner_id,
|
||||
"source" => "api"}
|
||||
}}
|
||||
|
||||
example { expect(Sidekiq::Client.last['queue']).to be == 'build_cancellations' }
|
||||
example { expect(Sidekiq::Client.last['class']).to be == 'Travis::Sidekiq::CancellationRequest' }
|
||||
example { expect(Sidekiq::Client.last['class']).to be == 'Travis::Sidekiq::BuildCancellation' }
|
||||
|
||||
describe "setting id has no effect" do
|
||||
let(:params) {{ id: 42 }}
|
||||
example { expect(sidekiq_payload).to be == {
|
||||
build: { id: build.id }
|
||||
}}
|
||||
end
|
||||
|
||||
describe "passing the token in params" do
|
||||
let(:params) {{ request: { token: 'foo-bar' }}}
|
||||
example { expect(sidekiq_params[:credentials]).to be == {
|
||||
token: 'foo-bar'
|
||||
"build" => {
|
||||
"id" => "#{build.id}",
|
||||
"user_id"=> repo.owner_id,
|
||||
"source" => "api"}
|
||||
}}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
describe "existing repository, application with full access" do
|
||||
let(:app_name) { 'travis-example' }
|
||||
let(:app_secret) { '12345678' }
|
||||
let(:sign_opts) { "a=#{app_name}" }
|
||||
let(:signature) { OpenSSL::HMAC.hexdigest('sha256', app_secret, sign_opts) }
|
||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "signature #{sign_opts}:#{signature}" }}
|
||||
before { Travis.config.applications = { app_name => { full_access: true, secret: app_secret }}}
|
||||
before { post("/v3/build/#{build.id}/cancel", params, headers) }
|
||||
# describe "existing repository, application with full access" do
|
||||
# let(:app_name) { 'travis-example' }
|
||||
# let(:app_secret) { '12345678' }
|
||||
# let(:sign_opts) { "a=#{app_name}" }
|
||||
# let(:signature) { OpenSSL::HMAC.hexdigest('sha256', app_secret, sign_opts) }
|
||||
# let(:headers) {{ 'HTTP_AUTHORIZATION' => "signature #{sign_opts}:#{signature}" }}
|
||||
# before { Travis.config.applications = { app_name => { full_access: true, secret: app_secret }}}
|
||||
# before { post("/v3/build/#{build.id}/cancel", params, headers) }
|
||||
#
|
||||
# describe 'without setting user' do
|
||||
# let(:params) {{}}
|
||||
# example { expect(last_response.status).to be == 400 }
|
||||
# example { expect(JSON.load(body)).to be == {
|
||||
# "@type" => "error",
|
||||
# "error_type" => "wrong_params",
|
||||
# "error_message" => "missing user"
|
||||
# }}
|
||||
# end
|
||||
|
||||
# describe 'without setting user' do
|
||||
# let(:params) {{}}
|
||||
# example { expect(last_response.status).to be == 400 }
|
||||
# example { expect(JSON.load(body)).to be == {
|
||||
# "@type" => "error",
|
||||
# "error_type" => "wrong_params",
|
||||
# "error_message" => "missing user"
|
||||
# }}
|
||||
# end
|
||||
#
|
||||
# describe 'setting user' do
|
||||
# let(:params) {{ user: { id: repo.owner.id } }}
|
||||
# example { expect(last_response.status).to be == 202 }
|
||||
|
@ -152,17 +148,5 @@ describe Travis::API::V3::Services::Build::Cancel do
|
|||
# config: {}
|
||||
# }}
|
||||
# end
|
||||
#
|
||||
# describe 'setting branch' do
|
||||
# let(:params) {{ user: { id: repo.owner.id }, branch: 'example' }}
|
||||
# example { expect(last_response.status).to be == 202 }
|
||||
# example { expect(sidekiq_payload).to be == {
|
||||
# repository: { id: repo.id, owner_name: 'svenfuchs', name: 'minimal' },
|
||||
# user: { id: repo.owner.id },
|
||||
# message: nil,
|
||||
# branch: 'example',
|
||||
# config: {}
|
||||
# }}
|
||||
# end
|
||||
end
|
||||
# end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user