import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; let identityState = { hydrated: true, name: '' }; vi.mock('react-router-dom', () => ({ useParams: () => ({ token: 'demo-token' }), Navigate: ({ to }: { to: string }) =>
navigate:{to}
, Outlet: () =>
outlet
, })); vi.mock('../context/EventDataContext', () => ({ EventDataProvider: ({ children }: { children: React.ReactNode }) => <>{children}, useEventData: () => ({ event: null }), })); vi.mock('@/guest/context/EventBrandingContext', () => ({ EventBrandingProvider: ({ children }: { children: React.ReactNode }) => <>{children}, })); vi.mock('@/guest/i18n/LocaleContext', () => ({ LocaleProvider: ({ children }: { children: React.ReactNode }) => <>{children}, DEFAULT_LOCALE: 'de', isLocaleCode: () => true, })); vi.mock('@/guest/context/NotificationCenterContext', () => ({ NotificationCenterProvider: ({ children }: { children: React.ReactNode }) => <>{children}, })); vi.mock('../context/GuestIdentityContext', () => ({ GuestIdentityProvider: ({ children }: { children: React.ReactNode }) => <>{children}, useOptionalGuestIdentity: () => identityState, })); import EventLayout from '../layouts/EventLayout'; describe('EventLayout profile gate', () => { it('redirects to setup when profile is missing', () => { identityState = { hydrated: true, name: '' }; render(); expect(screen.getByText('navigate:/setup/demo-token')).toBeInTheDocument(); }); it('renders outlet when profile exists', () => { identityState = { hydrated: true, name: 'Ava' }; render(); expect(screen.getByText('outlet')).toBeInTheDocument(); }); });