import { beforeEach, describe, expect, it } from 'vitest'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { renderApp, mockGuest } from '@/test/utils'; import { server } from '@/mocks/server'; import { setupUninitializedHandlers } from '@/mocks/index'; import { _resetSetupStatusCache } from '@/router'; // Reset module-level setup status cache before each test. beforeEach(() => { _resetSetupStatusCache(); }); describe('InviteCompletePage', () => { it('shows a loading spinner on mount while validating the token', async () => { server.use(...setupUninitializedHandlers); mockGuest(); renderApp('/invite/complete?token=valid-token'); // Loading spinner should appear immediately. expect(await screen.findByTestId('invite-loading')).toBeInTheDocument(); }); it('shows an error state for an expired token', async () => { server.use(...setupUninitializedHandlers); mockGuest(); renderApp('/invite/complete?token=expired-token'); expect(await screen.findByTestId('invite-error')).toBeInTheDocument(); expect(screen.queryByTestId('invite-name-input')).not.toBeInTheDocument(); }); it('shows an error state for a used token', async () => { server.use(...setupUninitializedHandlers); mockGuest(); renderApp('/invite/complete?token=used-token'); expect(await screen.findByTestId('invite-error')).toBeInTheDocument(); }); it('shows an error state when no token is provided', async () => { server.use(...setupUninitializedHandlers); mockGuest(); renderApp('/invite/complete'); expect(await screen.findByTestId('invite-error')).toBeInTheDocument(); }); it('shows the form with a read-only email for a valid token', async () => { server.use(...setupUninitializedHandlers); mockGuest(); renderApp('/invite/complete?token=valid-token'); expect(await screen.findByTestId('invite-name-input')).toBeInTheDocument(); const emailInput = screen.getByTestId('invite-email-input') as HTMLInputElement; expect(emailInput.value).toBe('invited@example.com'); expect(emailInput.disabled).toBe(true); }); it('shows validation errors when submitting an empty form', async () => { server.use(...setupUninitializedHandlers); mockGuest(); const user = userEvent.setup(); renderApp('/invite/complete?token=valid-token'); const submit = await screen.findByTestId('invite-submit-button'); await user.click(submit); expect(await screen.findByTestId('invite-name-error')).toBeInTheDocument(); expect(screen.getByTestId('invite-password-error')).toBeInTheDocument(); }); it('shows success message after a valid submission', async () => { server.use(...setupUninitializedHandlers); mockGuest(); const user = userEvent.setup(); renderApp('/invite/complete?token=valid-token'); await user.type(await screen.findByTestId('invite-name-input'), 'Bob User'); await user.type(screen.getByTestId('invite-password-input'), 'ValidPass1!'); await user.type(screen.getByTestId('invite-confirmPassword-input'), 'ValidPass1!'); await user.click(screen.getByTestId('invite-submit-button')); expect(await screen.findByTestId('invite-success')).toBeInTheDocument(); }); });