]> git.openstreetmap.org Git - rails.git/commitdiff
Fix marking muted messages as read/unread
authorAnton Khorev <tony29@yandex.ru>
Thu, 18 Jul 2024 15:48:14 +0000 (18:48 +0300)
committerAnton Khorev <tony29@yandex.ru>
Thu, 18 Jul 2024 15:48:14 +0000 (18:48 +0300)
app/controllers/messages_controller.rb
test/controllers/messages_controller_test.rb

index e4d6c70d9afb5809ef87fbf0d92588bfc465fc53..658c43483b2b872d80b1393a2bfb54b7c205cdb7 100644 (file)
@@ -117,7 +117,7 @@ class MessagesController < ApplicationController
 
   # Set the message as being read or unread.
   def mark
-    @message = current_user.messages.find(params[:message_id])
+    @message = current_user.messages.unscope(:where => :muted).find(params[:message_id])
     if params[:mark] == "unread"
       message_read = false
       notice = t ".as_unread"
@@ -128,7 +128,11 @@ class MessagesController < ApplicationController
     @message.message_read = message_read
     if @message.save
       flash[:notice] = notice
-      redirect_to inbox_messages_path, :status => :see_other
+      if @message.muted?
+        redirect_to muted_messages_path, :status => :see_other
+      else
+        redirect_to inbox_messages_path, :status => :see_other
+      end
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
index 3f19b5819b9f9e10ceb02b0d541830c0da20eec6..b39aed77b21d497c04b4d378c2265aafd3d7a8ba 100644 (file)
@@ -423,6 +423,27 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_template "no_such_message"
   end
 
+  ##
+  # test the mark action for messages from muted users
+  def test_mark_muted
+    sender_user = create(:user)
+    recipient_user = create(:user)
+    create(:user_mute, :owner => recipient_user, :subject => sender_user)
+    message = create(:message, :unread, :sender => sender_user, :recipient => recipient_user)
+
+    session_for(recipient_user)
+
+    # Check that the marking a message read works
+    post message_mark_path(message, :mark => "read")
+    assert_redirected_to muted_messages_path
+    assert Message.find(message.id).message_read
+
+    # Check that the marking a message unread works
+    post message_mark_path(message, :mark => "unread")
+    assert_redirected_to muted_messages_path
+    assert_not Message.find(message.id).message_read
+  end
+
   ##
   # test the destroy action
   def test_destroy