Files
fast-next-template/frontend/tests/app/admin/organizations/[id]/members/page.test.tsx
Felipe Cardoso f99de75dc6 Add tests for Organization Members, handling roles and pagination
- Introduced unit tests for `OrganizationMembersPage` and `OrganizationMembersTable`, covering rendering, role badges, and pagination controls.
- Enhanced E2E tests with updated admin organization navigation and asserted breadcrumbs structure.
- Mocked API routes for members, organizations, and sessions in E2E helpers to support dynamic test scenarios.
2025-11-06 23:24:37 +01:00

73 lines
2.3 KiB
TypeScript

/**
* Tests for Organization Members Page
*/
import React from 'react';
import { render, screen } from '@testing-library/react';
import OrganizationMembersPage from '@/app/admin/organizations/[id]/members/page';
// Mock Next.js navigation
jest.mock('next/navigation', () => ({
useSearchParams: jest.fn(() => new URLSearchParams()),
useRouter: jest.fn(() => ({
push: jest.fn(),
replace: jest.fn(),
})),
}));
// Mock AuthContext
jest.mock('@/lib/auth/AuthContext', () => ({
useAuth: jest.fn(() => ({
user: { id: '1', email: 'admin@test.com', is_superuser: true },
})),
}));
// Mock hooks
jest.mock('@/lib/api/hooks/useAdmin', () => ({
useOrganizationMembers: jest.fn(() => ({
data: { data: [], pagination: { total: 0, page: 1, page_size: 20, total_pages: 1, has_next: false, has_prev: false } },
isLoading: false,
})),
useGetOrganization: jest.fn(() => ({
data: { id: 'org-1', name: 'Test Org', slug: 'test-org', description: '', is_active: true, created_at: '2025-01-01', updated_at: '2025-01-01', member_count: 0 },
isLoading: false,
})),
}));
// Mock child components
jest.mock('@/components/admin/organizations/OrganizationMembersContent', () => ({
OrganizationMembersContent: ({ organizationId }: any) => (
<div data-testid="organization-members-content">Organization Members Content for {organizationId}</div>
),
}));
describe('OrganizationMembersPage', () => {
const mockParams = { id: 'org-123' };
it('renders organization members page', () => {
render(<OrganizationMembersPage params={mockParams} />);
expect(screen.getByTestId('organization-members-content')).toBeInTheDocument();
});
it('passes organization ID to content component', () => {
render(<OrganizationMembersPage params={mockParams} />);
expect(screen.getByText(/org-123/)).toBeInTheDocument();
});
it('renders back button link', () => {
const { container } = render(<OrganizationMembersPage params={mockParams} />);
const backLink = container.querySelector('a[href="/admin/organizations"]');
expect(backLink).toBeInTheDocument();
});
it('renders container with proper spacing', () => {
const { container } = render(<OrganizationMembersPage params={mockParams} />);
const mainContainer = container.querySelector('.container');
expect(mainContainer).toBeInTheDocument();
});
});