From 7b83237261545529b1699ac4b7559890dfe9683d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Hanol?= <regis@hanol.fr>
Date: Thu, 16 Jan 2020 23:57:34 +0100
Subject: [PATCH] FIX: groups pagination was broken

---
 app/controllers/groups_controller.rb    |  7 +++++--
 spec/requests/groups_controller_spec.rb | 24 ++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index 6081f4debbd..dc7f226110e 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -80,6 +80,9 @@ class GroupsController < ApplicationController
       type_filters = type_filters - [:my, :owner]
     end
 
+    # count the total before doing pagination
+    total = groups.count
+
     page = params[:page].to_i
     page_size = MobileDetection.mobile_device?(request.user_agent) ? 15 : 36
     groups = groups.offset(page * page_size).limit(page_size)
@@ -93,14 +96,14 @@ class GroupsController < ApplicationController
       extras: {
         type_filters: type_filters
       },
-      total_rows_groups: groups.count,
+      total_rows_groups: total,
       load_more_groups: groups_path(
         page: page + 1,
         type: type,
         order: order,
         asc: params[:asc],
         filter: filter
-      ),
+      )
     )
   end
 
diff --git a/spec/requests/groups_controller_spec.rb b/spec/requests/groups_controller_spec.rb
index 05acd8e611b..fa07869b542 100644
--- a/spec/requests/groups_controller_spec.rb
+++ b/spec/requests/groups_controller_spec.rb
@@ -14,6 +14,30 @@ describe GroupsController do
       Fabricate(:group, name: 'staff_group', visibility_level: Group.visibility_levels[:staff])
     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
       before do
         SiteSetting.enable_group_directory = false