From: Anton Khorev Date: Sat, 18 Jan 2025 23:40:13 +0000 (+0300) Subject: Create diary_comments resources for users X-Git-Tag: live~177^2~3 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/08292292f09723806e4ca61b93106020e9c5a354?hp=6f71b372fb1289e3733f9dbd929fd18efe850b13 Create diary_comments resources for users --- diff --git a/app/controllers/diary_comments_controller.rb b/app/controllers/diary_comments_controller.rb index 676bc22a6..91e05ff74 100644 --- a/app/controllers/diary_comments_controller.rb +++ b/app/controllers/diary_comments_controller.rb @@ -1,7 +1,4 @@ class DiaryCommentsController < ApplicationController - include UserMethods - include PaginationMethods - layout "site" before_action :authorize_web @@ -10,23 +7,9 @@ class DiaryCommentsController < ApplicationController authorize_resource - before_action :lookup_user, :only => :index - before_action :check_database_writable, :only => [:create, :hide, :unhide] - - allow_thirdparty_images :only => [:index, :create] - - def index - @title = t ".title", :user => @user.display_name - - comments = DiaryComment.where(:user => @user) - comments = comments.visible unless can? :unhide, DiaryComment + before_action :check_database_writable - @params = params.permit(:display_name, :before, :after) - - @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user]) - - render :partial => "page" if turbo_frame_request_id == "pagination" - end + allow_thirdparty_images :only => :create def create @entry = DiaryEntry.find(params[:id]) diff --git a/app/controllers/users/diary_comments_controller.rb b/app/controllers/users/diary_comments_controller.rb new file mode 100644 index 000000000..5e6a55202 --- /dev/null +++ b/app/controllers/users/diary_comments_controller.rb @@ -0,0 +1,31 @@ +module Users + class DiaryCommentsController < ApplicationController + include UserMethods + include PaginationMethods + + layout "site" + + before_action :authorize_web + before_action :set_locale + before_action :check_database_readable + + authorize_resource + + before_action :lookup_user + + allow_thirdparty_images + + def index + @title = t ".title", :user => @user.display_name + + comments = DiaryComment.where(:user => @user) + comments = comments.visible unless can? :unhide, DiaryComment + + @params = params.permit(:display_name, :before, :after) + + @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user]) + + render :partial => "page" if turbo_frame_request_id == "pagination" + end + end +end diff --git a/app/views/diary_comments/_page.html.erb b/app/views/users/diary_comments/_page.html.erb similarity index 100% rename from app/views/diary_comments/_page.html.erb rename to app/views/users/diary_comments/_page.html.erb diff --git a/app/views/diary_comments/index.html.erb b/app/views/users/diary_comments/index.html.erb similarity index 100% rename from app/views/diary_comments/index.html.erb rename to app/views/users/diary_comments/index.html.erb diff --git a/config/locales/en.yml b/config/locales/en.yml index a112f3b0d..4e2923ee6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -622,15 +622,6 @@ en: heading: Unsubscribe from the following diary entry discussion? button: Unsubscribe from discussion diary_comments: - index: - title: "Diary Comments added by %{user}" - heading: "%{user}'s Diary Comments" - subheading_html: "Diary Comments added by %{user}" - no_comments: "No diary comments" - page: - post: Post - when: When - comment: Comment new: heading: Add a comment to the following diary entry discussion? doorkeeper: @@ -2881,6 +2872,16 @@ en: user: summary_html: "%{name} created from %{ip_address} on %{date}" summary_no_ip_html: "%{name} created on %{date}" + diary_comments: + index: + title: "Diary Comments added by %{user}" + heading: "%{user}'s Diary Comments" + subheading_html: "Diary Comments added by %{user}" + no_comments: "No diary comments" + page: + post: Post + when: When + comment: Comment suspended: title: Account Suspended heading: Account Suspended diff --git a/config/routes.rb b/config/routes.rb index 0b5af20d2..5b0da5d89 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -246,8 +246,6 @@ OpenStreetMap::Application.routes.draw do get "/user/:display_name/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss } get "/diary/:language/rss" => "diary_entries#rss", :defaults => { :format => :rss } get "/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss } - get "/user/:display_name/diary/comments(/:page)", :page => /[1-9][0-9]*/, :to => redirect(:path => "/user/%{display_name}/diary_comments") - get "/user/:display_name/diary_comments" => "diary_comments#index", :as => :user_diary_comments get "/user/:display_name/diary" => "diary_entries#index" get "/diary/:language" => "diary_entries#index" scope "/user/:display_name" do @@ -269,12 +267,14 @@ OpenStreetMap::Application.routes.draw do resources :users, :path => "user", :param => :display_name, :only => [:new, :create, :show] do resource :role, :controller => "user_roles", :path => "roles/:role", :only => [:create, :destroy] scope :module => :users do + resources :diary_comments, :only => :index resource :issued_blocks, :path => "blocks_by", :only => :show resource :received_blocks, :path => "blocks", :only => [:show, :edit, :destroy] resource :status, :only => :update end end get "/user/:display_name/account", :to => redirect(:path => "/account/edit") + get "/user/:display_name/diary/comments(/:page)", :page => /[1-9][0-9]*/, :to => redirect(:path => "/user/%{display_name}/diary_comments") resource :account, :only => [:edit, :update, :destroy] do scope :module => :accounts do diff --git a/test/controllers/diary_comments_controller_test.rb b/test/controllers/diary_comments_controller_test.rb index 51ebe048c..a516bde8d 100644 --- a/test/controllers/diary_comments_controller_test.rb +++ b/test/controllers/diary_comments_controller_test.rb @@ -8,10 +8,6 @@ class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest end def test_routes - assert_routing( - { :path => "/user/username/diary_comments", :method => :get }, - { :controller => "diary_comments", :action => "index", :display_name => "username" } - ) assert_routing( { :path => "/user/username/diary/1/comments", :method => :post }, { :controller => "diary_comments", :action => "create", :display_name => "username", :id => "1" } @@ -24,56 +20,6 @@ class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest { :path => "/diary_comments/2/unhide", :method => :post }, { :controller => "diary_comments", :action => "unhide", :comment => "2" } ) - - get "/user/username/diary/comments/1" - assert_redirected_to "/user/username/diary_comments" - - get "/user/username/diary/comments" - assert_redirected_to "/user/username/diary_comments" - end - - def test_index - user = create(:user) - other_user = create(:user) - suspended_user = create(:user, :suspended) - deleted_user = create(:user, :deleted) - - # Test a user with no comments - get user_diary_comments_path(user) - assert_response :success - assert_template :index - assert_select "h4", :html => "No diary comments" - - # Test a user with a comment - create(:diary_comment, :user => other_user) - - get user_diary_comments_path(other_user) - assert_response :success - assert_template :index - assert_dom "a[href='#{user_path(other_user)}']", :text => other_user.display_name - assert_select "table.table-striped tbody" do - assert_select "tr", :count => 1 - end - - # Test a suspended user - get user_diary_comments_path(suspended_user) - assert_response :not_found - - # Test a deleted user - get user_diary_comments_path(deleted_user) - assert_response :not_found - end - - def test_index_invalid_paged - user = create(:user) - - %w[-1 0 fred].each do |id| - get user_diary_comments_path(user, :before => id) - assert_redirected_to :controller => :errors, :action => :bad_request - - get user_diary_comments_path(user, :after => id) - assert_redirected_to :controller => :errors, :action => :bad_request - end end def test_create diff --git a/test/controllers/users/diary_comments_controller_test.rb b/test/controllers/users/diary_comments_controller_test.rb new file mode 100644 index 000000000..0145153e5 --- /dev/null +++ b/test/controllers/users/diary_comments_controller_test.rb @@ -0,0 +1,70 @@ +require "test_helper" + +module Users + class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest + def setup + super + # Create the default language for diary entries + create(:language, :code => "en") + end + + ## + # test all routes which lead to this controller + def test_routes + assert_routing( + { :path => "/user/username/diary_comments", :method => :get }, + { :controller => "users/diary_comments", :action => "index", :user_display_name => "username" } + ) + + get "/user/username/diary/comments/1" + assert_redirected_to "/user/username/diary_comments" + + get "/user/username/diary/comments" + assert_redirected_to "/user/username/diary_comments" + end + + def test_index + user = create(:user) + other_user = create(:user) + suspended_user = create(:user, :suspended) + deleted_user = create(:user, :deleted) + + # Test a user with no comments + get user_diary_comments_path(user) + assert_response :success + assert_template :index + assert_select "h4", :html => "No diary comments" + + # Test a user with a comment + create(:diary_comment, :user => other_user) + + get user_diary_comments_path(other_user) + assert_response :success + assert_template :index + assert_dom "a[href='#{user_path(other_user)}']", :text => other_user.display_name + assert_select "table.table-striped tbody" do + assert_select "tr", :count => 1 + end + + # Test a suspended user + get user_diary_comments_path(suspended_user) + assert_response :not_found + + # Test a deleted user + get user_diary_comments_path(deleted_user) + assert_response :not_found + end + + def test_index_invalid_paged + user = create(:user) + + %w[-1 0 fred].each do |id| + get user_diary_comments_path(user, :before => id) + assert_redirected_to :controller => "/errors", :action => :bad_request + + get user_diary_comments_path(user, :after => id) + assert_redirected_to :controller => "/errors", :action => :bad_request + end + end + end +end