5180 fichiers 38.5 Mo 0 téléchargements 553 vues mis à jour il y a 8 heures ui
nitro-v36-with-renderer-v36 / src / components / catalog / views / page / layout / CatalogLayoutRoomAdsView.test.tsx
CatalogLayoutRoomAdsView.test.tsx 2.8 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(() => ({ sent: [] as unknown[], handlers: new Map<unknown, (event: unknown) => void>() }));

vi.mock('../../../../../api', async (importOriginal) => ({
    ...(await importOriginal<typeof import('../../../../../api')>()),
    LocalizeText: (key: string) => key,
    SendMessageComposer: (composer: unknown) => state.sent.push(composer)
}));

vi.mock('../../../../../hooks', async (importOriginal) => ({
    ...(await importOriginal<typeof import('../../../../../hooks')>()),
    useCatalogUiState: () => ({ setIsVisible: vi.fn() }),
    useMessageEvent: (type: unknown, handler: (event: unknown) => void) => state.handlers.set(type, handler),
    useNavigatorData: () => ({ categories: [{ id: 1, name: 'cat.one', visible: true }] }),
    useRoomPromote: () => ({ promoteInformation: null, isExtended: false, setIsExtended: vi.fn() })
}));

vi.mock('../widgets/CatalogPriceDisplayWidgetView', () => ({
    CatalogPriceDisplayWidgetView: (props: { offer: { priceInCredits: number } }) => <span>{props.offer.priceInCredits} credits</span>
}));

import { PurchaseRoomAdMessageComposer, RoomAdPurchaseInfoEvent } from '@octane/renderer';
import { selectOption } from '../../../../../test-utils/selectOption';
import { CatalogLayoutRoomAdsView } from './CatalogLayoutRoomAdsView';

const page = { pageId: 12, offers: [{ offerId: 34, priceInCredits: 5 }], localization: { getText: () => '', getImage: () => null } } as any;

describe('room ads page (AIR layout_roomads_xml)', () => {
    afterEach(cleanup);

    beforeEach(() => {
        state.sent.length = 0;
        state.handlers.clear();
    });

    it('shows the price and buys the ad with the filled-in fields', () => {
        render(<CatalogLayoutRoomAdsView page={page} hideNavigation={() => undefined} />);

        act(() => state.handlers.get(RoomAdPurchaseInfoEvent)?.({ getParser: () => ({ rooms: [{ roomId: 99, roomName: 'My room' }] }) }));

        expect(screen.getByText('5 credits')).toBeInTheDocument();

        const buy = screen.getByRole('button', { name: 'buy' });

        expect(buy).toBeDisabled();

        fireEvent.change(screen.getByLabelText('roomad.catalog_name'), { target: { value: 'Party' } });
        fireEvent.change(screen.getByLabelText('roomad.catalog_description'), { target: { value: 'Come along' } });
        selectOption(screen.getByRole('combobox', { name: 'roomad.catalog_roomname' }), 'My room');
        fireEvent.click(screen.getByRole('button', { name: 'buy' }));

        const purchase = state.sent.find((composer) => composer instanceof PurchaseRoomAdMessageComposer) as any;

        expect(purchase?.getMessageArray()).toEqual([12, 34, 99, 'Party', false, 'Come along', 1]);
    });
});
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