From 770cd5165fde880d9fa181f74ee2791c22bee58e Mon Sep 17 00:00:00 2001 From: kikootwo Date: Mon, 2 Feb 2026 10:42:43 -0500 Subject: [PATCH] Mock router and adjust recent requests tests Update admin page tests to mock next/navigation (useRouter, usePathname, useSearchParams) for the RecentRequestsTable component and reset router mocks in beforeEach. Adjust SWR test fixtures to match the component's real API usage by replacing /api/admin/requests/recent with the paginated endpoint (/api/admin/requests?page=1&pageSize=25&search=&status=all&userId=&sortBy=createdAt&sortOrder=desc), include pagination metadata (total, page, pageSize, totalPages) and request.userId, and add a mock for /api/admin/users. This aligns the tests with the component's routing and data fetching behavior. --- tests/app/admin.page.test.tsx | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/tests/app/admin.page.test.tsx b/tests/app/admin.page.test.tsx index 8bb988a..aab7639 100644 --- a/tests/app/admin.page.test.tsx +++ b/tests/app/admin.page.test.tsx @@ -14,6 +14,20 @@ const authenticatedFetcherMock = vi.hoisted(() => vi.fn()); const fetchJSONMock = vi.hoisted(() => vi.fn()); const mutateMock = vi.hoisted(() => vi.fn()); +// Mock next/navigation for RecentRequestsTable component +const mockRouter = vi.hoisted(() => ({ + push: vi.fn(), + replace: vi.fn(), + back: vi.fn(), +})); +const mockSearchParams = vi.hoisted(() => new URLSearchParams()); + +vi.mock('next/navigation', () => ({ + useRouter: () => mockRouter, + usePathname: () => '/admin', + useSearchParams: () => mockSearchParams, +})); + const toastMock = vi.hoisted(() => ({ success: vi.fn(), error: vi.fn(), @@ -52,6 +66,8 @@ describe('AdminDashboard', () => { mutateMock.mockReset(); toastMock.success.mockReset(); toastMock.error.mockReset(); + mockRouter.push.mockReset(); + mockRouter.replace.mockReset(); }); it('renders metrics, downloads, and recent requests', async () => { @@ -81,7 +97,8 @@ describe('AdminDashboard', () => { ], }, }); - swrState.set('/api/admin/requests/recent', { + // RecentRequestsTable fetches from /api/admin/requests with query params + swrState.set('/api/admin/requests?page=1&pageSize=25&search=&status=all&userId=&sortBy=createdAt&sortOrder=desc', { data: { requests: [ { @@ -89,14 +106,20 @@ describe('AdminDashboard', () => { title: 'Recent Book', author: 'Author Two', status: 'pending', + userId: 'user-1', user: 'Sam', createdAt: new Date('2024-01-02T00:00:00Z'), completedAt: null, errorMessage: null, }, ], + total: 1, + page: 1, + pageSize: 25, + totalPages: 1, }, }); + swrState.set('/api/admin/users', { data: { users: [] } }); swrState.set('/api/admin/requests/pending-approval', { data: { requests: [] } }); swrState.set('/api/admin/settings', { data: { ebook: { enabled: false } } }); @@ -120,7 +143,11 @@ describe('AdminDashboard', () => { }, }); swrState.set('/api/admin/downloads/active', { data: { downloads: [] } }); - swrState.set('/api/admin/requests/recent', { data: { requests: [] } }); + // RecentRequestsTable fetches from /api/admin/requests with query params + swrState.set('/api/admin/requests?page=1&pageSize=25&search=&status=all&userId=&sortBy=createdAt&sortOrder=desc', { + data: { requests: [], total: 0, page: 1, pageSize: 25, totalPages: 0 }, + }); + swrState.set('/api/admin/users', { data: { users: [] } }); swrState.set('/api/admin/settings', { data: { ebook: { enabled: false } } }); swrState.set('/api/admin/requests/pending-approval', { data: {