spec/lib/release_tools/release_environment/deploy_notifier_spec.rb (73 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::ReleaseEnvironment::DeployNotifier do
subject(:notifier) do
described_class.new(pipeline_url: pipeline_url,
environment_name: environment_name,
release_environment_version: release_environment_version)
end
let(:pipeline_url) { 'https://gitlab.com/gitlab-org/gitlab/-/pipelines/1' }
let(:environment_name) { '16-10-stable' }
let(:release_environment_version) { '16-10-stable-9dce3c3d' }
let(:client) { stub_const('ReleaseTools::GitlabClient', spy) }
let(:notification) { stub_const('ReleaseTools::Slack::ReleaseEnvironment::DeployNotification', spy) }
let(:bridge) do
create(
:bridge_job,
name: 'release-environments-deploy',
downstream_pipeline: deploy_pipeline
)
end
let(:bridges) { Gitlab::PaginatedResponse.new([bridge]) }
let(:deploy_pipeline) do
create(:pipeline, web_url: 'https://test.gitlab.net/deployer/-/pipelines/123')
end
before do
allow(client)
.to receive(:pipeline_bridges)
.and_return(bridges)
allow(ReleaseTools::Slack::ReleaseEnvironment::DeployNotification)
.to receive(:new)
.and_return(instance_double(ReleaseTools::Slack::ReleaseEnvironment::DeployNotification, execute: nil))
end
describe '#execute' do
it 'sends a slack notification' do
expect(notification)
.to receive(:new)
.with({ pipeline: deploy_pipeline, environment_name: environment_name, release_environment_version: release_environment_version })
notifier.execute
end
context 'when the bridge is not found' do
let(:bridges) { Gitlab::PaginatedResponse.new([]) }
it 'does not send a slack notification' do
expect(notification).not_to receive(:new)
notifier.execute
end
it 'calls the pipeline bridges api at least twice' do
expect(client)
.to receive(:pipeline_bridges)
.at_least(:twice)
notifier.execute
end
end
context 'when the downstream pipeline is not found' do
let(:bridge) do
create(
:bridge_job,
name: 'release-environments-deploy',
downstream_pipeline: nil
)
end
it 'does not send a slack notification' do
expect(notification).not_to receive(:new)
notifier.execute
end
end
context 'when security mirror is used,' do
let(:pipeline_url) { 'https://gitlab.com/gitlab-org/security/gitlab/-/pipelines/1' }
it 'the security path is used' do
expect(ReleaseTools::Project::GitlabEe).to receive(:security_path)
notifier.execute
end
end
end
end