import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; const fixtures = vi.hoisted(() => ({ event: { id: 1, name: 'Demo Event', slug: 'demo-event', public_url: 'https://example.test/guest/demo-event', }, invites: [ { id: 10, url: 'https://example.test/guest/demo-event', qr_code_data_url: 'data:image/png;base64,abc', is_active: true, layouts: [ { id: 'layout-1', panel_mode: 'single', orientation: 'portrait', }, ], }, ], })); vi.mock('react-router-dom', () => ({ useNavigate: () => vi.fn(), useParams: () => ({ slug: fixtures.event.slug }), })); vi.mock('react-i18next', () => ({ useTranslation: () => ({ t: (key: string, fallback?: string | Record) => { if (typeof fallback === 'string') { return fallback; } if (fallback && typeof fallback === 'object' && typeof fallback.defaultValue === 'string') { return fallback.defaultValue; } return key; }, }), })); vi.mock('../hooks/useBackNavigation', () => ({ useBackNavigation: () => undefined, })); vi.mock('../../api', () => ({ getEvent: vi.fn().mockResolvedValue(fixtures.event), getEventQrInvites: vi.fn().mockResolvedValue(fixtures.invites), createQrInvite: vi.fn(), })); vi.mock('../../auth/tokens', () => ({ isAuthError: () => false, })); vi.mock('../../lib/apiError', () => ({ getApiErrorMessage: () => 'error', })); vi.mock('./qr/utils', () => ({ resolveLayoutForFormat: () => 'layout-1', })); vi.mock('../components/MobileShell', () => ({ MobileShell: ({ children }: { children: React.ReactNode }) =>
{children}
, HeaderActionButton: ({ children }: { children: React.ReactNode }) =>
{children}
, })); vi.mock('../components/Primitives', () => ({ MobileCard: ({ children }: { children: React.ReactNode }) =>
{children}
, CTAButton: ({ label, onPress, disabled }: { label: string; onPress?: () => void; disabled?: boolean }) => ( ), PillBadge: ({ children }: { children: React.ReactNode }) =>
{children}
, })); vi.mock('../components/FormControls', () => ({ MobileInput: (props: React.InputHTMLAttributes) => , MobileTextArea: (props: React.TextareaHTMLAttributes) =>