Fix specs related to new manual actions permissions

This commit is contained in:
Grzegorz Bizon 2017-04-06 14:28:40 +02:00
parent f647ad8f6f
commit e533d43a8c
4 changed files with 54 additions and 14 deletions

View file

@ -18,6 +18,8 @@ FactoryGirl.define do
# interconnected objects to simulate a review app.
#
after(:create) do |environment, evaluator|
pipeline = create(:ci_pipeline, project: environment.project)
deployment = create(:deployment,
environment: environment,
project: environment.project,
@ -26,7 +28,7 @@ FactoryGirl.define do
teardown_build = create(:ci_build, :manual,
name: "#{deployment.environment.name}:teardown",
pipeline: deployment.deployable.pipeline)
pipeline: pipeline)
deployment.update_column(:on_stop, teardown_build.name)
environment.update_attribute(:deployments, [deployment])

View file

@ -62,6 +62,8 @@ feature 'Environment', :feature do
name: 'deploy to production')
end
given(:role) { :master }
scenario 'does show a play button' do
expect(page).to have_link(action.name.humanize)
end
@ -132,6 +134,8 @@ feature 'Environment', :feature do
on_stop: 'close_app')
end
given(:role) { :master }
scenario 'does allow to stop environment' do
click_link('Stop')

View file

@ -191,25 +191,52 @@ describe Environment, models: true do
end
context 'when matching action is defined' do
let(:build) { create(:ci_build) }
let!(:deployment) { create(:deployment, environment: environment, deployable: build, on_stop: 'close_app') }
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline) }
context 'when action did not yet finish' do
let!(:close_action) { create(:ci_build, :manual, pipeline: build.pipeline, name: 'close_app') }
let!(:deployment) do
create(:deployment, environment: environment,
deployable: build,
on_stop: 'close_app')
end
it 'returns the same action' do
expect(subject).to eq(close_action)
expect(subject.user).to eq(user)
context 'when user is not allowed to stop environment' do
let!(:close_action) do
create(:ci_build, :manual, pipeline: pipeline, name: 'close_app')
end
it 'raises an exception' do
expect { subject }.to raise_error(Gitlab::Access::AccessDeniedError)
end
end
context 'if action did finish' do
let!(:close_action) { create(:ci_build, :manual, :success, pipeline: build.pipeline, name: 'close_app') }
context 'when user is allowed to stop environment' do
before do
project.add_master(user)
end
it 'returns a new action of the same type' do
is_expected.to be_persisted
expect(subject.name).to eq(close_action.name)
expect(subject.user).to eq(user)
context 'when action did not yet finish' do
let!(:close_action) do
create(:ci_build, :manual, pipeline: pipeline, name: 'close_app')
end
it 'returns the same action' do
expect(subject).to eq(close_action)
expect(subject.user).to eq(user)
end
end
context 'if action did finish' do
let!(:close_action) do
create(:ci_build, :manual, :success,
pipeline: pipeline, name: 'close_app')
end
it 'returns a new action of the same type' do
expect(subject).to be_persisted
expect(subject.name).to eq(close_action.name)
expect(subject.user).to eq(user)
end
end
end
end

View file

@ -314,6 +314,13 @@ describe Ci::ProcessPipelineService, '#execute', :services do
end
context 'when pipeline is promoted sequentially up to the end' do
before do
# We are using create(:empty_project), and users has to be master in
# order to execute manual action when repository does not exist.
#
project.add_master(user)
end
it 'properly processes entire pipeline' do
process_pipeline