From 9f46488805e86b1bc341ea1620b866016c2ce5ed Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 20 May 2020 14:34:42 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-0-stable-ee --- spec/lib/gitlab/chat/responder/mattermost_spec.rb | 117 ++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 spec/lib/gitlab/chat/responder/mattermost_spec.rb (limited to 'spec/lib/gitlab/chat') diff --git a/spec/lib/gitlab/chat/responder/mattermost_spec.rb b/spec/lib/gitlab/chat/responder/mattermost_spec.rb new file mode 100644 index 00000000000..f3480dfef06 --- /dev/null +++ b/spec/lib/gitlab/chat/responder/mattermost_spec.rb @@ -0,0 +1,117 @@ +# frozen_string_literal: true + +require 'spec_helper' + +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 -- cgit v1.2.3