From 234c197ee14ff14dfe922ba5812611e7e365dfbc Mon Sep 17 00:00:00 2001 From: Felipe Cardoso Date: Thu, 6 Nov 2025 20:10:38 +0100 Subject: [PATCH] Refactor Admin Organizations tests and enhance useAdmin hooks with session stats - Simplified `AdminOrganizationsPage` tests by mocking `OrganizationManagementContent` and focusing on essential structure and content rendering. - Updated `useAdmin` hooks to integrate `adminListSessions` and accommodate session statistics in superuser scenarios. - Added relevant test coverage for session data fetching and validation. --- .../app/admin/organizations/page.test.tsx | 60 ++++--------------- .../tests/lib/api/hooks/useAdmin.test.tsx | 16 ++++- 2 files changed, 27 insertions(+), 49 deletions(-) diff --git a/frontend/tests/app/admin/organizations/page.test.tsx b/frontend/tests/app/admin/organizations/page.test.tsx index 1cb2d79..2ba0060 100644 --- a/frontend/tests/app/admin/organizations/page.test.tsx +++ b/frontend/tests/app/admin/organizations/page.test.tsx @@ -1,59 +1,17 @@ /** * Tests for Admin Organizations Page - * Verifies rendering of organization management placeholder + * Basic structural tests - full component testing in E2E tests */ import { render, screen } from '@testing-library/react'; import AdminOrganizationsPage from '@/app/admin/organizations/page'; +// Mock the entire OrganizationManagementContent component +jest.mock('@/components/admin/organizations/OrganizationManagementContent', () => ({ + OrganizationManagementContent: () =>
Organization Management
, +})); + describe('AdminOrganizationsPage', () => { - it('renders page title', () => { - render(); - - expect(screen.getByText('Organizations')).toBeInTheDocument(); - }); - - it('renders page description', () => { - render(); - - expect( - screen.getByText('Manage organizations and their members') - ).toBeInTheDocument(); - }); - - it('renders back button link', () => { - render(); - - const backLink = screen.getByRole('link', { name: '' }); - expect(backLink).toHaveAttribute('href', '/admin'); - }); - - it('renders coming soon message', () => { - render(); - - expect( - screen.getByText('Organization Management Coming Soon') - ).toBeInTheDocument(); - }); - - it('renders feature list', () => { - render(); - - expect( - screen.getByText(/Organization list with search and filtering/) - ).toBeInTheDocument(); - expect( - screen.getByText(/View organization details and members/) - ).toBeInTheDocument(); - expect( - screen.getByText(/Manage organization memberships/) - ).toBeInTheDocument(); - expect( - screen.getByText(/Organization statistics and activity/) - ).toBeInTheDocument(); - expect(screen.getByText(/Bulk operations/)).toBeInTheDocument(); - }); - it('renders with proper container structure', () => { const { container } = render(); @@ -61,4 +19,10 @@ describe('AdminOrganizationsPage', () => { expect(containerDiv).toBeInTheDocument(); expect(containerDiv).toHaveClass('mx-auto', 'px-6', 'py-8'); }); + + it('renders organization management content', () => { + render(); + + expect(screen.getByTestId('organization-management')).toBeInTheDocument(); + }); }); diff --git a/frontend/tests/lib/api/hooks/useAdmin.test.tsx b/frontend/tests/lib/api/hooks/useAdmin.test.tsx index 144a829..e567722 100644 --- a/frontend/tests/lib/api/hooks/useAdmin.test.tsx +++ b/frontend/tests/lib/api/hooks/useAdmin.test.tsx @@ -19,6 +19,7 @@ import { import { adminListUsers, adminListOrganizations, + adminListSessions, adminCreateUser, adminUpdateUser, adminDeleteUser, @@ -34,6 +35,7 @@ jest.mock('@/lib/auth/AuthContext'); const mockAdminListUsers = adminListUsers as jest.MockedFunction; const mockAdminListOrganizations = adminListOrganizations as jest.MockedFunction; +const mockAdminListSessions = adminListSessions as jest.MockedFunction; const mockUseAuth = useAuth as jest.MockedFunction; describe('useAdmin hooks', () => { @@ -74,6 +76,12 @@ describe('useAdmin hooks', () => { }, }; + const mockSessionsData = { + data: { + pagination: { total: 10 }, + }, + }; + it('fetches and calculates stats when user is superuser', async () => { mockUseAuth.mockReturnValue({ user: { is_superuser: true } as any, @@ -85,6 +93,7 @@ describe('useAdmin hooks', () => { mockAdminListUsers.mockResolvedValue(mockUsersData as any); mockAdminListOrganizations.mockResolvedValue(mockOrgsData as any); + mockAdminListSessions.mockResolvedValue(mockSessionsData as any); const { result } = renderHook(() => useAdminStats(), { wrapper }); @@ -94,7 +103,7 @@ describe('useAdmin hooks', () => { totalUsers: 3, activeUsers: 2, totalOrganizations: 5, - totalSessions: 0, + totalSessions: 10, }); expect(mockAdminListUsers).toHaveBeenCalledWith({ @@ -106,6 +115,11 @@ describe('useAdmin hooks', () => { query: { page: 1, limit: 100 }, throwOnError: false, }); + + expect(mockAdminListSessions).toHaveBeenCalledWith({ + query: { page: 1, limit: 100 }, + throwOnError: false, + }); }); it('does not fetch when user is not superuser', async () => {