import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, waitFor } from '@testing-library/react'; const setSearchParamsMock = vi.fn(); const pushGuestToastMock = vi.fn(); vi.mock('react-router-dom', () => ({ useNavigate: () => vi.fn(), useSearchParams: () => [new URLSearchParams('photo=123'), setSearchParamsMock], })); vi.mock('../context/EventDataContext', () => ({ useEventData: () => ({ token: 'demo', event: { name: 'Demo Event' } }), })); vi.mock('../hooks/usePollGalleryDelta', () => ({ usePollGalleryDelta: () => ({ data: { photos: [] } }), })); vi.mock('../hooks/usePollStats', () => ({ usePollStats: () => ({ stats: { onlineGuests: 0, guestCount: 0, likesCount: 0 } }), })); vi.mock('@/guest/i18n/useTranslation', () => ({ useTranslation: () => ({ t: (key: string, options?: unknown, fallback?: string) => { if (typeof fallback === 'string') return fallback; if (typeof options === 'string') return options; return key; }, }), })); vi.mock('@/guest/i18n/LocaleContext', () => ({ useLocale: () => ({ locale: 'de' }), })); vi.mock('../lib/guestTheme', () => ({ useGuestThemeVariant: () => ({ isDark: false }), })); vi.mock('../lib/bento', () => ({ getBentoSurfaceTokens: () => ({ backgroundColor: '#fff', borderColor: '#eee', borderBottomColor: '#ddd', shadow: 'none', }), })); const fetchGalleryMock = vi.fn().mockResolvedValue({ data: [] }); const fetchPhotoMock = vi.fn().mockRejectedValue(Object.assign(new Error('not found'), { status: 404 })); vi.mock('../services/photosApi', () => ({ fetchGallery: (...args: unknown[]) => fetchGalleryMock(...args), fetchPhoto: (...args: unknown[]) => fetchPhotoMock(...args), likePhoto: vi.fn(), unlikePhoto: vi.fn(), createPhotoShareLink: vi.fn(), })); vi.mock('../components/AppShell', () => ({ default: ({ children }: { children: React.ReactNode }) =>