Barazo default frontend barazo.forum
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 90 lines 2.5 kB view raw
1/** 2 * Tests for new topic page. 3 */ 4 5import { describe, it, expect, vi, beforeAll, beforeEach, afterAll, afterEach } from 'vitest' 6import { render, screen, cleanup } from '@testing-library/react' 7import { setupServer } from 'msw/node' 8import { handlers } from '@/mocks/handlers' 9import { createMockOnboardingContext } from '@/test/mock-onboarding' 10import NewTopicPage from './page' 11 12vi.mock('@/context/onboarding-context', () => ({ 13 useOnboardingContext: () => createMockOnboardingContext(), 14})) 15 16const server = setupServer(...handlers) 17 18const mockStorage: Record<string, string> = {} 19 20beforeAll(() => server.listen({ onUnhandledRequest: 'error' })) 21beforeEach(() => { 22 vi.stubGlobal('localStorage', { 23 getItem: vi.fn((key: string) => mockStorage[key] ?? null), 24 setItem: vi.fn((key: string, value: string) => { 25 mockStorage[key] = value 26 }), 27 removeItem: vi.fn((key: string) => { 28 delete mockStorage[key] 29 }), 30 clear: vi.fn(), 31 length: 0, 32 key: vi.fn(), 33 }) 34 mockStorage['accessToken'] = 'test-token' 35}) 36afterEach(() => { 37 cleanup() 38 server.resetHandlers() 39}) 40afterAll(() => server.close()) 41 42// Mock next/navigation 43vi.mock('next/navigation', () => ({ 44 useRouter: () => ({ 45 push: vi.fn(), 46 replace: vi.fn(), 47 back: vi.fn(), 48 }), 49 useSearchParams: () => new URLSearchParams(), 50 redirect: vi.fn(), 51})) 52 53vi.mock('@/hooks/use-auth', () => ({ 54 useAuth: () => ({ 55 user: { 56 did: 'did:plc:user-jay-001', 57 handle: 'jay.bsky.team', 58 displayName: 'Jay', 59 avatarUrl: null, 60 }, 61 isAuthenticated: true, 62 isLoading: false, 63 getAccessToken: () => 'mock-access-token', 64 login: vi.fn(), 65 logout: vi.fn(), 66 setSessionFromCallback: vi.fn(), 67 authFetch: vi.fn(), 68 }), 69})) 70 71describe('NewTopicPage', () => { 72 it('renders create topic heading', () => { 73 render(<NewTopicPage />) 74 expect(screen.getByRole('heading', { name: 'Create new topic' })).toBeInTheDocument() 75 }) 76 77 it('renders topic form', () => { 78 render(<NewTopicPage />) 79 expect(screen.getByRole('textbox', { name: 'Title' })).toBeInTheDocument() 80 expect(screen.getByRole('textbox', { name: 'Content' })).toBeInTheDocument() 81 expect(screen.getByRole('button', { name: 'Create Topic' })).toBeInTheDocument() 82 }) 83 84 it('renders breadcrumbs', () => { 85 render(<NewTopicPage />) 86 const nav = screen.getByRole('navigation', { name: /breadcrumb/i }) 87 expect(nav).toHaveTextContent('Home') 88 expect(nav).toHaveTextContent('New topic') 89 }) 90})