Commit d777e6f1 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'get-rid-of-water-from-notification_service_spec-to-make-it-DRY' into 'master'

Make notification_service spec DRYer by making some tests reusable

See merge request !7794
parents b9ff4656 e941e96f
---
title: Make notification_service spec DRYer by making test reusable
merge_request:
author: YarNayar
...@@ -33,6 +33,49 @@ describe NotificationService, services: true do ...@@ -33,6 +33,49 @@ describe NotificationService, services: true do
end end
end end
# Next shared examples are intended to test notifications of "participants"
#
# they take the following parameters:
# * issuable
# * notification trigger
# * participant
#
shared_examples 'participating by note notification' do
it 'emails the participant' do
create(:note_on_issue, noteable: issuable, project_id: project.id, note: 'anything', author: participant)
notification_trigger
should_email(participant)
end
end
shared_examples 'participating by assignee notification' do
it 'emails the participant' do
issuable.update_attribute(:assignee, participant)
notification_trigger
should_email(participant)
end
end
shared_examples 'participating by author notification' do
it 'emails the participant' do
issuable.author = participant
notification_trigger
should_email(participant)
end
end
shared_examples_for 'participating notifications' do
it_should_behave_like 'participating by note notification'
it_should_behave_like 'participating by author notification'
it_should_behave_like 'participating by assignee notification'
end
describe 'Keys' do describe 'Keys' do
describe '#new_key' do describe '#new_key' do
let!(:key) { create(:personal_key) } let!(:key) { create(:personal_key) }
...@@ -588,32 +631,10 @@ describe NotificationService, services: true do ...@@ -588,32 +631,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { issue }
issue.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.reassigned_issue(issue, @u_disabled) }
notification.reassigned_issue(issue, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: 'anything', author: @u_lazy_participant) }
before { notification.reassigned_issue(issue, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
issue.author = @u_lazy_participant
notification.reassigned_issue(issue, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
...@@ -720,32 +741,10 @@ describe NotificationService, services: true do ...@@ -720,32 +741,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { issue }
issue.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.close_issue(issue, @u_disabled) }
notification.close_issue(issue, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: 'anything', author: @u_lazy_participant) }
before { notification.close_issue(issue, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
issue.author = @u_lazy_participant
notification.close_issue(issue, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
...@@ -772,32 +771,10 @@ describe NotificationService, services: true do ...@@ -772,32 +771,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { issue }
issue.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.reopen_issue(issue, @u_disabled) }
notification.reopen_issue(issue, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: 'anything', author: @u_lazy_participant) }
before { notification.reopen_issue(issue, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
issue.author = @u_lazy_participant
notification.reopen_issue(issue, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
end end
...@@ -858,31 +835,28 @@ describe NotificationService, services: true do ...@@ -858,31 +835,28 @@ describe NotificationService, services: true do
end end
context 'participating' do context 'participating' do
context 'by assignee' do it_should_behave_like 'participating by assignee notification' do
before do let(:participant) { create(:user, username: 'user-participant')}
merge_request.update_attribute(:assignee, @u_lazy_participant) let(:issuable) { merge_request }
notification.new_merge_request(merge_request, @u_disabled) let(:notification_trigger) { notification.new_merge_request(merge_request, @u_disabled) }
end end
it { should_email(@u_lazy_participant) } it_should_behave_like 'participating by note notification' do
end let(:participant) { create(:user, username: 'user-participant')}
let(:issuable) { merge_request }
context 'by note' do let(:notification_trigger) { notification.new_merge_request(merge_request, @u_disabled) }
let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
before { notification.new_merge_request(merge_request, @u_disabled) }
it { should_email(@u_lazy_participant) }
end end
context 'by author' do context 'by author' do
let(:participant) { create(:user, username: 'user-participant')}
before do before do
merge_request.author = @u_lazy_participant merge_request.author = participant
merge_request.save merge_request.save
notification.new_merge_request(merge_request, @u_disabled) notification.new_merge_request(merge_request, @u_disabled)
end end
it { should_not_email(@u_lazy_participant) } it { should_not_email(participant) }
end end
end end
end end
...@@ -917,33 +891,10 @@ describe NotificationService, services: true do ...@@ -917,33 +891,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { merge_request }
merge_request.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.reassigned_merge_request(merge_request, @u_disabled) }
notification.reassigned_merge_request(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
before { notification.reassigned_merge_request(merge_request, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
merge_request.author = @u_lazy_participant
merge_request.save
notification.reassigned_merge_request(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
...@@ -1014,33 +965,10 @@ describe NotificationService, services: true do ...@@ -1014,33 +965,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { merge_request }
merge_request.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.close_mr(merge_request, @u_disabled) }
notification.close_mr(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
before { notification.close_mr(merge_request, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
merge_request.author = @u_lazy_participant
merge_request.save
notification.close_mr(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
...@@ -1081,33 +1009,10 @@ describe NotificationService, services: true do ...@@ -1081,33 +1009,10 @@ describe NotificationService, services: true do
should_not_email(@u_watcher) should_not_email(@u_watcher)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { merge_request }
merge_request.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.merge_mr(merge_request, @u_disabled) }
notification.merge_mr(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
before { notification.merge_mr(merge_request, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
merge_request.author = @u_lazy_participant
merge_request.save
notification.merge_mr(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
...@@ -1134,33 +1039,10 @@ describe NotificationService, services: true do ...@@ -1134,33 +1039,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { merge_request }
merge_request.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.reopen_mr(merge_request, @u_disabled) }
notification.reopen_mr(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
before { notification.reopen_mr(merge_request, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
merge_request.author = @u_lazy_participant
merge_request.save
notification.reopen_mr(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
...@@ -1180,33 +1062,10 @@ describe NotificationService, services: true do ...@@ -1180,33 +1062,10 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
context 'participating' do it_behaves_like 'participating notifications' do
context 'by assignee' do let(:participant) { create(:user, username: 'user-participant') }
before do let(:issuable) { merge_request }
merge_request.update_attribute(:assignee, @u_lazy_participant) let(:notification_trigger) { notification.resolve_all_discussions(merge_request, @u_disabled) }
notification.resolve_all_discussions(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
context 'by note' do
let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
before { notification.resolve_all_discussions(merge_request, @u_disabled) }
it { should_email(@u_lazy_participant) }
end
context 'by author' do
before do
merge_request.author = @u_lazy_participant
merge_request.save
notification.resolve_all_discussions(merge_request, @u_disabled)
end
it { should_email(@u_lazy_participant) }
end
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment