diff --git a/Changelog.md b/Changelog.md index 40a66b663..9c9c0daf5 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,7 @@ * Make script/server work on readonly filesystems [#7719](https://github.com/diaspora/diaspora/pull/7719) ## Bug fixes +* Prevent duplicate mention notifications when the post is received twice [#7721](https://github.com/diaspora/diaspora/pull/7721) ## Features * Add basic html5 audio/video embedding support [#6418](https://github.com/diaspora/diaspora/pull/6418) diff --git a/app/models/notifications/mentioned.rb b/app/models/notifications/mentioned.rb index d49b384d7..732cbb41e 100644 --- a/app/models/notifications/mentioned.rb +++ b/app/models/notifications/mentioned.rb @@ -18,7 +18,10 @@ module Notifications ) relevant_mentions.each do |mention| - create_notification(mention.person.owner, mention, actor).try(:email_the_user, mention, actor) + recipient = mention.person.owner + unless exists?(recipient: recipient, target: mention) + create_notification(recipient, mention, actor).try(:email_the_user, mention, actor) + end end end end diff --git a/spec/models/notifications/mentioned_spec.rb b/spec/models/notifications/mentioned_spec.rb index 90e112aa3..ca77f960f 100644 --- a/spec/models/notifications/mentioned_spec.rb +++ b/spec/models/notifications/mentioned_spec.rb @@ -51,5 +51,17 @@ describe Notifications::Mentioned do expect(TestNotification).not_to receive(:create_notification) TestNotification.notify(status_message, nil) end + + it "doesn't create notification if it already exists" do + status_message = FactoryGirl.create(:status_message, text: text_mentioning(alice), author: eve.person) + TestNotification.create( + recipient: alice, + target: Mention.where(mentions_container: status_message, person: alice.person_id).first, + actors: [status_message.author] + ) + + expect(TestNotification).not_to receive(:create_notification) + TestNotification.notify(status_message, nil) + end end end