diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
commit | 6ed4ec3e0b1340f96b7c043ef51d1b33bbe85fde (patch) | |
tree | dc4d20fe6064752c0bd323187252c77e0a89144b /spec/models/integrations/hangouts_chat_spec.rb | |
parent | 9868dae7fc0655bd7ce4a6887d4e6d487690eeed (diff) |
Add latest changes from gitlab-org/gitlab@15-4-stable-eev15.4.0-rc42
Diffstat (limited to 'spec/models/integrations/hangouts_chat_spec.rb')
-rw-r--r-- | spec/models/integrations/hangouts_chat_spec.rb | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/spec/models/integrations/hangouts_chat_spec.rb b/spec/models/integrations/hangouts_chat_spec.rb index 17b40c484f5..828bcdf5d8f 100644 --- a/spec/models/integrations/hangouts_chat_spec.rb +++ b/spec/models/integrations/hangouts_chat_spec.rb @@ -12,4 +12,175 @@ RSpec.describe Integrations::HangoutsChat do } end end + + let(:chat_integration) { described_class.new } + let(:webhook_url) { 'https://example.gitlab.com/' } + let(:webhook_url_regex) { /\A#{webhook_url}.*/ } + + describe "#execute" do + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, :repository, :wiki_repo) } + + before do + allow(chat_integration).to receive_messages( + project: project, + project_id: project.id, + webhook: webhook_url + ) + + WebMock.stub_request(:post, webhook_url_regex) + end + + context 'with push events' do + let(:push_sample_data) do + Gitlab::DataBuilder::Push.build_sample(project, user) + end + + it "adds thread key for push events" do + expect(chat_integration.execute(push_sample_data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /push .*?/ })) + .once + end + end + + context 'with issue events' do + let(:issues_sample_data) { create(:issue).to_hook_data(user) } + + it "adds thread key for issue events" do + expect(chat_integration.execute(issues_sample_data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /issue .*?/ })) + .once + end + end + + context 'with merge events' do + let(:merge_sample_data) { create(:merge_request).to_hook_data(user) } + + it "adds thread key for merge events" do + expect(chat_integration.execute(merge_sample_data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /merge request .*?/ })) + .once + end + end + + context 'with wiki page events' do + let(:wiki_page_sample_data) do + Gitlab::DataBuilder::WikiPage.build(create(:wiki_page, message: 'foo'), user, 'create') + end + + it "adds thread key for wiki page events" do + expect(chat_integration.execute(wiki_page_sample_data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /wiki_page .*?/ })) + .once + end + end + + context 'with pipeline events' do + let(:pipeline) do + create(:ci_pipeline, :failed, project: project, sha: project.commit.sha, ref: project.default_branch) + end + + let(:pipeline_sample_data) { Gitlab::DataBuilder::Pipeline.build(pipeline) } + + it "adds thread key for pipeline events" do + expect(chat_integration.execute(pipeline_sample_data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /pipeline .*?/ })) + .once + end + end + end + + describe "Note events" do + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, :repository, creator: user) } + + before do + allow(chat_integration).to receive_messages( + project: project, + project_id: project.id, + webhook: webhook_url + ) + + WebMock.stub_request(:post, webhook_url_regex) + end + + context 'when commit comment event executed' do + let(:commit_note) do + create(:note_on_commit, author: user, + project: project, + commit_id: project.repository.commit.id, + note: 'a comment on a commit') + end + + it "adds thread key" do + data = Gitlab::DataBuilder::Note.build(commit_note, user) + + expect(chat_integration.execute(data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /commit .*?/ })) + .once + end + end + + context 'when merge request comment event executed' do + let(:merge_request_note) do + create(:note_on_merge_request, project: project, + note: "merge request note") + end + + it "adds thread key" do + data = Gitlab::DataBuilder::Note.build(merge_request_note, user) + + expect(chat_integration.execute(data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /merge request .*?/ })) + .once + end + end + + context 'when issue comment event executed' do + let(:issue_note) do + create(:note_on_issue, project: project, note: "issue note") + end + + it "adds thread key" do + data = Gitlab::DataBuilder::Note.build(issue_note, user) + + expect(chat_integration.execute(data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /issue .*?/ })) + .once + end + end + + context 'when snippet comment event executed' do + let(:snippet_note) do + create(:note_on_project_snippet, project: project, + note: "snippet note") + end + + it "adds thread key" do + data = Gitlab::DataBuilder::Note.build(snippet_note, user) + + expect(chat_integration.execute(data)).to be(true) + + expect(WebMock).to have_requested(:post, webhook_url) + .with(query: hash_including({ "threadKey" => /snippet .*?/ })) + .once + end + end + end end |