Files
fotospiel-app/resources/js/guest/pages/__tests__/PhotoLightboxZoom.test.tsx
Codex Agent 1a48c9458e Added pinch/zoom/drag for the photo viewer using @use-gesture/react + @react-spring/web, with swipe navigation only
when not zoomed and double‑tap/double‑click to toggle zoom. I also added a guest haptics toggle in settings (sheet
  + /settings) backed by localStorage.
2025-12-27 14:11:13 +01:00

57 lines
1.7 KiB
TypeScript

import React from 'react';
import { fireEvent, render, screen } from '@testing-library/react';
import { beforeAll, vi } from 'vitest';
import { MemoryRouter } from 'react-router-dom';
import PhotoLightbox from '../PhotoLightbox';
import { EventBrandingProvider } from '../../context/EventBrandingContext';
import { LocaleProvider } from '../../i18n/LocaleContext';
import { ToastProvider } from '../../components/ToastHost';
const photo = {
id: 1,
file_path: '/test.jpg',
likes_count: 0,
};
describe('PhotoLightbox zoom gestures', () => {
beforeAll(() => {
if (!window.matchMedia) {
Object.defineProperty(window, 'matchMedia', {
configurable: true,
value: vi.fn().mockReturnValue({
matches: false,
addListener: vi.fn(),
removeListener: vi.fn(),
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
}),
});
}
});
it('toggles zoom state on double click', () => {
render(
<MemoryRouter>
<LocaleProvider>
<EventBrandingProvider>
<ToastProvider>
<PhotoLightbox photos={[photo]} currentIndex={0} token="event-token" />
</ToastProvider>
</EventBrandingProvider>
</LocaleProvider>
</MemoryRouter>
);
const zoomSurface = screen.getByTestId('lightbox-zoom');
const container = zoomSurface.closest('[data-zoomed]');
expect(container).toHaveAttribute('data-zoomed', 'false');
fireEvent.doubleClick(zoomSurface);
expect(container).toHaveAttribute('data-zoomed', 'true');
fireEvent.doubleClick(zoomSurface);
expect(container).toHaveAttribute('data-zoomed', 'false');
});
});