dashboard.test.tsx73 lines · main
| 1 | import { render, screen, waitFor } from '@testing-library/react' |
| 2 | import type { ReactNode } from 'react' |
| 3 | import { beforeEach, describe, expect, it, vi } from 'vitest' |
| 4 | |
| 5 | import DashboardPage from '@/pages/project/[ref]/settings/dashboard' |
| 6 | |
| 7 | const { mockIsPlatform, mockRouter, mockUseFlag } = vi.hoisted(() => ({ |
| 8 | mockIsPlatform: { value: true }, |
| 9 | mockRouter: { |
| 10 | replace: vi.fn(), |
| 11 | }, |
| 12 | mockUseFlag: vi.fn(), |
| 13 | })) |
| 14 | |
| 15 | vi.mock('common', () => ({ |
| 16 | useFlag: mockUseFlag, |
| 17 | })) |
| 18 | |
| 19 | vi.mock('@/lib/constants', async () => { |
| 20 | const actual = await vi.importActual<Record<string, unknown>>('@/lib/constants') |
| 21 | return { |
| 22 | ...actual, |
| 23 | get IS_PLATFORM() { |
| 24 | return mockIsPlatform.value |
| 25 | }, |
| 26 | } |
| 27 | }) |
| 28 | |
| 29 | vi.mock('next/router', () => ({ |
| 30 | useRouter: () => mockRouter, |
| 31 | })) |
| 32 | |
| 33 | vi.mock('@/components/layouts/DefaultLayout', () => ({ |
| 34 | __esModule: true, |
| 35 | default: ({ children }: { children: ReactNode }) => <div>{children}</div>, |
| 36 | })) |
| 37 | |
| 38 | vi.mock('@/components/layouts/ProjectSettingsLayout/SettingsLayout', () => ({ |
| 39 | __esModule: true, |
| 40 | default: ({ children }: { children: ReactNode }) => <div>{children}</div>, |
| 41 | })) |
| 42 | |
| 43 | vi.mock('@/components/interfaces/Settings/General/DashboardPreferences', () => ({ |
| 44 | DashboardPreferences: () => <div>DashboardPreferences</div>, |
| 45 | })) |
| 46 | |
| 47 | describe('/project/[ref]/settings/dashboard', () => { |
| 48 | beforeEach(() => { |
| 49 | mockIsPlatform.value = true |
| 50 | mockUseFlag.mockReturnValue(true) |
| 51 | mockRouter.replace.mockReset() |
| 52 | }) |
| 53 | |
| 54 | it('renders only query preferences on platform', () => { |
| 55 | render(<DashboardPage dehydratedState={{}} />) |
| 56 | |
| 57 | expect(screen.getByText('Dashboard')).toBeInTheDocument() |
| 58 | expect(screen.getByText('DashboardPreferences')).toBeInTheDocument() |
| 59 | expect(screen.queryByText('Edits')).not.toBeInTheDocument() |
| 60 | }) |
| 61 | |
| 62 | it('redirects self-hosted visits to account preferences', async () => { |
| 63 | mockIsPlatform.value = false |
| 64 | |
| 65 | render(<DashboardPage dehydratedState={{}} />) |
| 66 | |
| 67 | await waitFor(() => { |
| 68 | expect(mockRouter.replace).toHaveBeenCalledWith('/account/me#dashboard') |
| 69 | }) |
| 70 | |
| 71 | expect(screen.queryByText('DashboardPreferences')).not.toBeInTheDocument() |
| 72 | }) |
| 73 | }) |