5180 fichiers 38.5 Mo 0 téléchargements 346 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / components / wired / views / extras / WiredExtraRandomView.test.tsx
WiredExtraRandomView.test.tsx 2.9 Ko Télécharger le fichier
import { cleanup, render, screen } from '@testing-library/react';
import { PropsWithChildren } from 'react';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';

const setIntParams = vi.fn();
const setStringParam = vi.fn();
let trigger: { stringData: string; intData: number[] } | null = null;
let save: (() => void) | null = null;
const sliders: Array<{ min: number; max: number; value: number; onChange: (value: number) => void }> = [];

vi.mock('../../../../api', () => ({
    LocalizeText: (key: string, _params?: string[], values?: string[]) => `${key}:${values?.join(',') ?? ''}`,
    WiredFurniType: { STUFF_SELECTION_OPTION_NONE: 0 }
}));
vi.mock('../../../../common', () => ({
    Text: ({ children }: PropsWithChildren) => <span>{children}</span>,
    Slider: (props: { min: number; max: number; value: number; onChange: (value: number) => void }) => {
        sliders.push(props);
        return <i data-testid="slider" />;
    }
}));
vi.mock('../../../../hooks', () => ({
    useWired: () => ({ trigger, setIntParams, setStringParam })
}));
vi.mock('./WiredExtraBaseView', () => ({
    WiredExtraBaseView: (props: PropsWithChildren<{ save: () => void }>) => {
        save = props.save;
        return <div>{props.children}</div>;
    }
}));

const { WiredExtraRandomView } = await import('./WiredExtraRandomView');

/** The last props each slider got (picks has min 1, skips min 0); a memoized slider is not drawn again. */
const lastSliders = () => [1, 0].map((min) => sliders.filter((slider) => slider.min === min).at(-1));

describe('WiredExtraRandomView (AIR random add-on)', () => {
    afterEach(cleanup);

    beforeEach(() => {
        setIntParams.mockClear();
        sliders.length = 0;
    });

    it('draws picks then skips, 1..100 and 0..100, with the value only in the titles', () => {
        trigger = { stringData: '', intData: [4, 9] };
        const { container } = render(<WiredExtraRandomView />);

        const [picks, skips] = lastSliders();
        expect([picks.min, picks.max, picks.value]).toEqual([1, 100, 9]);
        expect([skips.min, skips.max, skips.value]).toEqual([0, 100, 4]);
        expect(screen.getAllByTestId('slider')).toHaveLength(2);
        expect(screen.queryByRole('textbox')).toBeNull();
        expect(container.textContent).toBe('wiredfurni.params.pickamount:9wiredfurni.params.skipactions:4');
    });

    it('saves [skips, picks]', () => {
        trigger = { stringData: '', intData: [2, 3] };
        render(<WiredExtraRandomView />);

        save?.();
        expect(setIntParams).toHaveBeenCalledWith([2, 3]);
        expect(setStringParam).toHaveBeenCalledWith('');
    });

    it('opens an old box on AIR ranges', () => {
        trigger = { stringData: '', intData: [700, 0] };
        render(<WiredExtraRandomView />);

        const [picks, skips] = lastSliders();
        expect(picks.value).toBe(1);
        expect(skips.value).toBe(100);
    });
});
15Sujets
1Dépôts
20Membres
3En 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