]> git.openstreetmap.org Git - rails.git/commitdiff
Allowed sending follow-ups for sent messages
authorNenad Vujicic <nenadus@gmail.com>
Thu, 22 Aug 2024 21:37:39 +0000 (23:37 +0200)
committerNenad Vujicic <nenadus@gmail.com>
Wed, 28 Aug 2024 13:11:09 +0000 (15:11 +0200)
Fixes #3497. Adds Reply button when displaying sent messages (app/views/messages/show.html.erb) and allows replying to messages for which sender is current user (app/controllers/messages_controller.rb). Improved tests for testing added functionality.

app/controllers/messages_controller.rb
app/views/messages/show.html.erb
test/controllers/messages_controller_test.rb

index 658c43483b2b872d80b1393a2bfb54b7c205cdb7..7d86796b1ff18f0a62303851cf2457238817e987 100644 (file)
@@ -88,6 +88,16 @@ class MessagesController < ApplicationController
 
       @title = @message.title
 
+      render :action => "new"
+    elsif message.sender == current_user
+      @message = Message.new(
+        :recipient => message.recipient,
+        :title => "Re: #{message.title.sub(/^Re:\s*/, '')}",
+        :body => "On #{message.sent_on} #{message.sender.display_name} wrote:\n\n#{message.body.gsub(/^/, '> ')}"
+      )
+
+      @title = @message.title
+
       render :action => "new"
     else
       flash[:notice] = t ".wrong_user", :user => current_user.display_name
index 8fe5084692072d1a9e57e5c1bfc93c5b27b14f3c..99d6d0435512d0f8e33ef8ccc3112dec762ad20f 100644 (file)
@@ -18,8 +18,8 @@
 <div class="richtext text-break"><%= @message.body.to_html %></div>
 
 <div>
+  <%= link_to t(".reply_button"), message_reply_path(@message), :class => "btn btn-primary" %>
   <% if current_user == @message.recipient %>
-    <%= link_to t(".reply_button"), message_reply_path(@message), :class => "btn btn-primary" %>
     <%= link_to t(".unread_button"), message_mark_path(@message, :mark => "unread"), :method => "post", :class => "btn btn-primary" %>
     <%= link_to t(".destroy_button"), message_path(@message), :method => "delete", :class => "btn btn-danger" %>
   <% else %>
index b39aed77b21d497c04b4d378c2265aafd3d7a8ba..52a856bebb4cc5df583cce5bf911807e7f1ff7bf 100644 (file)
@@ -263,6 +263,21 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     end
     assert Message.find(message.id).message_read
 
+    # Login as the sending user
+    session_for(user)
+
+    # Check that the message reply page loads
+    get message_reply_path(message)
+    assert_response :success
+    assert_template "new"
+    assert_select "title", "Re: #{message.title} | OpenStreetMap"
+    assert_select "form[action='/messages']", :count => 1 do
+      assert_select "input[type='hidden'][name='display_name'][value='#{recipient_user.display_name}']"
+      assert_select "input#message_title[value='Re: #{message.title}']", :count => 1
+      assert_select "textarea#message_body", :count => 1
+      assert_select "input[type='submit'][value='Send']", :count => 1
+    end
+
     # Asking to reply to a message with a bogus ID should fail
     get message_reply_path(99999)
     assert_response :not_found
@@ -292,21 +307,23 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     # Login as the message sender
     session_for(user)
 
-    # Check that the message sender can read the message
+    # Check that the message sender can read the message and that Reply button is available
     get message_path(message)
     assert_response :success
     assert_template "show"
     assert_select "a[href='#{user_path recipient_user}']", :text => recipient_user.display_name
+    assert_select "a.btn.btn-primary", :text => "Reply"
     assert_not Message.find(message.id).message_read
 
     # Login as the message recipient
     session_for(recipient_user)
 
-    # Check that the message recipient can read the message
+    # Check that the message recipient can read the message and that Reply button is available
     get message_path(message)
     assert_response :success
     assert_template "show"
     assert_select "a[href='#{user_path user}']", :text => user.display_name
+    assert_select "a.btn.btn-primary", :text => "Reply"
     assert Message.find(message.id).message_read
 
     # Asking to read a message with a bogus ID should fail