From 97235a43658246182e80e92b9ac71d5806a003f9 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Sun, 12 Jan 2025 15:30:27 +0530 Subject: [PATCH] fix: Exclude notifications for blocked contacts, except mentions (#10659) - Prevents notifications from being created for conversations or actions involving blocked contacts. - The exception is the conversation_mention notification type, which will still be created when applicable. --- app/builders/notification_builder.rb | 2 ++ spec/builders/notification_builder_spec.rb | 28 +++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/builders/notification_builder.rb b/app/builders/notification_builder.rb index 3d8ce9674..d5461eb4e 100644 --- a/app/builders/notification_builder.rb +++ b/app/builders/notification_builder.rb @@ -25,6 +25,8 @@ class NotificationBuilder def build_notification # Create conversation_creation notification only if user is subscribed to it return if notification_type == 'conversation_creation' && !user_subscribed_to_notification? + # skip notifications for blocked conversations except for user mentions + return if primary_actor.contact.blocked? && notification_type != 'conversation_mention' user.notifications.create!( notification_type: notification_type, diff --git a/spec/builders/notification_builder_spec.rb b/spec/builders/notification_builder_spec.rb index e86e01d17..1b28f6adf 100644 --- a/spec/builders/notification_builder_spec.rb +++ b/spec/builders/notification_builder_spec.rb @@ -56,7 +56,7 @@ describe NotificationBuilder do ).to be_nil end - it 'will create a conversation_mention notification eventhough user is not subscribed to it' do + it 'will create a conversation_mention notification even though user is not subscribed to it' do notification_setting = user.notification_settings.find_by(account_id: account.id) notification_setting.selected_email_flags = [] notification_setting.selected_push_flags = [] @@ -71,5 +71,31 @@ describe NotificationBuilder do ).perform end.to change { user.notifications.count }.by(1) end + + it 'will not create a notification if conversation contact is blocked and notification type is not conversation_mention' do + primary_actor.contact.update(blocked: true) + + expect do + described_class.new( + notification_type: 'conversation_creation', + user: user, + account: account, + primary_actor: primary_actor + ).perform + end.not_to(change { user.notifications.count }) + end + + it 'will create a notification if conversation contact is blocked and notification type is conversation_mention' do + primary_actor.contact.update(blocked: true) + + expect do + described_class.new( + notification_type: 'conversation_mention', + user: user, + account: account, + primary_actor: primary_actor + ).perform + end.to change { user.notifications.count }.by(1) + end end end