gitlab-org--gitlab-foss/spec/lib/gitlab/chat/responder/mattermost_spec.rb

118 lines
3.0 KiB
Ruby
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Chat::Responder::Mattermost do
let(:chat_name) { create(:chat_name, chat_id: 'U123') }
let(:pipeline) do
pipeline = create(:ci_pipeline)
pipeline.create_chat_data!(
response_url: 'http://example.com',
chat_name_id: chat_name.id
)
pipeline
end
let(:build) { create(:ci_build, pipeline: pipeline) }
let(:responder) { described_class.new(build) }
describe '#send_response' do
it 'sends a response back to Slack' do
expect(Gitlab::HTTP).to receive(:post).with(
'http://example.com',
{ headers: { 'Content-Type': 'application/json' }, body: 'hello'.to_json }
)
responder.send_response('hello')
end
end
describe '#success' do
it 'returns the output for a successful build' do
expect(responder)
.to receive(:send_response)
.with(
hash_including(
response_type: :in_channel,
attachments: array_including(
a_hash_including(
text: /#{pipeline.chat_data.chat_name.user.name}.*completed successfully/,
fields: array_including(
a_hash_including(value: /##{build.id}/),
a_hash_including(value: build.name),
a_hash_including(value: "```shell\nscript output\n```")
)
)
)
)
)
responder.success('script output')
end
it 'limits the output to a fixed size' do
expect(responder)
.to receive(:send_response)
.with(
hash_including(
response_type: :in_channel,
attachments: array_including(
a_hash_including(
fields: array_including(
a_hash_including(value: /The output is too large/)
)
)
)
)
)
responder.success('a' * 4000)
end
it 'does not send a response if the output is empty' do
expect(responder).not_to receive(:send_response)
responder.success('')
end
end
describe '#failure' do
it 'returns the output for a failed build' do
expect(responder)
.to receive(:send_response)
.with(
hash_including(
response_type: :in_channel,
attachments: array_including(
a_hash_including(
text: /#{pipeline.chat_data.chat_name.user.name}.*failed/,
fields: array_including(
a_hash_including(value: /##{build.id}/),
a_hash_including(value: build.name)
)
)
)
)
)
responder.failure
end
end
describe '#scheduled_output' do
it 'returns the output for a scheduled build' do
output = responder.scheduled_output
expect(output).to match(
hash_including(
response_type: :ephemeral,
text: /##{build.id}/
)
)
end
end
end