class UserBlocksController < ApplicationController
include UserMethods
+ include PaginationMethods
layout "site"
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
# 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
<%= 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 %>
##
# 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
##
# 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
##
# 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