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
|
||||
|
||||
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, :subscription,
|
||||
target: target,
|
||||
|
|
|
@ -743,6 +743,18 @@ describe NotificationService, :mailer do
|
|||
should_not_email(@u_participating)
|
||||
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
|
||||
let(:author) { create(:user) }
|
||||
let(:assignee) { create(:user) }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
module EmailHelpers
|
||||
def sent_to_user?(user, recipients = email_recipients)
|
||||
recipients.include?(user.notification_email)
|
||||
def sent_to_user(user, recipients: email_recipients)
|
||||
recipients.count { |to| to == user.notification_email }
|
||||
end
|
||||
|
||||
def reset_delivered_emails!
|
||||
|
@ -10,17 +10,17 @@ module EmailHelpers
|
|||
def should_only_email(*users, kind: :to)
|
||||
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)
|
||||
end
|
||||
|
||||
def should_email(user, recipients = email_recipients)
|
||||
expect(sent_to_user?(user, recipients)).to be_truthy
|
||||
def should_email(user, times: 1, recipients: email_recipients)
|
||||
expect(sent_to_user(user, recipients: recipients)).to eq(times)
|
||||
end
|
||||
|
||||
def should_not_email(user, recipients = email_recipients)
|
||||
expect(sent_to_user?(user, recipients)).to be_falsey
|
||||
def should_not_email(user, recipients: email_recipients)
|
||||
should_email(user, times: 0)
|
||||
end
|
||||
|
||||
def should_not_email_anyone
|
||||
|
|
Loading…
Reference in a new issue