From 88ff81b694a238fa6b4a75612c45e75eb5241e89 Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Wed, 6 Jun 2018 11:51:52 +0800 Subject: [PATCH] Refactor messages show action to be resourceful --- app/controllers/messages_controller.rb | 2 +- config/routes.rb | 4 ++-- test/controllers/messages_controller_test.rb | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 0d5f0fc69..651a67036 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -63,7 +63,7 @@ class MessagesController < ApplicationController # Show a message def show @title = t ".title" - @message = Message.find(params[:message_id]) + @message = Message.find(params[:id]) if @message.recipient == current_user || @message.sender == current_user @message.message_read = true if @message.recipient == current_user diff --git a/config/routes.rb b/config/routes.rb index 52abfb77a..c57668920 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -261,7 +261,7 @@ OpenStreetMap::Application.routes.draw do get "/export/embed" => "export#embed" # messages - resources :messages, :only => [] do + resources :messages, :only => [:show] do collection do get :inbox get :outbox @@ -270,7 +270,7 @@ OpenStreetMap::Application.routes.draw do get "/user/:display_name/inbox", :to => redirect(:path => "/messages/inbox") get "/user/:display_name/outbox", :to => redirect(:path => "/messages/outbox") match "/message/new/:display_name" => "messages#new", :via => [:get, :post], :as => "new_message" - get "/message/read/:message_id" => "messages#show", :as => "message" + get "/message/read/:message_id", :to => redirect(:path => "/messages/%{message_id}") post "/message/mark/:message_id" => "messages#mark", :as => "mark_message" match "/message/reply/:message_id" => "messages#reply", :via => [:get, :post], :as => "reply_message" post "/message/delete/:message_id" => "messages#destroy", :as => "destroy_message" diff --git a/test/controllers/messages_controller_test.rb b/test/controllers/messages_controller_test.rb index 7ec92f64f..bffe3e1df 100644 --- a/test/controllers/messages_controller_test.rb +++ b/test/controllers/messages_controller_test.rb @@ -21,8 +21,8 @@ class MessagesControllerTest < ActionController::TestCase { :controller => "messages", :action => "new", :display_name => "username" } ) assert_routing( - { :path => "/message/read/1", :method => :get }, - { :controller => "messages", :action => "show", :message_id => "1" } + { :path => "/messages/1", :method => :get }, + { :controller => "messages", :action => "show", :id => "1" } ) assert_routing( { :path => "/message/mark/1", :method => :post }, @@ -178,7 +178,7 @@ class MessagesControllerTest < ActionController::TestCase assert_equal "[OpenStreetMap] Test Message", e.subject assert_match /Test message body/, e.text_part.decoded assert_match /Test message body/, e.html_part.decoded - assert_match %r{#{SERVER_URL}/message/read/}, e.text_part.decoded + assert_match %r{#{SERVER_URL}/messages/[0-9]+}, e.text_part.decoded ActionMailer::Base.deliveries.clear m = Message.last assert_equal user.id, m.from_user_id @@ -273,22 +273,22 @@ class MessagesControllerTest < ActionController::TestCase unread_message = create(:message, :unread, :sender => user, :recipient => recipient_user) # Check that the show message page requires us to login - get :show, :params => { :message_id => unread_message.id } - assert_redirected_to login_path(:referer => message_path(:message_id => unread_message.id)) + get :show, :params => { :id => unread_message.id } + assert_redirected_to login_path(:referer => message_path(:id => unread_message.id)) # Login as the wrong user session[:user] = other_user.id # Check that we can't read the message - get :show, :params => { :message_id => unread_message.id } - assert_redirected_to login_path(:referer => message_path(:message_id => unread_message.id)) + get :show, :params => { :id => unread_message.id } + assert_redirected_to login_path(:referer => message_path(:id => unread_message.id)) assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it.", flash[:notice] # Login as the message sender session[:user] = user.id # Check that the message sender can read the message - get :show, :params => { :message_id => unread_message.id } + get :show, :params => { :id => unread_message.id } assert_response :success assert_template "show" assert_equal false, Message.find(unread_message.id).message_read @@ -297,7 +297,7 @@ class MessagesControllerTest < ActionController::TestCase session[:user] = recipient_user.id # Check that the message recipient can read the message - get :show, :params => { :message_id => unread_message.id } + get :show, :params => { :id => unread_message.id } assert_response :success assert_template "show" assert_equal true, Message.find(unread_message.id).message_read @@ -308,7 +308,7 @@ class MessagesControllerTest < ActionController::TestCase end # Asking to read a message with a bogus ID should fail - get :show, :params => { :message_id => 99999 } + get :show, :params => { :id => 99999 } assert_response :not_found assert_template "no_such_message" end -- 2.43.2