/** * Copyright (c) Paymium. * * This source code is licensed under the MIT license found in the * LICENSE file in the root of this projects source tree. */ import { render, act, fireEvent } from '@crossed/test'; import { ScrollView } from '../ScrollView'; // Ajustez le chemin si nécessaire import { Text } from 'react-native'; import { inlineStyle } from '@crossed/styled'; // Ajustez si nécessaire test('comporte la logique de layout selon les propriétés passées', async () => { const { getByText, getByTestId, container } = render(
{/* Simule un viewport */} ({ base: { flex: 1 } })) }} > Titre Sticky Contenu du body Footer Sticky
); const scrollableContainer = container.querySelector('div').childNodes[0].childNodes[0]; // Conteneur du scroll act(() => { (scrollableContainer as any).scrollTop = 100; // Fait défiler de 100px fireEvent.scroll(scrollableContainer); // Déclenche l'événement de scroll }); await act(() => new Promise((resolve) => setTimeout(resolve, 300))); // Vérifie que le titre est sticky const titleElement = getByText('Titre Sticky'); expect(titleElement.parentNode).toHaveStyle('position: sticky'); // Vérifie que le footer est sticky const footerElement = getByTestId('stickyFooter'); expect(footerElement).toBeInTheDocument(); // Vérifie que le body est bien rendu expect(getByText('Contenu du body')).toBeInTheDocument(); }); test("n'affiche pas le footer sticky si stickyFooter est faux", async () => { const { queryByTestId, container } = render(
{/* Simule un viewport */} ({ base: { flex: 1 } })) }} > Titre Sticky Contenu du body Footer Sticky
); const scrollableContainer = container.querySelector('div').childNodes[0].childNodes[0]; // Conteneur du scroll act(() => { (scrollableContainer as any).scrollTop = 100; // Fait défiler de 100px fireEvent.scroll(scrollableContainer); // Déclenche l'événement de scroll }); await act(() => new Promise((resolve) => setTimeout(resolve, 300))); // Vérifie que le footer n'est pas sticky const footerElement = queryByTestId('stickyFooter'); expect(footerElement).toBeNull(); // Footer ne doit pas être présent }); test("n'affiche pas le titre sticky si stickyHeader est faux", async () => { const { getByText, container } = render(
{/* Simule un viewport */} ({ base: { flex: 1 } })) }} > Titre Sticky Contenu du body Footer Sticky
); const scrollableContainer = container.querySelector('div').childNodes[0].childNodes[0]; // Conteneur du scroll act(() => { (scrollableContainer as any).scrollTop = 200; // Fait défiler de 200px fireEvent.scroll(scrollableContainer); // Déclenche l'événement de scroll }); await act(() => new Promise((resolve) => setTimeout(resolve, 300))); // Vérifie que le titre n'a pas de style sticky const titleElement = getByText('Titre Sticky'); expect(titleElement.parentNode).not.toHaveStyle('position: sticky'); // Vérifie que le footer est bien sticky const footerElement = container.querySelector('[data-testid="stickyFooter"]'); expect(footerElement).toBeInTheDocument(); });