diff options
Diffstat (limited to 'spec/models/ci/ref_spec.rb')
-rw-r--r-- | spec/models/ci/ref_spec.rb | 71 |
1 files changed, 61 insertions, 10 deletions
diff --git a/spec/models/ci/ref_spec.rb b/spec/models/ci/ref_spec.rb index fd4742a8ad2..8bce3c10d8c 100644 --- a/spec/models/ci/ref_spec.rb +++ b/spec/models/ci/ref_spec.rb @@ -3,8 +3,69 @@ require 'spec_helper' RSpec.describe Ci::Ref do + using RSpec::Parameterized::TableSyntax + it { is_expected.to belong_to(:project) } + describe 'state machine transitions' do + context 'unlock artifacts transition' do + let(:ci_ref) { create(:ci_ref) } + let(:unlock_artifacts_worker_spy) { class_spy(::Ci::PipelineSuccessUnlockArtifactsWorker) } + + before do + stub_const('Ci::PipelineSuccessUnlockArtifactsWorker', unlock_artifacts_worker_spy) + end + + context 'when keep latest artifact feature is enabled' do + before do + stub_feature_flags(keep_latest_artifacts_for_ref: true) + end + + where(:initial_state, :action, :count) do + :unknown | :succeed! | 1 + :unknown | :do_fail! | 0 + :success | :succeed! | 1 + :success | :do_fail! | 0 + :failed | :succeed! | 1 + :failed | :do_fail! | 0 + :fixed | :succeed! | 1 + :fixed | :do_fail! | 0 + :broken | :succeed! | 1 + :broken | :do_fail! | 0 + :still_failing | :succeed | 1 + :still_failing | :do_fail | 0 + end + + with_them do + context "when transitioning states" do + before do + status_value = Ci::Ref.state_machines[:status].states[initial_state].value + ci_ref.update!(status: status_value) + end + + it 'calls unlock artifacts service' do + ci_ref.send(action) + + expect(unlock_artifacts_worker_spy).to have_received(:perform_async).exactly(count).times + end + end + end + end + + context 'when keep latest artifact feature is not enabled' do + before do + stub_feature_flags(keep_latest_artifacts_for_ref: false) + end + + it 'does not call unlock artifacts service' do + ci_ref.succeed! + + expect(unlock_artifacts_worker_spy).not_to have_received(:perform_async) + end + end + end + end + describe '.ensure_for' do let_it_be(:project) { create(:project, :repository) } @@ -161,16 +222,6 @@ RSpec.describe Ci::Ref do it_behaves_like 'no-op' end - context 'when feature flag is disabled' do - let(:pipeline) { create(:ci_pipeline, :success, ci_ref: ci_ref) } - - before do - stub_feature_flags(ci_pipeline_fixed_notifications: false) - end - - it_behaves_like 'no-op' - end - context 'when pipeline is not the latest pipeline' do let!(:pipeline) { create(:ci_pipeline, :success, ci_ref: ci_ref) } let!(:latest_pipeline) { create(:ci_pipeline, :success, ci_ref: ci_ref) } |