| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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(
- <QueryClientProvider client={qc}>
- <MemoryRouter initialEntries={['/login']}>
- <AuthProvider>
- <Routes>
- <Route path="/login" element={<LoginRoute />} />
- <Route path="/" element={<div>home</div>} />
- </Routes>
- </AuthProvider>
- </MemoryRouter>
- </QueryClientProvider>,
- );
- }
- 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();
- });
- });
|