Migrate guest v2 achievements and refresh share page
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-05 16:46:15 +01:00
parent fa630e335d
commit 4e0d156065
22 changed files with 1142 additions and 1902 deletions

View File

@@ -1,82 +0,0 @@
import React from 'react';
import { describe, expect, it, vi } from 'vitest';
import { render, screen } from '@testing-library/react';
import { MemoryRouter, Route, Routes } from 'react-router-dom';
import GalleryPage from '../GalleryPage';
import { LocaleProvider } from '../../i18n/LocaleContext';
vi.mock('../../polling/usePollGalleryDelta', () => ({
usePollGalleryDelta: () => ({
photos: [],
loading: false,
newCount: 0,
acknowledgeNew: vi.fn(),
refreshNow: vi.fn(),
}),
}));
vi.mock('../../context/EventBrandingContext', () => ({
useEventBranding: () => ({
branding: {
primaryColor: '#FF5A5F',
secondaryColor: '#FFF8F5',
fontFamily: 'Space Grotesk, sans-serif',
buttons: { radius: 12, style: 'filled', linkColor: '#FF5A5F' },
typography: { heading: 'Space Grotesk, sans-serif', body: 'Space Grotesk, sans-serif' },
},
}),
}));
vi.mock('../../context/EventStatsContext', () => ({
useEventStats: () => ({
likesCount: 12,
guestCount: 5,
onlineGuests: 2,
tasksSolved: 0,
latestPhotoAt: null,
loading: false,
eventKey: 'demo',
slug: 'demo',
}),
}));
vi.mock('../../services/eventApi', () => ({
fetchEvent: vi.fn().mockResolvedValue({ name: 'Demo Event' }),
}));
vi.mock('../../components/ToastHost', () => ({
useToast: () => ({ push: vi.fn() }),
}));
vi.mock('../../components/ShareSheet', () => ({
default: () => null,
}));
vi.mock('../PhotoLightbox', () => ({
default: () => null,
}));
vi.mock('../../components/PullToRefresh', () => ({
default: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
}));
vi.mock('../../components/FiltersBar', () => ({
default: () => <div data-testid="filters-bar" />,
}));
describe('GalleryPage hero CTA', () => {
it('links to the upload page', async () => {
render(
<LocaleProvider defaultLocale="de">
<MemoryRouter initialEntries={['/e/demo/gallery']}>
<Routes>
<Route path="/e/:token/gallery" element={<GalleryPage />} />
</Routes>
</MemoryRouter>
</LocaleProvider>
);
const link = await screen.findByRole('link', { name: /neues foto hochladen/i });
expect(link).toHaveAttribute('href', '/e/demo/upload');
});
});

View File

@@ -1,49 +0,0 @@
import React from 'react';
import { describe, expect, it, vi } from 'vitest';
import { render, screen, waitFor } from '@testing-library/react';
import { MemoryRouter, Route, Routes } from 'react-router-dom';
import HelpArticlePage from '../HelpArticlePage';
import type { HelpArticleDetail } from '../../services/helpApi';
vi.mock('../../i18n/LocaleContext', () => ({
useLocale: () => ({ locale: 'de' }),
}));
vi.mock('../../i18n/useTranslation', () => ({
useTranslation: () => ({
t: (key: string) => key,
}),
}));
vi.mock('../../services/helpApi', () => ({
getHelpArticle: vi.fn(),
}));
const { getHelpArticle } = await import('../../services/helpApi');
describe('HelpArticlePage', () => {
it('renders a single back button after loading', async () => {
const article: HelpArticleDetail = {
slug: 'gallery-and-sharing',
title: 'Galerie & Teilen',
summary: 'Kurzfassung',
body_html: '<p>Inhalt</p>',
};
(getHelpArticle as ReturnType<typeof vi.fn>).mockResolvedValue({ article, servedFromCache: false });
render(
<MemoryRouter initialEntries={['/e/demo/help/gallery-and-sharing']}>
<Routes>
<Route path="/e/:token/help/:slug" element={<HelpArticlePage />} />
</Routes>
</MemoryRouter>,
);
await waitFor(() => {
expect(screen.getByText('Galerie & Teilen')).toBeInTheDocument();
});
expect(screen.getAllByText('help.article.back')).toHaveLength(1);
});
});