From 4716800144d4088d1d07c26300c70b5c54de06b0 Mon Sep 17 00:00:00 2001 From: Nenad Vujicic Date: Thu, 22 Aug 2024 23:37:39 +0200 Subject: [PATCH] Allowed sending follow-ups for sent messages 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 | 10 ++++++++++ app/views/messages/show.html.erb | 2 +- test/controllers/messages_controller_test.rb | 21 ++++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 658c43483..7d86796b1 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -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 diff --git a/app/views/messages/show.html.erb b/app/views/messages/show.html.erb index 8fe508469..99d6d0435 100644 --- a/app/views/messages/show.html.erb +++ b/app/views/messages/show.html.erb @@ -18,8 +18,8 @@
<%= @message.body.to_html %>
+ <%= 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 %> diff --git a/test/controllers/messages_controller_test.rb b/test/controllers/messages_controller_test.rb index b39aed77b..52a856beb 100644 --- a/test/controllers/messages_controller_test.rb +++ b/test/controllers/messages_controller_test.rb @@ -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 -- 2.39.5