From 04a8372cdfff501fe67c17612a0b5e098f7d56c9 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 8 Nov 2016 14:20:58 +0100 Subject: Add environment teardown service --- spec/services/ci/stop_environment_service_spec.rb | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 spec/services/ci/stop_environment_service_spec.rb (limited to 'spec/services/ci') diff --git a/spec/services/ci/stop_environment_service_spec.rb b/spec/services/ci/stop_environment_service_spec.rb new file mode 100644 index 00000000000..40b2a028f67 --- /dev/null +++ b/spec/services/ci/stop_environment_service_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe Ci::StopEnvironmentService, services: true do + let(:project) { create(:project) } + let(:user) { create(:user) } + + let(:service) { described_class.new(project, user) } + + describe '#execute' do + context 'when environment exists' do + let(:environment) { create(:environment, project: project) } + let(:deployable) { create(:ci_build) } + + let(:stop_build) do + create(:ci_build, :manual, name: 'environment/teardown', + pipeline: deployable.pipeline) + end + + before do + create(:deployment, environment: environment, + deployable: deployable, + on_stop: stop_build.name, + user: user, + project: project, + sha: project.commit.id) + end + + it 'stops environment' do + expect_any_instance_of(Environment).to receive(:stop!) + + service.execute('master') + end + end + end +end -- cgit v1.2.3 From f7ef7bea11012bef6d373ce3b3c43fac08b047fd Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 9 Nov 2016 09:42:09 +0100 Subject: Add environment factory review app trait --- spec/services/ci/stop_environment_service_spec.rb | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) (limited to 'spec/services/ci') diff --git a/spec/services/ci/stop_environment_service_spec.rb b/spec/services/ci/stop_environment_service_spec.rb index 40b2a028f67..05e9e2d84cf 100644 --- a/spec/services/ci/stop_environment_service_spec.rb +++ b/spec/services/ci/stop_environment_service_spec.rb @@ -8,21 +8,8 @@ describe Ci::StopEnvironmentService, services: true do describe '#execute' do context 'when environment exists' do - let(:environment) { create(:environment, project: project) } - let(:deployable) { create(:ci_build) } - - let(:stop_build) do - create(:ci_build, :manual, name: 'environment/teardown', - pipeline: deployable.pipeline) - end - before do - create(:deployment, environment: environment, - deployable: deployable, - on_stop: stop_build.name, - user: user, - project: project, - sha: project.commit.id) + create(:environment, :with_review_app, project: project) end it 'stops environment' do -- cgit v1.2.3 From 45bd5391d7f20715ae4de7a4a5cd9233ab598c28 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 9 Nov 2016 13:31:33 +0100 Subject: Extend tests for service that stops environment --- spec/services/ci/stop_environment_service_spec.rb | 50 ++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'spec/services/ci') diff --git a/spec/services/ci/stop_environment_service_spec.rb b/spec/services/ci/stop_environment_service_spec.rb index 05e9e2d84cf..047f9b0b2ca 100644 --- a/spec/services/ci/stop_environment_service_spec.rb +++ b/spec/services/ci/stop_environment_service_spec.rb @@ -7,7 +7,7 @@ describe Ci::StopEnvironmentService, services: true do let(:service) { described_class.new(project, user) } describe '#execute' do - context 'when environment exists' do + context 'when environment with review app exists' do before do create(:environment, :with_review_app, project: project) end @@ -17,6 +17,54 @@ describe Ci::StopEnvironmentService, services: true do service.execute('master') end + + context 'when specified branch does not exist' do + it 'does not stop environment' do + expect_any_instance_of(Environment).not_to receive(:stop!) + + service.execute('non/existent/branch') + end + end + + context 'when no branch not specified' do + it 'does not stop environment' do + expect_any_instance_of(Environment).not_to receive(:stop!) + + service.execute(nil) + end + end + + context 'when environment is not stoppable' do + before do + allow_any_instance_of(Environment) + .to receive(:stoppable?).and_return(false) + end + + it 'does not stop environment' do + expect_any_instance_of(Environment).not_to receive(:stop!) + + service.execute('master') + end + end + end + + context 'when there is no environment associated with review app' do + before do + create(:environment, project: project) + end + + it 'does not stop environment' do + expect_any_instance_of(Environment).not_to receive(:stop!) + + service.execute('master') + end + end + + context 'when environment does not exist' do + it 'does not raise error' do + expect { service.execute('master') } + .not_to raise_error + end end end end -- cgit v1.2.3 From d945300b8e49c927da8a12ba3a8bac68dbc4b9fc Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 14 Nov 2016 13:54:23 +0100 Subject: Check permissions before stopping CI environments --- spec/services/ci/stop_environment_service_spec.rb | 72 +++++++++++++++-------- 1 file changed, 49 insertions(+), 23 deletions(-) (limited to 'spec/services/ci') diff --git a/spec/services/ci/stop_environment_service_spec.rb b/spec/services/ci/stop_environment_service_spec.rb index 047f9b0b2ca..e044b40679a 100644 --- a/spec/services/ci/stop_environment_service_spec.rb +++ b/spec/services/ci/stop_environment_service_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe Ci::StopEnvironmentService, services: true do - let(:project) { create(:project) } + let(:project) { create(:project, :private) } let(:user) { create(:user) } let(:service) { described_class.new(project, user) } @@ -12,38 +12,46 @@ describe Ci::StopEnvironmentService, services: true do create(:environment, :with_review_app, project: project) end - it 'stops environment' do - expect_any_instance_of(Environment).to receive(:stop!) + context 'when user has permission to stop environment' do + before do + project.team << [user, :developer] + end - service.execute('master') - end + it 'stops environment' do + expect_environment_stopped_on('master') + end - context 'when specified branch does not exist' do - it 'does not stop environment' do - expect_any_instance_of(Environment).not_to receive(:stop!) + context 'when specified branch does not exist' do + it 'does not stop environment' do + expect_environment_not_stopped_on('non/existent/branch') + end + end - service.execute('non/existent/branch') + context 'when no branch not specified' do + it 'does not stop environment' do + expect_environment_not_stopped_on(nil) + end end - end - context 'when no branch not specified' do - it 'does not stop environment' do - expect_any_instance_of(Environment).not_to receive(:stop!) + context 'when environment is not stoppable' do + before do + allow_any_instance_of(Environment) + .to receive(:stoppable?).and_return(false) + end - service.execute(nil) + it 'does not stop environment' do + expect_environment_not_stopped_on('master') + end end end - context 'when environment is not stoppable' do + context 'when user does not have permission to stop environment' do before do - allow_any_instance_of(Environment) - .to receive(:stoppable?).and_return(false) + project.team << [user, :guest] end it 'does not stop environment' do - expect_any_instance_of(Environment).not_to receive(:stop!) - - service.execute('master') + expect_environment_not_stopped_on('master') end end end @@ -53,10 +61,14 @@ describe Ci::StopEnvironmentService, services: true do create(:environment, project: project) end - it 'does not stop environment' do - expect_any_instance_of(Environment).not_to receive(:stop!) + context 'when user has permission to stop environments' do + before do + project.team << [user, :master] + end - service.execute('master') + it 'does not stop environment' do + expect_environment_not_stopped_on('master') + end end end @@ -67,4 +79,18 @@ describe Ci::StopEnvironmentService, services: true do end end end + + def expect_environment_stopped_on(branch) + expect_any_instance_of(Environment) + .to receive(:stop!) + + service.execute(branch) + end + + def expect_environment_not_stopped_on(branch) + expect_any_instance_of(Environment) + .not_to receive(:stop!) + + service.execute(branch) + end end -- cgit v1.2.3 From 990765edf354a7bbb39d3897780fb85bf8d6fa48 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 14 Nov 2016 13:57:09 +0100 Subject: Improve name of service that stops CI environments --- spec/services/ci/stop_environment_service_spec.rb | 96 ---------------------- spec/services/ci/stop_environments_service_spec.rb | 96 ++++++++++++++++++++++ 2 files changed, 96 insertions(+), 96 deletions(-) delete mode 100644 spec/services/ci/stop_environment_service_spec.rb create mode 100644 spec/services/ci/stop_environments_service_spec.rb (limited to 'spec/services/ci') diff --git a/spec/services/ci/stop_environment_service_spec.rb b/spec/services/ci/stop_environment_service_spec.rb deleted file mode 100644 index e044b40679a..00000000000 --- a/spec/services/ci/stop_environment_service_spec.rb +++ /dev/null @@ -1,96 +0,0 @@ -require 'spec_helper' - -describe Ci::StopEnvironmentService, services: true do - let(:project) { create(:project, :private) } - let(:user) { create(:user) } - - let(:service) { described_class.new(project, user) } - - describe '#execute' do - context 'when environment with review app exists' do - before do - create(:environment, :with_review_app, project: project) - end - - context 'when user has permission to stop environment' do - before do - project.team << [user, :developer] - end - - it 'stops environment' do - expect_environment_stopped_on('master') - end - - context 'when specified branch does not exist' do - it 'does not stop environment' do - expect_environment_not_stopped_on('non/existent/branch') - end - end - - context 'when no branch not specified' do - it 'does not stop environment' do - expect_environment_not_stopped_on(nil) - end - end - - context 'when environment is not stoppable' do - before do - allow_any_instance_of(Environment) - .to receive(:stoppable?).and_return(false) - end - - it 'does not stop environment' do - expect_environment_not_stopped_on('master') - end - end - end - - context 'when user does not have permission to stop environment' 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 there is no environment associated with review app' do - before do - create(:environment, project: project) - end - - context 'when user has permission to stop environments' do - before do - project.team << [user, :master] - end - - it 'does not stop environment' do - expect_environment_not_stopped_on('master') - end - end - end - - context 'when environment does not exist' do - it 'does not raise error' do - expect { service.execute('master') } - .not_to raise_error - end - end - end - - def expect_environment_stopped_on(branch) - expect_any_instance_of(Environment) - .to receive(:stop!) - - service.execute(branch) - end - - def expect_environment_not_stopped_on(branch) - expect_any_instance_of(Environment) - .not_to receive(:stop!) - - service.execute(branch) - end -end diff --git a/spec/services/ci/stop_environments_service_spec.rb b/spec/services/ci/stop_environments_service_spec.rb new file mode 100644 index 00000000000..c3e1af3afe2 --- /dev/null +++ b/spec/services/ci/stop_environments_service_spec.rb @@ -0,0 +1,96 @@ +require 'spec_helper' + +describe Ci::StopEnvironmentsService, services: true do + let(:project) { create(:project, :private) } + let(:user) { create(:user) } + + let(:service) { described_class.new(project, user) } + + describe '#execute' do + context 'when environment with review app exists' do + before do + create(:environment, :with_review_app, project: project) + end + + context 'when user has permission to stop environment' do + before do + project.team << [user, :developer] + end + + it 'stops environment' do + expect_environment_stopped_on('master') + end + + context 'when specified branch does not exist' do + it 'does not stop environment' do + expect_environment_not_stopped_on('non/existent/branch') + end + end + + context 'when no branch not specified' do + it 'does not stop environment' do + expect_environment_not_stopped_on(nil) + end + end + + context 'when environment is not stoppable' do + before do + allow_any_instance_of(Environment) + .to receive(:stoppable?).and_return(false) + end + + it 'does not stop environment' do + expect_environment_not_stopped_on('master') + end + end + end + + context 'when user does not have permission to stop environment' 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 there is no environment associated with review app' do + before do + create(:environment, project: project) + end + + context 'when user has permission to stop environments' do + before do + project.team << [user, :master] + end + + it 'does not stop environment' do + expect_environment_not_stopped_on('master') + end + end + end + + context 'when environment does not exist' do + it 'does not raise error' do + expect { service.execute('master') } + .not_to raise_error + end + end + end + + def expect_environment_stopped_on(branch) + expect_any_instance_of(Environment) + .to receive(:stop!) + + service.execute(branch) + end + + def expect_environment_not_stopped_on(branch) + expect_any_instance_of(Environment) + .not_to receive(:stop!) + + service.execute(branch) + end +end -- cgit v1.2.3 From ceb06983ec186bcc1c6fce28613bdb92297e5bf1 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 14 Nov 2016 14:10:54 +0100 Subject: Make it possible to fabricate environment on branch --- spec/services/ci/stop_environments_service_spec.rb | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'spec/services/ci') diff --git a/spec/services/ci/stop_environments_service_spec.rb b/spec/services/ci/stop_environments_service_spec.rb index c3e1af3afe2..6f7d1a5d28d 100644 --- a/spec/services/ci/stop_environments_service_spec.rb +++ b/spec/services/ci/stop_environments_service_spec.rb @@ -9,7 +9,8 @@ describe Ci::StopEnvironmentsService, services: true do describe '#execute' do context 'when environment with review app exists' do before do - create(:environment, :with_review_app, project: project) + create(:environment, :with_review_app, project: project, + ref: 'feature') end context 'when user has permission to stop environment' do @@ -17,8 +18,16 @@ describe Ci::StopEnvironmentsService, services: true do project.team << [user, :developer] end - it 'stops environment' do - expect_environment_stopped_on('master') + context 'when environment is associated with removed branch' do + it 'stops environment' do + expect_environment_stopped_on('feature') + end + end + + context 'when environment is associated with different branch' do + it 'does not stop environment' do + expect_environment_not_stopped_on('master') + end end context 'when specified branch does not exist' do @@ -40,7 +49,7 @@ describe Ci::StopEnvironmentsService, services: true do end it 'does not stop environment' do - expect_environment_not_stopped_on('master') + expect_environment_not_stopped_on('feature') end end end -- cgit v1.2.3