diff --git a/routers/admin.py b/routers/admin.py index 7e5837cf..567a3908 100644 --- a/routers/admin.py +++ b/routers/admin.py @@ -573,17 +573,12 @@ def get_count( Count distinct users matching the current filters and admin permissions. """ self._set_allowed_resource_subqueries(admin_roles) - id_query = ( - self.get_base_query(include_memberships=False) - .where( - self.get_admin_permissions_query(admin_roles), - *self.get_query_conditions(admin_roles), - ) + count_statement = select(func.count(BiocommonsUser.id)).where( + self.get_admin_permissions_query(admin_roles), + *self.get_query_conditions(admin_roles) ) - if exclude_user_id: - id_query = id_query.where(BiocommonsUser.id != exclude_user_id) - filtered_users = id_query.subquery() - count_statement = select(func.count()).select_from(filtered_users) + if exclude_user_id is not None: + count_statement = count_statement.where(BiocommonsUser.id != exclude_user_id) return db_session.exec(count_statement).one() def email_verified_query(self): diff --git a/tests/admin_api/test_admin.py b/tests/admin_api/test_admin.py index 60147953..67644797 100644 --- a/tests/admin_api/test_admin.py +++ b/tests/admin_api/test_admin.py @@ -788,6 +788,78 @@ def test_get_user_page_info( } +def test_get_user_page_info_excludes_current_admin_user( + test_client, + as_admin_user, + galaxy_platform, + bpa_platform, + test_db_session, + persistent_factories, +): + admin_db_user = as_admin_user + admin_membership = PlatformMembershipFactory.create_sync( + user_id=admin_db_user.id, + platform_id=galaxy_platform.id, + approval_status=ApprovalStatusEnum.APPROVED, + ) + admin_db_user.platform_memberships.append(admin_membership) + + _users_with_platform_membership( + 2, + db_session=test_db_session, + platform_id=galaxy_platform.id, + ) + _users_with_platform_membership( + 3, + db_session=test_db_session, + platform_id=galaxy_platform.id, + approval_status=ApprovalStatusEnum.PENDING, + ) + _users_with_platform_membership( + 2, + db_session=test_db_session, + platform_id=bpa_platform.id, + ) + test_db_session.add(admin_db_user) + test_db_session.commit() + + resp = test_client.get("/admin/users/pages") + assert resp.status_code == 200 + assert resp.json() == { + "total": 5, + "pages": 1, + "per_page": 100, + } + + resp = test_client.get("/admin/users/pages?per_page=2") + assert resp.status_code == 200 + assert resp.json() == { + "total": 5, + "pages": 3, + "per_page": 2, + } + + resp = test_client.get( + f"/admin/users/pages?approval_status={ApprovalStatusEnum.APPROVED.value}" + ) + assert resp.status_code == 200 + assert resp.json() == { + "total": 2, + "pages": 1, + "per_page": 100, + } + + resp = test_client.get( + f"/admin/users/pages?approval_status={ApprovalStatusEnum.PENDING.value}" + ) + assert resp.status_code == 200 + assert resp.json() == { + "total": 3, + "pages": 1, + "per_page": 100, + } + + def test_user_query_params_get_count( test_db_session, admin_user,