From 0c896730ec1211fc18fdb94049786316da0fa8a7 Mon Sep 17 00:00:00 2001 From: Lukas Brabec Date: Feb 06 2021 14:15:04 +0000 Subject: [PATCH 1/3] Fix broken pagination of group API --- diff --git a/pagure/api/group.py b/pagure/api/group.py index 3f06db3..ff28845 100644 --- a/pagure/api/group.py +++ b/pagure/api/group.py @@ -278,7 +278,7 @@ def api_view_group(group): ) query_start = (page - 1) * per_page query_limit = per_page - page_projects = group_projects[query_start:query_limit] + page_projects = group_projects[query_start:query_start+query_limit] output["total_projects"] = projects_cnt output["pagination"] = pagination_metadata From 050fef8fcb2cd1936abed9b7168a8420a6d43080 Mon Sep 17 00:00:00 2001 From: František Zatloukal Date: Feb 08 2021 09:58:11 +0000 Subject: [PATCH 2/3] Add basic pagination test for group API --- diff --git a/tests/test_pagure_flask_api_group.py b/tests/test_pagure_flask_api_group.py index fd1c363..b4d0cce 100644 --- a/tests/test_pagure_flask_api_group.py +++ b/tests/test_pagure_flask_api_group.py @@ -719,6 +719,57 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): data["pagination"]["last"] = "http://localhost..." self.assertDictEqual(data, exp) + def test_api_view_group_w_projects_and_acl_pagination(self): + """ + Tests the pagination for the api_view_group method + """ + + project = pagure.lib.query._get_project(self.session, "test2") + msg = pagure.lib.query.add_group_to_project( + session=self.session, + project=project, + new_group="some_group", + user="pingou", + access="commit", + ) + self.session.commit() + self.assertEqual(msg, "Group access updated") + + project_another = pagure.lib.query._get_project(self.session, "test") + msg = pagure.lib.query.add_group_to_project( + session=self.session, + project=project_another, + new_group="some_group", + user="pingou", + access="commit", + ) + self.session.commit() + self.assertEqual(msg, "Group added") + + tests.create_tokens(self.session) + + headers = {"Authorization": "token aaabbbcccddd"} + output = self.app.get( + "/api/0/group/some_group?projects=1&per_page=1", headers=headers + ) + self.assertEqual(output.status_code, 200) + + data = json.loads(output.get_data(as_text=True)) + projects = [project["name"] for project in data["projects"]] + + # Test the result we've got from the first page out of two + assert projects == ["test"] + + output_last = self.app.get(data["pagination"]["next"], headers=headers) + self.assertEqual(output_last.status_code, 200) + data_last = json.loads(output_last.get_data(as_text=True)) + + projects.extend([project["name"] for project in data_last["projects"]]) + + # Note that pagure sorts projects alphabetically, so we're comparing + # a different order that was the order of requests + assert projects == ["test", "test2"] + if __name__ == "__main__": unittest.main(verbosity=2) From 256f1cd82dd91943e93e1a0952e8b5dffd32cfa1 Mon Sep 17 00:00:00 2001 From: František Zatloukal Date: Feb 08 2021 11:39:38 +0000 Subject: [PATCH 3/3] Code styling issue fix around group api pagination fix --- diff --git a/pagure/api/group.py b/pagure/api/group.py index ff28845..9a8c3c5 100644 --- a/pagure/api/group.py +++ b/pagure/api/group.py @@ -278,7 +278,7 @@ def api_view_group(group): ) query_start = (page - 1) * per_page query_limit = per_page - page_projects = group_projects[query_start:query_start+query_limit] + page_projects = group_projects[query_start : query_start + query_limit] output["total_projects"] = projects_cnt output["pagination"] = pagination_metadata