5180 fichiers 38.5 Mo 0 téléchargements 561 vues mis à jour il y a 8 heures ui
nitro-v36-with-renderer-v36 / src / components / catalog / views / page / layout / CatalogLayoutTrophiesView.test.tsx
CatalogLayoutTrophiesView.test.tsx 3.9 Ko Télécharger le fichier
import { act, cleanup, fireEvent, render, screen } from '@testing-library/react';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';

const state = vi.hoisted(() => ({ currentOffer: null as any, purchaseOptions: {} as any, selected: [] as string[] }));

vi.mock('../../../../../hooks', async (importOriginal) => ({
    ...(await importOriginal<typeof import('../../../../../hooks')>()),
    useCatalogData: () => ({ currentOffer: state.currentOffer }),
    useCatalogActions: () => ({
        selectCatalogOffer: (offer: any) => {
            state.selected.push(offer.localizationId);
            state.currentOffer = offer;
        }
    }),
    useCatalogUiState: () => ({
        setPurchaseOptions: (update: (previous: any) => any) => {
            state.purchaseOptions = update(state.purchaseOptions);
        }
    })
}));

vi.mock('../widgets/CatalogPurchaseWidgetView', () => ({ CatalogPurchaseWidgetView: () => <div>purchase</div> }));
vi.mock('../widgets/CatalogTotalPriceWidget', () => ({ CatalogTotalPriceWidget: () => <div>price</div> }));
vi.mock('../../../../../common/layout/LayoutFurniImageView', () => ({
    LayoutFurniImageView: (props: { productClassId: number }) => <div data-testid="preview">{props.productClassId}</div>
}));

import { CatalogLayoutTrophiesView } from './CatalogLayoutTrophiesView';

const offer = (localizationId: string, classId: number) => ({ localizationId, product: { productType: 's', productClassId: classId, extraParam: '' } });
const offers = [
    offer('a0 prizetrophy_g', 1),
    offer('a0 prizetrophy_s', 2),
    offer('a0 prizetrophy_b', 3),
    offer('a0 prizetrophy2_g', 4),
    offer('a0 prizetrophy2_b', 6)
];
const page = { offers, localization: { getText: (index: number) => ['Pick a trophy', 'Your inscription'][index] ?? '', getImage: () => null } } as any;

describe('trophies page (AIR layout_trophies_xml)', () => {
    afterEach(cleanup);

    beforeEach(() => {
        state.currentOffer = null;
        state.purchaseOptions = {};
        state.selected.length = 0;
    });

    it('starts on the first model in gold, steps models and picks the metal', () => {
        const { rerender } = render(<CatalogLayoutTrophiesView page={page} hideNavigation={() => undefined} />);
        const refresh = () => rerender(<CatalogLayoutTrophiesView page={page} hideNavigation={() => undefined} />);

        expect(state.selected.at(-1)).toBe('a0 prizetrophy_g');
        expect(screen.getByText('Your inscription')).toBeInTheDocument();

        fireEvent.click(screen.getByRole('button', { name: 'Next' }));
        refresh();
        expect(state.selected.at(-1)).toBe('a0 prizetrophy2_g');

        fireEvent.click(screen.getByRole('radio', { name: 's' }));
        refresh();
        expect(state.selected.at(-1)).toBe('a0 prizetrophy2_g');

        fireEvent.click(screen.getByRole('radio', { name: 'b' }));
        refresh();
        expect(state.selected.at(-1)).toBe('a0 prizetrophy2_b');

        fireEvent.click(screen.getByRole('button', { name: 'Next' }));
        refresh();
        expect(state.selected.at(-1)).toBe('a0 prizetrophy_b');
        expect(screen.getByTestId('preview')).toHaveTextContent('3');
    });

    it('sends the inscription with the purchase', () => {
        const { rerender } = render(<CatalogLayoutTrophiesView page={page} hideNavigation={() => undefined} />);

        rerender(<CatalogLayoutTrophiesView page={page} hideNavigation={() => undefined} />);
        act(() => {
            fireEvent.change(screen.getByRole('textbox'), { target: { value: 'Winner 2026' } });
        });

        expect(state.purchaseOptions.extraData).toBe('Winner 2026');
    });

    it('opens on the trophy the catalog was opened for', () => {
        state.currentOffer = offers[4];

        render(<CatalogLayoutTrophiesView page={page} hideNavigation={() => undefined} />);

        expect(state.selected.at(-1)).toBe('a0 prizetrophy2_b');
    });
});
15Sujets
1Dépôts
20Membres
4En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser