]> git.openstreetmap.org Git - rails.git/commitdiff
Use before/after pagination on users page
authorAnton Khorev <tony29@yandex.ru>
Fri, 29 Mar 2024 15:21:15 +0000 (18:21 +0300)
committerAnton Khorev <tony29@yandex.ru>
Fri, 29 Mar 2024 15:21:15 +0000 (18:21 +0300)
app/controllers/user_blocks_controller.rb
app/views/user_blocks/_blocks.html.erb
config/locales/en.yml
test/controllers/user_blocks_controller_test.rb

index 07d0bc43c0bf2e64138a24ad2b0af41cbcf9bb2b..9ee3712265701fc336f6d8ed86d94aa770ca6a8f 100644 (file)
@@ -1,5 +1,6 @@
 class UserBlocksController < ApplicationController
   include UserMethods
+  include PaginationMethods
 
   layout "site"
 
@@ -16,10 +17,10 @@ class UserBlocksController < ApplicationController
 
   def index
     @params = params.permit
-    @user_blocks_pages, @user_blocks = paginate(:user_blocks,
-                                                :include => [:user, :creator, :revoker],
-                                                :order => "user_blocks.ends_at DESC",
-                                                :per_page => 20)
+
+    user_blocks = UserBlock.all
+
+    @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
   end
 
   def show
@@ -103,22 +104,20 @@ class UserBlocksController < ApplicationController
   # shows a list of all the blocks on the given user
   def blocks_on
     @params = params.permit(:display_name)
-    @user_blocks_pages, @user_blocks = paginate(:user_blocks,
-                                                :include => [:user, :creator, :revoker],
-                                                :conditions => { :user_id => @user.id },
-                                                :order => "user_blocks.ends_at DESC",
-                                                :per_page => 20)
+
+    user_blocks = UserBlock.where(:user => @user)
+
+    @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
   end
 
   ##
   # shows a list of all the blocks by the given user.
   def blocks_by
     @params = params.permit(:display_name)
-    @user_blocks_pages, @user_blocks = paginate(:user_blocks,
-                                                :include => [:user, :creator, :revoker],
-                                                :conditions => { :creator_id => @user.id },
-                                                :order => "user_blocks.ends_at DESC",
-                                                :per_page => 20)
+
+    user_blocks = UserBlock.where(:creator => @user)
+
+    @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
   end
 
   private
index b0b73c5a0b55c35dc084fa8baa8ddc8e9fa4f270..c508dcd47a6351f3007ba138843d6009541b80e2 100644 (file)
   <%= render :partial => "block", :locals => { :show_revoke_link => show_revoke_link, :show_user_name => show_user_name, :show_creator_name => show_creator_name }, :collection => @user_blocks %>
 </table>
 
-<nav class='secondary-actions'>
-  <ul>
-    <% if @user_blocks_pages.current_page.number > 1 -%>
-      <li><%= link_to t(".previous"), @params.merge(:page => @user_blocks_pages.current_page.number - 1) %></li>
-    <% else -%>
-      <li><%= t(".previous") %></li>
-    <% end -%>
-
-    <li><%= t(".showing_page", :page => @user_blocks_pages.current_page.number) %></li>
-
-    <% if @user_blocks_pages.current_page.number < @user_blocks_pages.page_count -%>
-      <li><%= link_to t(".next"), @params.merge(:page => @user_blocks_pages.current_page.number + 1) %></li>
-    <% else -%>
-      <li><%= t(".next") %></li>
-    <% end -%>
-  </ul>
-</nav>
+<%= render "shared/pagination",
+           :newer_key => "user_blocks.blocks.newer",
+           :older_key => "user_blocks.blocks.older",
+           :newer_id => @newer_user_blocks_id,
+           :older_id => @older_user_blocks_id %>
index ec5e544425e28081f322c0fb8337386537fedc9e..95edb8bb5e1227af782f115f6e8c370c54ca9ce4 100644 (file)
@@ -2984,9 +2984,8 @@ en:
       reason: "Reason for block"
       status: "Status"
       revoker_name: "Revoked by"
