spec/lib/release_tools/slack/webhook_spec.rb (63 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::Slack::Webhook do
include SlackWebhookHelpers
describe '.fire_hook' do
context 'without webhook_url' do
it 'raises NoWebhookURLError' do
expect { described_class.fire_hook(text: 'foo') }
.to raise_error(described_class::NoWebhookURLError)
end
end
context 'with empty webhook_url' do
it 'raises no error' do
allow(described_class).to receive(:webhook_url).and_return('')
expect { described_class.fire_hook(text: 'foo') }.not_to raise_error
end
end
context 'with webhook_url' do
let(:text) { 'Hello!' }
let(:webhook_url) { 'https://slack.example.com/' }
before do
# This would normally raise NoWebhookURLError, but we're testing an
# abstract class
allow(described_class).to receive(:webhook_url).and_return(webhook_url)
end
context 'when slack_down FF is on' do
before do
enable_feature(:slack_down)
end
it 'does not call API' do
expect(HTTP).not_to receive(:post)
described_class.fire_hook(text: text)
end
end
context 'when channel is not given' do
it 'posts to the given url with the given arguments' do
expect_post(json: { text: text }).and_return(response(200))
described_class.fire_hook(text: text)
end
context 'when response is not successfull' do
it 'raises CouldNotPostError' do
expect_post(json: { text: text }).and_return(response(400))
expect { described_class.fire_hook(text: text) }
.to raise_error(described_class::CouldNotPostError)
end
end
end
context 'when channel is given' do
it 'passes the given channel' do
channel = '#ce-to-ee'
expect_post(json: { text: text, channel: channel })
.and_return(response(200))
described_class.fire_hook(channel: channel, text: text)
end
end
context 'when attachments are given' do
it 'passes the attachments' do
attachments = [{ title: 'foo' }]
expect_post(json: { attachments: attachments })
.and_return(response(200))
described_class.fire_hook(attachments: attachments)
end
end
end
end
end