# 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