fix multiple notifications from being sent for multiple labels
This also refactor the email_helper support spec to watch for multiple emails being sent.
This commit is contained in:
parent
f9df0e13e3
commit
e5ed2e4f4e
3 changed files with 20 additions and 8 deletions
|
@ -397,7 +397,7 @@ class NotificationService
|
||||||
end
|
end
|
||||||
|
|
||||||
def relabeled_resource_email(target, labels, current_user, method)
|
def relabeled_resource_email(target, labels, current_user, method)
|
||||||
recipients = labels.flat_map { |l| l.subscribers(target.project) }
|
recipients = labels.flat_map { |l| l.subscribers(target.project) }.uniq
|
||||||
recipients = notifiable_users(
|
recipients = notifiable_users(
|
||||||
recipients, :subscription,
|
recipients, :subscription,
|
||||||
target: target,
|
target: target,
|
||||||
|
|
|
@ -743,6 +743,18 @@ describe NotificationService, :mailer do
|
||||||
should_not_email(@u_participating)
|
should_not_email(@u_participating)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "doesn't send multiple email when a user is subscribed to multiple given labels" do
|
||||||
|
subscriber_to_both = create(:user) do |user|
|
||||||
|
[label_1, label_2].each { |label| label.toggle_subscription(user, project) }
|
||||||
|
end
|
||||||
|
|
||||||
|
notification.relabeled_issue(issue, [label_1, label_2], @u_disabled)
|
||||||
|
|
||||||
|
should_email(subscriber_to_label_1)
|
||||||
|
should_email(subscriber_to_label_2)
|
||||||
|
should_email(subscriber_to_both)
|
||||||
|
end
|
||||||
|
|
||||||
context 'confidential issues' do
|
context 'confidential issues' do
|
||||||
let(:author) { create(:user) }
|
let(:author) { create(:user) }
|
||||||
let(:assignee) { create(:user) }
|
let(:assignee) { create(:user) }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module EmailHelpers
|
module EmailHelpers
|
||||||
def sent_to_user?(user, recipients = email_recipients)
|
def sent_to_user(user, recipients: email_recipients)
|
||||||
recipients.include?(user.notification_email)
|
recipients.count { |to| to == user.notification_email }
|
||||||
end
|
end
|
||||||
|
|
||||||
def reset_delivered_emails!
|
def reset_delivered_emails!
|
||||||
|
@ -10,17 +10,17 @@ module EmailHelpers
|
||||||
def should_only_email(*users, kind: :to)
|
def should_only_email(*users, kind: :to)
|
||||||
recipients = email_recipients(kind: kind)
|
recipients = email_recipients(kind: kind)
|
||||||
|
|
||||||
users.each { |user| should_email(user, recipients) }
|
users.each { |user| should_email(user, recipients: recipients) }
|
||||||
|
|
||||||
expect(recipients.count).to eq(users.count)
|
expect(recipients.count).to eq(users.count)
|
||||||
end
|
end
|
||||||
|
|
||||||
def should_email(user, recipients = email_recipients)
|
def should_email(user, times: 1, recipients: email_recipients)
|
||||||
expect(sent_to_user?(user, recipients)).to be_truthy
|
expect(sent_to_user(user, recipients: recipients)).to eq(times)
|
||||||
end
|
end
|
||||||
|
|
||||||
def should_not_email(user, recipients = email_recipients)
|
def should_not_email(user, recipients: email_recipients)
|
||||||
expect(sent_to_user?(user, recipients)).to be_falsey
|
should_email(user, times: 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
def should_not_email_anyone
|
def should_not_email_anyone
|
||||||
|
|
Loading…
Reference in a new issue