]> git.openstreetmap.org Git - rails.git/commitdiff
Move diary comments index action to comments controller
authorAnton Khorev <tony29@yandex.ru>
Mon, 10 Jun 2024 13:09:07 +0000 (16:09 +0300)
committerAnton Khorev <tony29@yandex.ru>
Mon, 10 Jun 2024 13:32:53 +0000 (16:32 +0300)
app/abilities/ability.rb
app/controllers/diary_comments_controller.rb [new file with mode: 0644]
app/controllers/diary_entries_controller.rb
app/views/diary_comments/index.html.erb [moved from app/views/diary_entries/comments.html.erb with 89% similarity]
config/locales/en.yml
config/routes.rb
test/abilities/abilities_test.rb
test/controllers/diary_comments_controller_test.rb [new file with mode: 0644]
test/controllers/diary_entries_controller_test.rb

index 3aba63c330b080bdb5b23ab9088499929ab45a86..8de756ccdafd753c525b6fe6ca41f2249ea33823 100644 (file)
@@ -18,7 +18,8 @@ class Ability
       can [:index, :feed, :show], Changeset
       can :index, ChangesetComment
       can [:confirm, :confirm_resend, :confirm_email], :confirmation
-      can [:index, :rss, :show, :comments], DiaryEntry
+      can [:index, :rss, :show], DiaryEntry
+      can :index, DiaryComment
       can [:index], Note
       can [:new, :create, :edit, :update], :password
       can [:index, :show], Redaction
diff --git a/app/controllers/diary_comments_controller.rb b/app/controllers/diary_comments_controller.rb
new file mode 100644 (file)
index 0000000..f1add85
--- /dev/null
@@ -0,0 +1,27 @@
+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, :only => :index
+
+  allow_thirdparty_images :only => :index
+
+  def index
+    @title = t ".title", :user => @user.display_name
+
+    comments = DiaryComment.where(:user => @user)
+    comments = comments.visible unless can? :unhidecomment, DiaryEntry
+
+    @params = params.permit(:display_name, :before, :after)
+
+    @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user])
+  end
+end
index f3fbcd1fd0193aed5b70015f24490e0b2a7176bd..d1b44acd0ebb014590f2c50a3ef5551ef9f13d6f 100644 (file)
@@ -10,10 +10,10 @@ class DiaryEntriesController < ApplicationController
 
   authorize_resource
 
-  before_action :lookup_user, :only => [:show, :comments]
+  before_action :lookup_user, :only => :show
   before_action :check_database_writable, :only => [:new, :create, :edit, :update, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
 
-  allow_thirdparty_images :only => [:new, :create, :edit, :update, :index, :show, :comments]
+  allow_thirdparty_images :only => [:new, :create, :edit, :update, :index, :show]
 
   def index
     if params[:display_name]
@@ -241,17 +241,6 @@ class DiaryEntriesController < ApplicationController
     redirect_to diary_entry_path(comment.diary_entry.user, comment.diary_entry)
   end
 
-  def comments
-    @title = t ".title", :user => @user.display_name
-
-    comments = DiaryComment.where(:user => @user)
-    comments = comments.visible unless can? :unhidecomment, DiaryEntry
-
-    @params = params.permit(:display_name, :before, :after)
-
-    @comments, @newer_comments_id, @older_comments_id = get_page_items(comments, :includes => [:user])
-  end
-
   private
 
   ##
similarity index 89%
rename from app/views/diary_entries/comments.html.erb
rename to app/views/diary_comments/index.html.erb
index aa5c163847912083e64b706c9112910f869657a3..0dd03d9d095afa620e839d68b84f76aa138cc5c4 100644 (file)
@@ -27,8 +27,8 @@
   </table>
 
   <%= render "shared/pagination",
-             :newer_key => "diary_entries.comments.newer_comments",
-             :older_key => "diary_entries.comments.older_comments",
+             :newer_key => "diary_comments.index.newer_comments",
+             :older_key => "diary_comments.index.older_comments",
              :newer_id => @newer_comments_id,
              :older_id => @older_comments_id %>
 <% end -%>
index 32ecbf7cd0c4522e91e6ecf8da2f0ade52587b78..e8dde9521375e9f8c92cc278c1275c431637f3d5 100644 (file)
@@ -592,7 +592,14 @@ en:
       all:
         title: "OpenStreetMap diary entries"
         description: "Recent diary entries from users of OpenStreetMap"
-    comments:
+    subscribe:
+      heading: Subscribe to the following diary entry discussion?
+      button: Subscribe to discussion
+    unsubscribe:
+      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}"
@@ -602,12 +609,6 @@ en:
       comment: Comment
       newer_comments: "Newer Comments"
       older_comments: "Older Comments"
-    subscribe:
-      heading: Subscribe to the following diary entry discussion?
-      button: Subscribe to discussion
-    unsubscribe:
-      heading: Unsubscribe from the following diary entry discussion?
-      button: Unsubscribe from discussion
   doorkeeper:
     errors:
       messages:
index c44064ba325c7f975f6af0c3f6e26bef823492db..a8d2b1d7e6c3014c61dcf00185e481366c1eda26 100644 (file)
@@ -237,7 +237,7 @@ OpenStreetMap::Application.routes.draw do
   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_entries#comments", :as => :diary_comments
+  get "/user/:display_name/diary/comments" => "diary_comments#index", :as => :diary_comments
   get "/user/:display_name/diary" => "diary_entries#index"
   get "/diary/:language" => "diary_entries#index"
   scope "/user/:display_name" do
index 139f270feee4d274d402f84630632e6bbde1dc41..4947351b6fca5f27d1e7bf4cc2bae6442070a3ae 100644 (file)
@@ -17,10 +17,14 @@ class GuestAbilityTest < AbilityTest
 
   test "diary permissions for a guest" do
     ability = Ability.new nil
