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