diff options
Diffstat (limited to 'spec/models/deployment_spec.rb')
-rw-r--r-- | spec/models/deployment_spec.rb | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index 9afacd518af..c962b012a4b 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -202,6 +202,31 @@ RSpec.describe Deployment do deployment.cancel! end end + + context 'when deployment was skipped' do + let(:deployment) { create(:deployment, :running) } + + it 'has correct status' do + deployment.skip! + + expect(deployment).to be_skipped + expect(deployment.finished_at).to be_nil + end + + it 'does not execute Deployments::LinkMergeRequestWorker asynchronously' do + expect(Deployments::LinkMergeRequestWorker) + .not_to receive(:perform_async).with(deployment.id) + + deployment.skip! + end + + it 'does not execute Deployments::ExecuteHooksWorker' do + expect(Deployments::ExecuteHooksWorker) + .not_to receive(:perform_async).with(deployment.id) + + deployment.skip! + end + end end describe '#success?' do @@ -320,6 +345,7 @@ RSpec.describe Deployment do deployment2 = create(:deployment, status: :running ) create(:deployment, status: :failed ) create(:deployment, status: :canceled ) + create(:deployment, status: :skipped) is_expected.to contain_exactly(deployment1, deployment2) end @@ -346,10 +372,70 @@ RSpec.describe Deployment do it 'retrieves deployments with deployable builds' do with_deployable = create(:deployment) create(:deployment, deployable: nil) + create(:deployment, deployable_type: 'CommitStatus', deployable_id: non_existing_record_id) is_expected.to contain_exactly(with_deployable) end end + + describe 'finished_between' do + subject { described_class.finished_between(start_time, end_time) } + + let_it_be(:start_time) { DateTime.new(2017) } + let_it_be(:end_time) { DateTime.new(2019) } + let_it_be(:deployment_2016) { create(:deployment, finished_at: DateTime.new(2016)) } + let_it_be(:deployment_2017) { create(:deployment, finished_at: DateTime.new(2017)) } + let_it_be(:deployment_2018) { create(:deployment, finished_at: DateTime.new(2018)) } + let_it_be(:deployment_2019) { create(:deployment, finished_at: DateTime.new(2019)) } + let_it_be(:deployment_2020) { create(:deployment, finished_at: DateTime.new(2020)) } + + it 'retrieves deployments that finished between the specified times' do + is_expected.to contain_exactly(deployment_2017, deployment_2018) + end + end + + describe 'visible' do + subject { described_class.visible } + + it 'retrieves the visible deployments' do + deployment1 = create(:deployment, status: :running) + deployment2 = create(:deployment, status: :success) + deployment3 = create(:deployment, status: :failed) + deployment4 = create(:deployment, status: :canceled) + create(:deployment, status: :skipped) + + is_expected.to contain_exactly(deployment1, deployment2, deployment3, deployment4) + end + end + end + + describe 'latest_for_sha' do + subject { described_class.latest_for_sha(sha) } + + let_it_be(:project) { create(:project, :repository) } + let_it_be(:commits) { project.repository.commits('master', limit: 2) } + let_it_be(:deployments) { commits.reverse.map { |commit| create(:deployment, project: project, sha: commit.id) } } + let(:sha) { commits.map(&:id) } + + it 'finds the latest deployment with sha' do + is_expected.to eq(deployments.last) + end + + context 'when sha is old' do + let(:sha) { commits.last.id } + + it 'finds the latest deployment with sha' do + is_expected.to eq(deployments.first) + end + end + + context 'when sha is nil' do + let(:sha) { nil } + + it 'returns nothing' do + is_expected.to be_nil + end + end end describe '#includes_commit?' do |