-    [:index, :rss, :show, :comments].each do |action|
+    [:index, :rss, :show].each do |action|
       assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries"
     end
 
+    [:index].each do |action|
+      assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComments"
+    end
+
     [:create, :edit, :comment, :subscribe, :unsubscribe, :hide, :hidecomment].each do |action|
       assert ability.cannot?(action, DiaryEntry), "should not be able to #{action} DiaryEntries"
     end
@@ -47,10 +51,14 @@ class UserAbilityTest < AbilityTest
   test "Diary permissions" do
     ability = Ability.new create(:user)
 
-    [:index, :rss, :show, :comments, :create, :edit, :comment, :subscribe, :unsubscribe].each do |action|
+    [:index, :rss, :show, :create, :edit, :comment, :subscribe, :unsubscribe].each do |action|
       assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries"
     end
 
+    [:index].each do |action|
+      assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComments"
+    end
+
     [:hide, :hidecomment].each do |action|
       assert ability.cannot?(action, DiaryEntry), "should not be able to #{action} DiaryEntries"
     end
@@ -86,9 +94,13 @@ end
 class AdministratorAbilityTest < AbilityTest
   test "Diary for an administrator" do
     ability = Ability.new create(:administrator_user)
-    [:index, :rss, :show, :comments, :create, :edit, :comment, :subscribe, :unsubscribe, :hide, :hidecomment].each do |action|
+    [:index, :rss, :show, :create, :edit, :comment, :subscribe, :unsubscribe, :hide, :hidecomment].each do |action|
       assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries"
     end
+
+    [:index].each do |action|
+      assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComments"
+    end
   end
 
   test "User Roles permissions for an administrator" do
diff --git a/test/controllers/diary_comments_controller_test.rb b/test/controllers/diary_comments_controller_test.rb
new file mode 100644 (file)
index 0000000..adb96dc
--- /dev/null
@@ -0,0 +1,63 @@
+require "test_helper"
+
+class DiaryCommentsControllerTest < ActionDispatch::IntegrationTest
+  def setup
+    super
+    # Create the default language for diary entries
+    create(:language, :code => "en")
+  end
+
+  def test_routes
+    assert_routing(
+      { :path => "/user/username/diary/comments", :method => :get },
+      { :controller => "diary_comments", :action => "index", :display_name => "username" }
+    )
+
+    get "/user/username/diary/comments/1"
+    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 diary_comments_path(:display_name => user.display_name)
+    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 diary_comments_path(:display_name => other_user.display_name)
+    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 diary_comments_path(:display_name => suspended_user.display_name)
+    assert_response :not_found
+
+    # Test a deleted user
+    get diary_comments_path(:display_name => deleted_user.display_name)
+    assert_response :not_found
+  end
+
+  def test_index_invalid_paged
+    user = create(:user)
+
+    %w[-1 0 fred].each do |id|
+      get diary_comments_path(:display_name => user.display_name, :before => id)
+      assert_redirected_to :controller => :errors, :action => :bad_request
+
+      get diary_comments_path(:display_name => user.display_name, :after => id)
+      assert_redirected_to :controller => :errors, :action => :bad_request
+    end
+  end
+end
index b6d11c62aff91e69478bfeaa090e181bc3d2708a..1dfd5ec1a293287021ed589792502abc1f0c046f 100644 (file)
@@ -49,11 +49,6 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
       { :controller => "diary_entries", :action => "rss", :display_name => "username", :format => :rss }
     )
 
-    assert_routing(
-      { :path => "/user/username/diary/comments", :method => :get },
-      { :controller => "diary_entries", :action => "comments", :display_name => "username" }
-    )
-
     assert_routing(
       { :path => "/diary/new", :method => :get },
       { :controller => "diary_entries", :action => "new" }
@@ -110,9 +105,6 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
       { :path => "/user/username/diary/1/unsubscribe", :method => :post },
       { :controller => "diary_entries", :action => "unsubscribe", :display_name => "username", :id => "1" }
     )
-
-    get "/user/username/diary/comments/1"
-    assert_redirected_to "/user/username/diary/comments"
   end
 
   def test_new_no_login
@@ -900,50 +892,6 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     assert DiaryComment.find(diary_comment.id).visible
   end
 
-  def test_comments
-    user = create(:user)
-    other_user = create(:user)
-    suspended_user = create(:user, :suspended)
-    deleted_user = create(:user, :deleted)
-
-    # Test a user with no comments
-    get diary_comments_path(:display_name => user.display_name)
-    assert_response :success
-    assert_template :comments
-    assert_select "h4", :html => "No diary comments"
-
-    # Test a user with a comment
-    create(:diary_comment, :user => other_user)
-
-    get diary_comments_path(:display_name => other_user.display_name)
-    assert_response :success
-    assert_template :comments
-    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 diary_comments_path(:display_name => suspended_user.display_name)
-    assert_response :not_found
-
-    # Test a deleted user
-    get diary_comments_path(:display_name => deleted_user.display_name)
-    assert_response :not_found
-  end
-
-  def test_comments_invalid_paged
-    user = create(:user)
-
-    %w[-1 0 fred].each do |id|
-      get diary_comments_path(:display_name => user.display_name, :before => id)
-      assert_redirected_to :controller => :errors, :action => :bad_request
-
-      get diary_comments_path(:display_name => user.display_name, :after => id)
-      assert_redirected_to :controller => :errors, :action => :bad_request
-    end
-  end
-
   def test_subscribe_page
     user = create(:user)
     other_user = create(:user)