FIX: groups pagination was broken

This commit is contained in:
Régis Hanol 2020-01-16 23:57:34 +01:00
parent 0c4ac2a7bc
commit 7b83237261
2 changed files with 29 additions and 2 deletions

@ -80,6 +80,9 @@ class GroupsController < ApplicationController
type_filters = type_filters - [:my, :owner] type_filters = type_filters - [:my, :owner]
end end
# count the total before doing pagination
total = groups.count
page = params[:page].to_i page = params[:page].to_i
page_size = MobileDetection.mobile_device?(request.user_agent) ? 15 : 36 page_size = MobileDetection.mobile_device?(request.user_agent) ? 15 : 36
groups = groups.offset(page * page_size).limit(page_size) groups = groups.offset(page * page_size).limit(page_size)
@ -93,14 +96,14 @@ class GroupsController < ApplicationController
extras: { extras: {
type_filters: type_filters type_filters: type_filters
}, },
total_rows_groups: groups.count, total_rows_groups: total,
load_more_groups: groups_path( load_more_groups: groups_path(
page: page + 1, page: page + 1,
type: type, type: type,
order: order, order: order,
asc: params[:asc], asc: params[:asc],
filter: filter filter: filter
), )
) )
end end

@ -14,6 +14,30 @@ describe GroupsController do
Fabricate(:group, name: 'staff_group', visibility_level: Group.visibility_levels[:staff]) Fabricate(:group, name: 'staff_group', visibility_level: Group.visibility_levels[:staff])
end end
it "ensures that groups can be paginated" do
50.times { Fabricate(:group) }
get "/groups.json"
expect(response.status).to eq(200)
body = JSON.parse(response.body)
expect(body["groups"].size).to eq(36)
expect(body["total_rows_groups"]).to eq(50)
expect(body["load_more_groups"]).to eq("/groups?page=1")
get "/groups.json", params: { page: 1 }
expect(response.status).to eq(200)
body = JSON.parse(response.body)
expect(body["groups"].size).to eq(14)
expect(body["total_rows_groups"]).to eq(50)
expect(body["load_more_groups"]).to eq("/groups?page=2")
end
context 'when group directory is disabled' do context 'when group directory is disabled' do
before do before do
SiteSetting.enable_group_directory = false SiteSetting.enable_group_directory = false