diff options
Diffstat (limited to 'spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb')
-rw-r--r-- | spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb index 0c8a0de2f34..e62bf042fba 100644 --- a/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb @@ -16,20 +16,37 @@ RSpec.describe Gitlab::Ci::Pipeline::Seed::Environment do subject { seed.to_resource } shared_examples_for 'returning a correct environment' do + let(:expected_auto_stop_in_seconds) do + if expected_auto_stop_in + ChronicDuration.parse(expected_auto_stop_in).seconds + end + end + it 'returns a persisted environment object' do - expect { subject }.to change { Environment.count }.by(1) + freeze_time do + expect { subject }.to change { Environment.count }.by(1) - expect(subject).to be_a(Environment) - expect(subject).to be_persisted - expect(subject.project).to eq(project) - expect(subject.name).to eq(expected_environment_name) + expect(subject).to be_a(Environment) + expect(subject).to be_persisted + expect(subject.project).to eq(project) + expect(subject.name).to eq(expected_environment_name) + expect(subject.auto_stop_in).to eq(expected_auto_stop_in_seconds) + end end context 'when environment has already existed' do - let!(:environment) { create(:environment, project: project, name: expected_environment_name) } + let!(:environment) do + create(:environment, + project: project, + name: expected_environment_name + ).tap do |env| + env.auto_stop_in = expected_auto_stop_in + end + end it 'returns the existing environment object' do expect { subject }.not_to change { Environment.count } + expect { subject }.not_to change { environment.auto_stop_at } expect(subject).to be_persisted expect(subject).to eq(environment) @@ -37,9 +54,10 @@ RSpec.describe Gitlab::Ci::Pipeline::Seed::Environment do end end - context 'when job has environment attribute' do + context 'when job has environment name attribute' do let(:environment_name) { 'production' } let(:expected_environment_name) { 'production' } + let(:expected_auto_stop_in) { nil } let(:attributes) do { @@ -49,11 +67,41 @@ RSpec.describe Gitlab::Ci::Pipeline::Seed::Environment do end it_behaves_like 'returning a correct environment' + + context 'and job environment also has an auto_stop_in attribute' do + let(:environment_auto_stop_in) { '5 minutes' } + let(:expected_auto_stop_in) { '5 minutes' } + + let(:attributes) do + { + environment: environment_name, + options: { + environment: { + name: environment_name, + auto_stop_in: environment_auto_stop_in + } + } + } + end + + it_behaves_like 'returning a correct environment' + + context 'but the environment auto_stop_in on create flag is disabled' do + let(:expected_auto_stop_in) { nil } + + before do + stub_feature_flags(environment_auto_stop_start_on_create: false) + end + + it_behaves_like 'returning a correct environment' + end + end end context 'when job starts a review app' do let(:environment_name) { 'review/$CI_COMMIT_REF_NAME' } let(:expected_environment_name) { "review/#{job.ref}" } + let(:expected_auto_stop_in) { nil } let(:attributes) do { @@ -68,6 +116,7 @@ RSpec.describe Gitlab::Ci::Pipeline::Seed::Environment do context 'when job stops a review app' do let(:environment_name) { 'review/$CI_COMMIT_REF_NAME' } let(:expected_environment_name) { "review/#{job.ref}" } + let(:expected_auto_stop_in) { nil } let(:attributes) do { |