spec/lib/release_tools/pre/notifier_spec.rb (62 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' describe ReleaseTools::Pre::Notifier do subject(:notifier) do described_class.new(pipeline_id: 123, deploy_version: deploy_version) end let(:deploy_version) { '16.9.202402091206-d530de1fcd9.d71cbbdb4bc' } let(:client) { stub_const('ReleaseTools::GitlabOpsClient', spy) } let(:notification) { stub_const('ReleaseTools::Slack::PreNotification', spy) } let(:bridge) do create( :bridge_job, name: 'pre:deploy', downstream_pipeline: deployer_pipeline ) end let(:bridges) { Gitlab::PaginatedResponse.new([bridge]) } let(:deployer_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::PreNotification) .to receive(:new) .and_return(instance_double(ReleaseTools::Slack::PreNotification, execute: nil)) end describe '#execute' do it 'sends a slack notification' do expect(notification) .to receive(:new) .with({ deploy_version: deploy_version, pipeline: deployer_pipeline }) 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: 'pre:deploy', downstream_pipeline: nil ) end it 'does not send a slack notification' do expect(notification).not_to receive(:new) notifier.execute end end end end