FIX: Allow liked notifications consolidation to be disabled.

FIX: Allow liked notifications consolidation to be disabled.

diff --git a/app/services/post_action_notifier.rb b/app/services/post_action_notifier.rb
index 698af27..c392d9f 100644
--- a/app/services/post_action_notifier.rb
+++ b/app/services/post_action_notifier.rb
@@ -76,6 +76,10 @@ class PostActionNotifier
     post = post_action.post
     return if post_action.user.blank?
 
+    if SiteSetting.likes_notification_consolidation_threshold.zero?
+      return create_liked_notification(alerter, post, post_action)
+    end
+
     user_notifications = post.user.notifications
 
     consolidation_window =
@@ -114,27 +118,30 @@ class PostActionNotifier
         post_action
       )
     else
-      alerter.create_notification(
-        post.user,
-        Notification.types[:liked],
-        post,
-        display_username: post_action.user.username,
-        post_action_id: post_action.id,
-        user_id: post_action.user_id
-      )
+      create_liked_notification(alerter, post, post_action)
     end
   end
 
+  def self.create_liked_notification(alerter, post, post_action)
+    alerter.create_notification(
+      post.user,
+      Notification.types[:liked],
+      post,
+      display_username: post_action.user.username,
+      post_action_id: post_action.id,
+      user_id: post_action.user_id
+    )
+  end
+  private_class_method :create_liked_notification
+
   def self.update_consolidated_liked_notification_count!(notification)
-    Notification.transaction do
-      data = JSON.parse(notification.data)
-      data["count"] += 1
+    data = JSON.parse(notification.data)
+    data["count"] += 1
 
-      notification.update!(
-        data: data.to_json,
-        read: false
-      )
-    end
+    notification.update!(
+      data: data.to_json,
+      read: false
+    )
   end
   private_class_method :update_consolidated_liked_notification_count!
 
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 8939c16..a43051d 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -1789,7 +1789,7 @@ en:
 
     disable_edit_notifications: "Disables edit notifications by the system user when 'download_remote_images_to_local' is active."
 
-    likes_notification_consolidation_threshold: "Number of liked notifications received before the notifications are consolidated into a single one. The window can be configured via `SiteSetting.likes_notification_consolidation_window_mins`."
+    likes_notification_consolidation_threshold: "Number of liked notifications received before the notifications are consolidated into a single one. Set to 0 to disable. The window can be configured via `SiteSetting.likes_notification_consolidation_window_mins`."
 
     likes_notification_consolidation_window_mins: "Duration in minutes where liked notifications are consolidated into a single notification once the threshold has been reaced. The threshold can be configured via `SiteSetting.likes_notification_consolidation_threshold`."
 
diff --git a/config/site_settings.yml b/config/site_settings.yml
index d788ca9..2f2ce61 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -1702,7 +1702,7 @@ uncategorized:
 
   likes_notification_consolidation_threshold:
     default: 5
-    min: 3
+    min: 0
 
   likes_notification_consolidation_window_mins:
     default: 120
@@ -1819,7 +1819,7 @@ user_preferences:
   default_categories_watching_first_post:
     type: category_list
     default: ''
-  
+
   default_text_size:
     type: enum
     default: normal
diff --git a/spec/models/post_action_spec.rb b/spec/models/post_action_spec.rb
index de18c46..5100f97 100644
--- a/spec/models/post_action_spec.rb
+++ b/spec/models/post_action_spec.rb
@@ -300,15 +300,35 @@ describe PostAction do
       let(:liker) { Fabricate(:user) }
       let(:likee) { Fabricate(:user) }
 
-      before do
-        SiteSetting.likes_notification_consolidation_threshold = 3
+      it "can be disabled" do
+        SiteSetting.likes_notification_consolidation_threshold = 0
+
+        expect do
+          PostAction.act(
+            liker,
+            Fabricate(:post, user: likee),
+            PostActionType.types[:like]
+          )
+        end.to change { likee.reload.notifications.count }.by(1)
+
+        SiteSetting.likes_notification_consolidation_threshold = 1
+
+        expect do
+          PostAction.act(
+            liker,
+            Fabricate(:post, user: likee),
+            PostActionType.types[:like]
+          )
+        end.to_not change { likee.reload.notifications.count }
       end
 
       it 'should consolidate likes notification when the threshold is reached' do
+        SiteSetting.likes_notification_consolidation_threshold = 2
+
         freeze_time
 
         expect do
-          4.times do
+          3.times do
             PostAction.act(
               liker,
               Fabricate(:post, user: likee),
@@ -327,7 +347,7 @@ describe PostAction do
 
         expect(data["username"]).to eq(liker.username)
         expect(data["display_username"]).to eq(liker.username)
-        expect(data["count"]).to eq(4)
+        expect(data["count"]).to eq(3)
 
         notification.update!(read: true)
 
@@ -344,7 +364,7 @@ describe PostAction do
         data = JSON.parse(notification.reload.data)
 
         expect(notification.read).to eq(false)
-        expect(data["count"]).to eq(6)
+        expect(data["count"]).to eq(5)
 
         # Like from a different user shouldn't be consolidated
         expect do

GitHub sha: e7b49c42

1 Like