-      showing_page: "Page %{page}"
-      next: "Next »"
-      previous: "« Previous"
+      older: "Older Blocks"
+      newer: "Newer Blocks"
   user_mutes:
     index:
       title: "Muted Users"
index 8891e5b36dcb3eae5055d3ccd1bf60b160cc8d6d..a7ab02c75fb9afa5011f8a1b275e743df1d3d677 100644 (file)
@@ -93,19 +93,26 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   ##
   # test the index action with multiple pages
   def test_index_paged
-    create_list(:user_block, 50)
+    user_blocks = create_list(:user_block, 50).reverse
+    next_path = user_blocks_path
 
-    get user_blocks_path
+    get next_path
     assert_response :success
-    assert_select "table#block_list tbody", :count => 1 do
-      assert_select "tr", :count => 20
-    end
+    check_user_blocks_table user_blocks[0...20]
+    check_no_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
 
-    get user_blocks_path(:page => 2)
+    get next_path
     assert_response :success
-    assert_select "table#block_list tbody", :count => 1 do
-      assert_select "tr", :count => 20
-    end
+    check_user_blocks_table user_blocks[20...40]
+    check_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
+
+    get next_path
+    assert_response :success
+    check_user_blocks_table user_blocks[40...50]
+    check_page_link "Newer Blocks"
+    check_no_page_link "Older Blocks"
   end
 
   ##
@@ -531,19 +538,26 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   # test the blocks_on action with multiple pages
   def test_blocks_on_paged
     user = create(:user)
-    create_list(:user_block, 50, :user => user)
+    user_blocks = create_list(:user_block, 50, :user => user).reverse
+    next_path = user_blocks_on_path(user)
 
-    get user_blocks_on_path(user)
+    get next_path
     assert_response :success
-    assert_select "table#block_list tbody", :count => 1 do
-      assert_select "tr", :count => 20
-    end
+    check_user_blocks_table user_blocks[0...20]
+    check_no_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
 
-    get user_blocks_on_path(user, :page => 2)
+    get next_path
     assert_response :success
-    assert_select "table#block_list tbody", :count => 1 do
-      assert_select "tr", :count => 20
-    end
+    check_user_blocks_table user_blocks[20...40]
+    check_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
+
+    get next_path
+    assert_response :success
+    check_user_blocks_table user_blocks[40...50]
+    check_page_link "Newer Blocks"
+    check_no_page_link "Older Blocks"
   end
 
   ##
@@ -592,18 +606,46 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
   # test the blocks_by action with multiple pages
   def test_blocks_by_paged
     user = create(:moderator_user)
-    create_list(:user_block, 50, :creator => user)
+    user_blocks = create_list(:user_block, 50, :creator => user).reverse
+    next_path = user_blocks_by_path(user)
 
-    get user_blocks_by_path(user)
+    get next_path
     assert_response :success
-    assert_select "table#block_list tbody", :count => 1 do
-      assert_select "tr", :count => 20
-    end
+    check_user_blocks_table user_blocks[0...20]
+    check_no_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
 
-    get user_blocks_by_path(user, :page => 2)
+    get next_path
     assert_response :success
-    assert_select "table#block_list tbody", :count => 1 do
-      assert_select "tr", :count => 20
+    check_user_blocks_table user_blocks[20...40]
+    check_page_link "Newer Blocks"
+    next_path = check_page_link "Older Blocks"
+
+    get next_path
+    assert_response :success
+    check_user_blocks_table user_blocks[40...50]
+    check_page_link "Newer Blocks"
+    check_no_page_link "Older Blocks"
+  end
+
+  private
+
+  def check_user_blocks_table(user_blocks)
+    assert_dom "table#block_list tbody tr" do |rows|
+      assert_equal user_blocks.count, rows.count, "unexpected number of rows in user blocks table"
+      rows.zip(user_blocks).map do |row, user_block|
+        assert_dom row, "a[href='#{user_block_path user_block}']", 1
+      end
+    end
+  end
+
+  def check_no_page_link(name)
+    assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/, :count => 0 }, "unexpected #{name} page link"
+  end
+
+  def check_page_link(name)
+    assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/ }, "missing #{name} page link" do |buttons|
+      return buttons.first.attributes["href"].value
     end
   end
 end