dashboard.test.tsx73 lines · main
1import { render, screen, waitFor } from '@testing-library/react'
2import type { ReactNode } from 'react'
3import { beforeEach, describe, expect, it, vi } from 'vitest'
4
5import DashboardPage from '@/pages/project/[ref]/settings/dashboard'
6
7const { mockIsPlatform, mockRouter, mockUseFlag } = vi.hoisted(() => ({
8 mockIsPlatform: { value: true },
9 mockRouter: {
10 replace: vi.fn(),
11 },
12 mockUseFlag: vi.fn(),
13}))
14
15vi.mock('common', () => ({
16 useFlag: mockUseFlag,
17}))
18
19vi.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
29vi.mock('next/router', () => ({
30 useRouter: () => mockRouter,
31}))
32
33vi.mock('@/components/layouts/DefaultLayout', () => ({
34 __esModule: true,
35 default: ({ children }: { children: ReactNode }) => <div>{children}</div>,
36}))
37
38vi.mock('@/components/layouts/ProjectSettingsLayout/SettingsLayout', () => ({
39 __esModule: true,
40 default: ({ children }: { children: ReactNode }) => <div>{children}</div>,
41}))
42
43vi.mock('@/components/interfaces/Settings/General/DashboardPreferences', () => ({
44 DashboardPreferences: () => <div>DashboardPreferences</div>,
45}))
46
47describe('/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})