summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKukovskii Vladimir <ura@dgtakano.co.jp>2018-07-03 22:26:50 +0900
committerKukovskii Vladimir <ura@dgtakano.co.jp>2018-07-14 20:45:53 +0900
commit6cfb0a9e9463d54f7ad74d5ee79af36ba08be186 (patch)
treeff251d08b3e7de2e12a8f4f1f68b4d632d1c54f5
parent5b3a9d6bc20b2526483964187454b8c998b20360 (diff)
downloadgitlab-ce-6cfb0a9e9463d54f7ad74d5ee79af36ba08be186.tar.gz
Rework spec for Hangouts Chat service
-rw-r--r--spec/models/project_services/hangouts_chat_service_spec.rb279
1 files changed, 107 insertions, 172 deletions
diff --git a/spec/models/project_services/hangouts_chat_service_spec.rb b/spec/models/project_services/hangouts_chat_service_spec.rb
index 73472700548..7b19edb1e51 100644
--- a/spec/models/project_services/hangouts_chat_service_spec.rb
+++ b/spec/models/project_services/hangouts_chat_service_spec.rb
@@ -43,37 +43,64 @@ describe HangoutsChatService do
WebMock.stub_request(:post, webhook_url)
end
+ shared_examples 'Hangouts Chat service' do
+ it 'calls Hangouts Chat API' do
+ chat_service.execute(sample_data)
+
+ expect(WebMock).to have_requested(:post, webhook_url).once
+ end
+ end
+
context 'with push events' do
- let(:push_sample_data) do
+ let(:sample_data) do
Gitlab::DataBuilder::Push.build_sample(project, user)
end
- it 'calls Hangouts Chat API for push events' do
- chat_service.execute(push_sample_data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
+ it_behaves_like 'Hangouts Chat service'
it 'specifies the webhook when it is configured' do
expect(HangoutsChat::Sender).to receive(:new).with(webhook_url).and_return(double(:hangouts_chat_service).as_null_object)
- chat_service.execute(push_sample_data)
+ chat_service.execute(sample_data)
+ end
+
+ context 'with not default branch' do
+ let(:sample_data) do
+ ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}test"
+ Gitlab::DataBuilder::Push.build(project, user, nil, nil, ref, [])
+ end
+
+ context 'when notify_only_default_branch enabled' do
+ before do
+ chat_service.notify_only_default_branch = true
+ end
+
+ it 'does not call the Hangouts Chat API' do
+ result = chat_service.execute(sample_data)
+
+ expect(result).to be_falsy
+ end
+ end
+
+ context 'when notify_only_default_branch disabled' do
+ before do
+ chat_service.notify_only_default_branch = false
+ end
+
+ it_behaves_like 'Hangouts Chat service'
+ end
end
end
context 'with issue events' do
let(:opts) { { title: 'Awesome issue', description: 'please fix' } }
- let(:issues_sample_data) do
+ let(:sample_data) do
service = Issues::CreateService.new(project, user, opts)
issue = service.execute
service.hook_data(issue, 'open')
end
- it 'calls Hangouts Chat API' do
- chat_service.execute(issues_sample_data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
+ it_behaves_like 'Hangouts Chat service'
end
context 'with merge events' do
@@ -86,7 +113,7 @@ describe HangoutsChatService do
}
end
- let(:merge_sample_data) do
+ let(:sample_data) do
service = MergeRequests::CreateService.new(project, user, opts)
merge_request = service.execute
service.hook_data(merge_request, 'open')
@@ -96,11 +123,7 @@ describe HangoutsChatService do
project.add_developer(user)
end
- it 'calls Hangouts Chat API' do
- chat_service.execute(merge_sample_data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
+ it_behaves_like 'Hangouts Chat service'
end
context 'with wiki page events' do
@@ -113,199 +136,111 @@ describe HangoutsChatService do
}
end
let(:wiki_page) { create(:wiki_page, wiki: project.wiki, attrs: opts) }
- let(:wiki_page_sample_data) { Gitlab::DataBuilder::WikiPage.build(wiki_page, user, 'create') }
-
- it 'calls Hangouts Chat API' do
- chat_service.execute(wiki_page_sample_data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
- end
- end
-
- describe 'Note events' do
- let(:user) { create(:user) }
- let(:project) { create(:project, :repository, creator: user) }
-
- before do
- allow(chat_service).to receive_messages(
- project: project,
- project_id: project.id,
- service_hook: true,
- webhook: webhook_url
- )
+ let(:sample_data) { Gitlab::DataBuilder::WikiPage.build(wiki_page, user, 'create') }
- WebMock.stub_request(:post, webhook_url)
+ it_behaves_like 'Hangouts Chat service'
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 'calls Hangouts Chat API for commit comment events' do
- data = Gitlab::DataBuilder::Note.build(commit_note, user)
+ context 'with note events' do
+ let(:sample_data) { Gitlab::DataBuilder::Note.build(note, user) }
- chat_service.execute(data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
- end
+ context 'with commit comment' do
+ let(:note) do
+ create(:note_on_commit, author: user,
+ project: project,
+ commit_id: project.repository.commit.id,
+ note: 'a comment on a commit')
+ 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')
+ it_behaves_like 'Hangouts Chat service'
end
- it 'calls Hangouts Chat API for merge request comment events' do
- data = Gitlab::DataBuilder::Note.build(merge_request_note, user)
-
- chat_service.execute(data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
- end
+ context 'with merge request comment' do
+ let(:note) do
+ create(:note_on_merge_request, project: project,
+ note: 'merge request note')
+ end
- context 'when issue comment event executed' do
- let(:issue_note) do
- create(:note_on_issue, project: project, note: 'issue note')
+ it_behaves_like 'Hangouts Chat service'
end
- it 'calls Hangouts Chat API for issue comment events' do
- data = Gitlab::DataBuilder::Note.build(issue_note, user)
-
- chat_service.execute(data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
- end
- end
+ context 'with issue comment' do
+ let(:note) do
+ create(:note_on_issue, project: project, note: 'issue note')
+ end
- context 'when snippet comment event executed' do
- let(:snippet_note) do
- create(:note_on_project_snippet, project: project,
- note: 'snippet note')
+ it_behaves_like 'Hangouts Chat service'
end
- it 'calls Hangouts Chat API for snippet comment events' do
- data = Gitlab::DataBuilder::Note.build(snippet_note, user)
-
- chat_service.execute(data)
+ context 'wiht snippet comment' do
+ let(:note) do
+ create(:note_on_project_snippet, project: project,
+ note: 'snippet note')
+ end
- expect(WebMock).to have_requested(:post, webhook_url).once
+ it_behaves_like 'Hangouts Chat service'
end
end
- end
-
- describe 'Pipeline events' do
- let(:user) { create(:user) }
- let(:project) { create(:project, :repository) }
-
- let(:pipeline) do
- create(:ci_pipeline,
- project: project, status: status,
- sha: project.commit.sha, ref: project.default_branch)
- end
-
- before do
- allow(chat_service).to receive_messages(
- project: project,
- service_hook: true,
- webhook: webhook_url
- )
- end
- shared_examples 'call Hangouts Chat API' do
- before do
- WebMock.stub_request(:post, webhook_url)
+ context 'with pipeline events' do
+ let(:pipeline) do
+ create(:ci_pipeline,
+ project: project, status: status,
+ sha: project.commit.sha, ref: project.default_branch)
end
+ let(:sample_data) { Gitlab::DataBuilder::Pipeline.build(pipeline) }
- it 'calls Hangouts Chat API for pipeline events' do
- data = Gitlab::DataBuilder::Pipeline.build(pipeline)
+ context 'with failed pipeline' do
+ let(:status) { 'failed' }
- chat_service.execute(data)
-
- expect(WebMock).to have_requested(:post, webhook_url).once
+ it_behaves_like 'Hangouts Chat service'
end
- end
-
- context 'with failed pipeline' do
- let(:status) { 'failed' }
- it_behaves_like 'call Hangouts Chat API'
- end
+ context 'with succeeded pipeline' do
+ let(:status) { 'success' }
- context 'with succeeded pipeline' do
- let(:status) { 'success' }
+ context 'with default notify_only_broken_pipelines' do
+ it 'does not call Hangouts Chat API' do
+ result = chat_service.execute(sample_data)
- context 'with default to notify_only_broken_pipelines' do
- it 'does not call Hangouts Chat API for pipeline events' do
- data = Gitlab::DataBuilder::Pipeline.build(pipeline)
- result = chat_service.execute(data)
-
- expect(result).to be_falsy
+ expect(result).to be_falsy
+ end
end
- end
- context 'with setting notify_only_broken_pipelines to false' do
- before do
- chat_service.notify_only_broken_pipelines = false
- end
+ context 'when notify_only_broken_pipelines is false' do
+ before do
+ chat_service.notify_only_broken_pipelines = false
+ end
- it_behaves_like 'call Hangouts Chat API'
+ it_behaves_like 'Hangouts Chat service'
+ end
end
- end
- context 'only notify for the default branch' do
- context 'when enabled' do
+ context 'with not default branch' do
let(:pipeline) do
create(:ci_pipeline, project: project, status: 'failed', ref: 'not-the-default-branch')
end
- before do
- chat_service.notify_only_default_branch = true
- WebMock.stub_request(:post, webhook_url)
- end
-
- it 'does not call the Hangouts Chat API for pipeline events' do
- data = Gitlab::DataBuilder::Pipeline.build(pipeline)
- result = chat_service.execute(data)
-
- expect(result).to be_falsy
- end
+ context 'when notify_only_default_branch enabled' do
+ before do
+ chat_service.notify_only_default_branch = true
+ end
- it 'does not notify push events if they are not for the default branch' do
- ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}test"
- push_sample_data = Gitlab::DataBuilder::Push.build(project, user, nil, nil, ref, [])
+ it 'does not call the Hangouts Chat API' do
+ result = chat_service.execute(sample_data)
- chat_service.execute(push_sample_data)
-
- expect(WebMock).not_to have_requested(:post, webhook_url)
+ expect(result).to be_falsy
+ end
end
- it 'notifies about push events for the default branch' do
- push_sample_data = Gitlab::DataBuilder::Push.build_sample(project, user)
-
- chat_service.execute(push_sample_data)
+ context 'when notify_only_default_branch disabled' do
+ before do
+ chat_service.notify_only_default_branch = false
+ end
- expect(WebMock).to have_requested(:post, webhook_url).once
+ it_behaves_like 'Hangouts Chat service'
end
end
-
- context 'when disabled' do
- let(:pipeline) do
- create(:ci_pipeline, :failed, project: project, ref: 'not-the-default-branch')
- end
-
- before do
- chat_service.notify_only_default_branch = false
- end
-
- it_behaves_like 'call Hangouts Chat API'
- end
end
end
end