From 14741b5dacb4774893908aed713503cdf1b94960 Mon Sep 17 00:00:00 2001
From: Sam <sam.saffron@gmail.com>
Date: Tue, 31 Mar 2015 10:16:11 +1100
Subject: [PATCH] FIX: only ONE user on site could have a list of muted users

---
 app/services/user_updater.rb       | 10 +++++-----
 spec/services/user_updater_spec.rb | 25 +++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/app/services/user_updater.rb b/app/services/user_updater.rb
index 9dc5ee794..c8741f867 100644
--- a/app/services/user_updater.rb
+++ b/app/services/user_updater.rb
@@ -75,17 +75,13 @@ class UserUpdater
     end
   end
 
-  private
-
-  attr_reader :user, :guardian
-
   def update_muted_users(usernames)
     usernames ||= ""
     desired_ids = User.where(username: usernames.split(",")).pluck(:id)
     if desired_ids.empty?
       MutedUser.where(user_id: user.id).destroy_all
     else
-      MutedUser.where('id not in (?)', desired_ids).destroy_all
+      MutedUser.where('user_id = ? AND muted_user_id not in (?)', user.id, desired_ids).destroy_all
 
       # SQL is easier here than figuring out how to do the same in AR
       MutedUser.exec_sql("INSERT into muted_users(user_id, muted_user_id, created_at, updated_at)
@@ -102,6 +98,10 @@ class UserUpdater
     end
   end
 
+  private
+
+  attr_reader :user, :guardian
+
   def format_url(website)
     if website =~ /^http/
       website
diff --git a/spec/services/user_updater_spec.rb b/spec/services/user_updater_spec.rb
index 3ba8f25c3..e937fd1fa 100644
--- a/spec/services/user_updater_spec.rb
+++ b/spec/services/user_updater_spec.rb
@@ -4,6 +4,31 @@ describe UserUpdater do
 
   let(:acting_user) { Fabricate.build(:user) }
 
+  describe '#update_muted_users' do
+    it 'has no cross talk' do
+      u1 = Fabricate(:user)
+      u2 = Fabricate(:user)
+      u3 = Fabricate(:user)
+
+
+      updater = UserUpdater.new(u1, u1)
+      updater.update_muted_users("#{u2.username},#{u3.username}")
+
+      updater = UserUpdater.new(u2, u2)
+      updater.update_muted_users("#{u3.username},#{u1.username}")
+
+
+      updater = UserUpdater.new(u3, u3)
+      updater.update_muted_users("")
+
+
+      expect(MutedUser.where(user_id: u2.id).count).to eq 2
+      expect(MutedUser.where(user_id: u1.id).count).to eq 2
+      expect(MutedUser.where(user_id: u3.id).count).to eq 0
+
+    end
+  end
+
   describe '#update' do
     it 'saves user' do
       user = Fabricate(:user, name: 'Billy Bob')