diff options
Diffstat (limited to 'spec/models/deployment_spec.rb')
-rw-r--r-- | spec/models/deployment_spec.rb | 114 |
1 files changed, 95 insertions, 19 deletions
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index 51e1e63da8d..29b37ef7371 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -268,31 +268,69 @@ RSpec.describe Deployment do end end + context 'when deployment is blocked' do + let(:deployment) { create(:deployment, :created) } + + it 'has correct status' do + deployment.block! + + expect(deployment).to be_blocked + expect(deployment.finished_at).to be_nil + end + + it 'does not execute Deployments::LinkMergeRequestWorker asynchronously' do + expect(Deployments::LinkMergeRequestWorker).not_to receive(:perform_async) + + deployment.block! + end + + it 'does not execute Deployments::HooksWorker' do + expect(Deployments::HooksWorker).not_to receive(:perform_async) + + deployment.block! + end + end + describe 'synching status to Jira' do - let(:deployment) { create(:deployment) } + let_it_be(:project) { create(:project, :repository) } + let(:deployment) { create(:deployment, project: project) } let(:worker) { ::JiraConnect::SyncDeploymentsWorker } - it 'calls the worker on creation' do - expect(worker).to receive(:perform_async).with(Integer) + context 'when Jira Connect subscription does not exist' do + it 'does not call the worker' do + expect(worker).not_to receive(:perform_async) - deployment + deployment + end end - it 'does not call the worker for skipped deployments' do - expect(deployment).to be_present # warm-up, ignore the creation trigger + context 'when Jira Connect subscription exists' do + before_all do + create(:jira_connect_subscription, namespace: project.namespace) + end - expect(worker).not_to receive(:perform_async) + it 'calls the worker on creation' do + expect(worker).to receive(:perform_async).with(Integer) - deployment.skip! - end + deployment + end + + it 'does not call the worker for skipped deployments' do + expect(deployment).to be_present # warm-up, ignore the creation trigger + + expect(worker).not_to receive(:perform_async) + + deployment.skip! + end - %i[run! succeed! drop! cancel!].each do |event| - context "when we call pipeline.#{event}" do - it 'triggers a Jira synch worker' do - expect(worker).to receive(:perform_async).with(deployment.id) + %i[run! succeed! drop! cancel!].each do |event| + context "when we call pipeline.#{event}" do + it 'triggers a Jira synch worker' do + expect(worker).to receive(:perform_async).with(deployment.id) - deployment.send(event) + deployment.send(event) + end end end end @@ -448,11 +486,12 @@ RSpec.describe Deployment do subject { described_class.active } it 'retrieves the active deployments' do - deployment1 = create(:deployment, status: :created ) - deployment2 = create(:deployment, status: :running ) - create(:deployment, status: :failed ) - create(:deployment, status: :canceled ) + deployment1 = create(:deployment, status: :created) + deployment2 = create(:deployment, status: :running) + create(:deployment, status: :failed) + create(:deployment, status: :canceled) create(:deployment, status: :skipped) + create(:deployment, status: :blocked) is_expected.to contain_exactly(deployment1, deployment2) end @@ -512,9 +551,25 @@ RSpec.describe Deployment do deployment2 = create(:deployment, status: :success) deployment3 = create(:deployment, status: :failed) deployment4 = create(:deployment, status: :canceled) + deployment5 = create(:deployment, status: :blocked) + create(:deployment, status: :skipped) + + is_expected.to contain_exactly(deployment1, deployment2, deployment3, deployment4, deployment5) + end + end + + describe 'upcoming' do + subject { described_class.upcoming } + + it 'retrieves the upcoming deployments' do + deployment1 = create(:deployment, status: :running) + deployment2 = create(:deployment, status: :blocked) + create(:deployment, status: :success) + create(:deployment, status: :failed) + create(:deployment, status: :canceled) create(:deployment, status: :skipped) - is_expected.to contain_exactly(deployment1, deployment2, deployment3, deployment4) + is_expected.to contain_exactly(deployment1, deployment2) end end end @@ -840,6 +895,27 @@ RSpec.describe Deployment do expect(deploy.update_status('created')).to eq(false) end + + context 'mapping status to event' do + using RSpec::Parameterized::TableSyntax + + where(:status, :method) do + 'running' | :run! + 'success' | :succeed! + 'failed' | :drop! + 'canceled' | :cancel! + 'skipped' | :skip! + 'blocked' | :block! + end + + with_them do + it 'calls the correct method for the given status' do + expect(deploy).to receive(method) + + deploy.update_status(status) + end + end + end end describe '#sync_status_with' do |