Take branch access into account when stopping environment
This commit is contained in:
parent
e533d43a8c
commit
6c0fc62ef5
6 changed files with 58 additions and 7 deletions
|
@ -85,8 +85,8 @@ class Deployment < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def stop_action
|
||||
return nil unless on_stop.present?
|
||||
return nil unless manual_actions
|
||||
return unless on_stop.present?
|
||||
return unless manual_actions
|
||||
|
||||
@stop_action ||= manual_actions.find_by(name: on_stop)
|
||||
end
|
||||
|
|
|
@ -122,6 +122,12 @@ class Environment < ActiveRecord::Base
|
|||
available? && stop_action.present?
|
||||
end
|
||||
|
||||
def can_trigger_stop_action?(current_user)
|
||||
return false unless stop_action?
|
||||
|
||||
stop_action.can_play?(current_user)
|
||||
end
|
||||
|
||||
def stop_with_action!(current_user)
|
||||
return unless available?
|
||||
|
||||
|
|
|
@ -6,9 +6,10 @@ module Ci
|
|||
@ref = branch_name
|
||||
|
||||
return unless has_ref?
|
||||
return unless can?(current_user, :create_deployment, project)
|
||||
|
||||
environments.each do |environment|
|
||||
next unless can?(current_user, :create_deployment, project)
|
||||
next unless environment.can_trigger_stop_action?(current_user)
|
||||
|
||||
environment.stop_with_action!(current_user)
|
||||
end
|
||||
|
@ -21,8 +22,9 @@ module Ci
|
|||
end
|
||||
|
||||
def environments
|
||||
@environments ||=
|
||||
EnvironmentsFinder.new(project, current_user, ref: @ref, recently_updated: true).execute
|
||||
@environments ||= EnvironmentsFinder
|
||||
.new(project, current_user, ref: @ref, recently_updated: true)
|
||||
.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,14 +20,18 @@ FactoryGirl.define do
|
|||
after(:create) do |environment, evaluator|
|
||||
pipeline = create(:ci_pipeline, project: environment.project)
|
||||
|
||||
deployable = create(:ci_build, name: "#{environment.name}:deploy",
|
||||
pipeline: pipeline)
|
||||
|
||||
deployment = create(:deployment,
|
||||
environment: environment,
|
||||
project: environment.project,
|
||||
deployable: deployable,
|
||||
ref: evaluator.ref,
|
||||
sha: environment.project.commit(evaluator.ref).id)
|
||||
|
||||
teardown_build = create(:ci_build, :manual,
|
||||
name: "#{deployment.environment.name}:teardown",
|
||||
name: "#{environment.name}:teardown",
|
||||
pipeline: pipeline)
|
||||
|
||||
deployment.update_column(:on_stop, teardown_build.name)
|
||||
|
|
|
@ -155,6 +155,31 @@ describe Environment, models: true do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#can_trigger_stop_action?' do
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project) }
|
||||
|
||||
let(:environment) do
|
||||
create(:environment, :with_review_app, project: project)
|
||||
end
|
||||
|
||||
context 'when user can trigger stop action' do
|
||||
before do
|
||||
project.add_developer(user)
|
||||
end
|
||||
|
||||
it 'returns value that evaluates to true' do
|
||||
expect(environment.can_trigger_stop_action?(user)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user is not allowed to trigger stop action' do
|
||||
it 'returns value that evaluates to false' do
|
||||
expect(environment.can_trigger_stop_action?(user)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#stop_with_action!' do
|
||||
let(:user) { create(:admin) }
|
||||
|
||||
|
|
|
@ -55,8 +55,22 @@ describe Ci::StopEnvironmentsService, services: true do
|
|||
end
|
||||
|
||||
context 'when user does not have permission to stop environment' do
|
||||
context 'when user has no access to manage deployments' do
|
||||
before do
|
||||
project.team << [user, :guest]
|
||||
end
|
||||
|
||||
it 'does not stop environment' do
|
||||
expect_environment_not_stopped_on('master')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when branch for stop action is protected' do
|
||||
before do
|
||||
project.team << [user, :guest]
|
||||
project.add_developer(user)
|
||||
create(:protected_branch, :no_one_can_push,
|
||||
name: 'master', project: project)
|
||||
end
|
||||
|
||||
it 'does not stop environment' do
|
||||
|
|
Loading…
Reference in a new issue