From c89b2ad8096df63d2b3d4a49fde73d258221588b Mon Sep 17 00:00:00 2001 From: Benjamin Neff <benjamin@coding4coffee.ch> Date: Wed, 21 Feb 2018 03:03:52 +0100 Subject: [PATCH] Prevent duplicate mention notifications when the post is received twice closes #7721 --- Changelog.md | 1 + app/models/notifications/mentioned.rb | 5 ++++- spec/models/notifications/mentioned_spec.rb | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 40a66b6630..9c9c0daf5d 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 d49b384d76..732cbb41e9 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 90e112aa33..ca77f960fb 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 -- GitLab