diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-11-14 15:57:09 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-11-14 15:57:09 +0300 |
commit | 990765edf354a7bbb39d3897780fb85bf8d6fa48 (patch) | |
tree | c01cc17db3ab7173ddef60b93f5115db25a46871 /spec/services/ci/stop_environments_service_spec.rb | |
parent | d945300b8e49c927da8a12ba3a8bac68dbc4b9fc (diff) |
Improve name of service that stops CI environments
Diffstat (limited to 'spec/services/ci/stop_environments_service_spec.rb')
-rw-r--r-- | spec/services/ci/stop_environments_service_spec.rb | 96 |
1 files changed, 96 insertions, 0 deletions
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 |