spec/lib/release_tools/slack/qa_notification_spec.rb (152 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::Slack::QaNotification do
let(:deploy_version) { '14.6.202112031820-3605bffdaf6.c516dd235a1' }
let(:environment) { 'gprd-cny' }
let(:qa_pipeline) do
create(
:pipeline,
:failed,
web_url: 'https://test.com/quality/-/pipelines/123'
)
end
let(:qa_bridge) do
create(
:gitlab_response,
name: qa_name,
status: :failed,
downstream_pipeline: qa_pipeline
)
end
subject(:notifier) do
described_class.new(
deploy_version: deploy_version,
pipelines: [qa_bridge],
environment: environment
)
end
describe '#execute' do
let(:qa_name) { 'qa:smoke:gprd-cny' }
let(:context_elements) do
[
{ text: ':clock1: 2021-09-14 15:55 UTC', type: 'mrkdwn' }
]
end
before do
allow(ReleaseTools::Slack::Message)
.to receive(:post)
.and_return({})
end
context 'with a smoke pipeline' do
it 'sends a slack message' do
block_content =
":canary: :ci_failing: *QA gprd-cny* *smoke* <https://test.com/quality/-/pipelines/123|failed> `#{deploy_version}`"
expect(ReleaseTools::Slack::Message)
.to receive(:post)
.with(
{
channel: ReleaseTools::Slack::ANNOUNCEMENTS,
message: "qa gprd-cny failed 14.6.202112031820-3605bffdaf6.c516dd235a1",
blocks: slack_mrkdwn_block(text: block_content, context_elements: context_elements)
}
)
without_dry_run do
Timecop.freeze(Time.utc(2021, 9, 14, 15, 55, 0)) do
notifier.execute
end
end
end
end
context 'with a smoke-main pipeline' do
let(:qa_name) { 'qa:smoke-main:gprd-cny' }
it 'sends a slack message' do
block_content =
":canary: :ci_failing: *QA gprd-cny* *smoke-main* <https://test.com/quality/-/pipelines/123|failed> `#{deploy_version}`"
expect(ReleaseTools::Slack::Message)
.to receive(:post)
.with(
{
channel: ReleaseTools::Slack::ANNOUNCEMENTS,
message: "qa gprd-cny failed 14.6.202112031820-3605bffdaf6.c516dd235a1",
blocks: slack_mrkdwn_block(text: block_content, context_elements: context_elements)
}
)
without_dry_run do
Timecop.freeze(Time.utc(2021, 9, 14, 15, 55, 0)) do
notifier.execute
end
end
end
end
context 'with two pipelines' do
let(:qa_smoke_bridge) do
create(
:gitlab_response,
name: 'qa:smoke:gprd-cny',
status: :failed,
downstream_pipeline: qa_pipeline
)
end
let(:qa_smoke_main_bridge) do
create(
:gitlab_response,
name: 'qa:smoke-main:gprd-cny',
status: :failed,
downstream_pipeline: qa_pipeline
)
end
subject(:notifier) do
described_class.new(
deploy_version: deploy_version,
pipelines: [qa_smoke_bridge, qa_smoke_main_bridge],
environment: environment
)
end
it 'sends a slack message' do
block_content =
":canary: :ci_failing: *QA gprd-cny* <https://test.com/quality/-/pipelines/123|smoke> and <https://test.com/quality/-/pipelines/123|smoke-main> failed `#{deploy_version}`"
expect(ReleaseTools::Slack::Message)
.to receive(:post)
.with(
{
channel: ReleaseTools::Slack::ANNOUNCEMENTS,
message: "qa gprd-cny failed 14.6.202112031820-3605bffdaf6.c516dd235a1",
blocks: slack_mrkdwn_block(text: block_content, context_elements: context_elements)
}
)
without_dry_run do
Timecop.freeze(Time.utc(2021, 9, 14, 15, 55, 0)) do
notifier.execute
end
end
end
end
context 'without deploy_version' do
let(:deploy_version) { nil }
it 'sends a slack message' do
block_content =
":canary: :ci_failing: *QA gprd-cny* *smoke* <https://test.com/quality/-/pipelines/123|failed>"
expect(ReleaseTools::Slack::Message)
.to receive(:post)
.with(
{
channel: ReleaseTools::Slack::ANNOUNCEMENTS,
message: "qa gprd-cny failed ",
blocks: slack_mrkdwn_block(text: block_content, context_elements: context_elements)
}
)
without_dry_run do
Timecop.freeze(Time.utc(2021, 9, 14, 15, 55, 0)) do
notifier.execute
end
end
end
end
context 'with dry-run' do
it 'does nothing' do
expect(ReleaseTools::Slack::Message)
.not_to receive(:post)
notifier.execute
end
end
end
end