Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/environment_spec.rb')
-rw-r--r--spec/models/environment_spec.rb69
1 files changed, 68 insertions, 1 deletions
diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb
index af7ab24d7d6..72143d69fc8 100644
--- a/spec/models/environment_spec.rb
+++ b/spec/models/environment_spec.rb
@@ -7,6 +7,7 @@ describe Environment, :use_clean_rails_memory_store_caching do
using RSpec::Parameterized::TableSyntax
include RepoHelpers
include StubENV
+ include CreateEnvironmentsHelpers
let(:project) { create(:project, :repository) }
@@ -114,6 +115,72 @@ describe Environment, :use_clean_rails_memory_store_caching do
end
end
+ describe '.auto_stoppable' do
+ subject { described_class.auto_stoppable(limit) }
+
+ let(:limit) { 100 }
+
+ context 'when environment is auto-stoppable' do
+ let!(:environment) { create(:environment, :auto_stoppable) }
+
+ it { is_expected.to eq([environment]) }
+ end
+
+ context 'when environment is not auto-stoppable' do
+ let!(:environment) { create(:environment) }
+
+ it { is_expected.to be_empty }
+ end
+ end
+
+ describe '.stop_actions' do
+ subject { environments.stop_actions }
+
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:user) { create(:user) }
+ let(:environments) { Environment.all }
+
+ before_all do
+ project.add_developer(user)
+ project.repository.add_branch(user, 'review/feature-1', 'master')
+ project.repository.add_branch(user, 'review/feature-2', 'master')
+ end
+
+ shared_examples_for 'correct filtering' do
+ it 'returns stop actions for available environments only' do
+ expect(subject.count).to eq(1)
+ expect(subject.first.name).to eq('stop_review_app')
+ expect(subject.first.ref).to eq('review/feature-1')
+ end
+ end
+
+ before do
+ create_review_app(user, project, 'review/feature-1')
+ create_review_app(user, project, 'review/feature-2')
+ end
+
+ it 'returns stop actions for environments' do
+ expect(subject.count).to eq(2)
+ expect(subject).to match_array(Ci::Build.where(name: 'stop_review_app'))
+ end
+
+ context 'when one of the stop actions has already been executed' do
+ before do
+ Ci::Build.where(ref: 'review/feature-2').find_by_name('stop_review_app').enqueue!
+ end
+
+ it_behaves_like 'correct filtering'
+ end
+
+ context 'when one of the deployments does not have stop action' do
+ before do
+ Deployment.where(ref: 'review/feature-2').update_all(on_stop: nil)
+ end
+
+ it_behaves_like 'correct filtering'
+ end
+ end
+
describe '.pluck_names' do
subject { described_class.pluck_names }
@@ -449,7 +516,7 @@ describe Environment, :use_clean_rails_memory_store_caching do
describe '#reset_auto_stop' do
subject { environment.reset_auto_stop }
- let(:environment) { create(:environment, :auto_stopped) }
+ let(:environment) { create(:environment, :auto_stoppable) }
it 'nullifies the auto_stop_at' do
expect { subject }.to change(environment, :auto_stop_at).from(Time).to(nil)