import { describe, it, expect, beforeEach, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import { MemoryRouter, Routes, Route } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { LoginRoute } from '@/routes/login'; import { AuthProvider } from '@/lib/auth-context'; function renderLogin() { const qc = new QueryClient({ defaultOptions: { queries: { retry: false } }, }); return render( } /> home} /> , ); } describe('LoginRoute', () => { beforeEach(() => { vi.spyOn(globalThis, 'fetch').mockImplementation(async (url) => { if (String(url).includes('/v1/auth/refresh')) { return new Response(JSON.stringify({ error: 'no_session' }), { status: 401, headers: { 'content-type': 'application/json' }, }); } return new Response('not stubbed', { status: 501 }); }); }); it('renders the email + password form', async () => { renderLogin(); expect(await screen.findByLabelText(/email/i)).toBeInTheDocument(); expect(screen.getByLabelText(/password/i)).toBeInTheDocument(); expect(screen.getByRole('button', { name: /sign in/i })).toBeInTheDocument(); }); it('shows the broad-announce brand', async () => { renderLogin(); expect(await screen.findByText('broad-announce')).toBeInTheDocument(); }); });