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

vi.mock('../../../api', () => ({
    LocalizeText: (key: string) => key,
    GetRoomSession: () => ({ roomId: 77 })
}));

import { WiredVariablePicker } from './WiredVariablePicker';
import { buildWiredVariablePickerEntries, IWiredVariablePickerEntry } from './WiredVariablePickerData';
import { clearWiredVariablePickerHistory, finalizeWiredVariablePickers } from './WiredVariablePickerHistory';

const variable = (itemId: number, name: string, variableType = 0, hasValue = true) => ({ itemId, name, variableType, availability: 0, hasValue, isReadOnly: false });
const entries = buildWiredVariablePickerEntries('context', 'change-reference', [
    variable(1, 'event.transaction_complete.deposit.furni_count', 1),
    variable(2, 'event.transaction_complete.deposit.credits', 1),
    variable(3, 'event.variable_update.old_value', 1),
    variable(4, 'my_score', 0),
    variable(5, 'flag', 0, false)
]);
const rowNames = () => screen.queryAllByRole('option').map((row) => row.textContent);
const row = (name: string) => screen.getAllByRole('option').find((option) => option.textContent === name);
const hover = (name: string) => fireEvent.mouseEnter(row(name));
const open = () => fireEvent.click(screen.getByRole('textbox'));
const tab = (key: string) => fireEvent.click(screen.getByRole('button', { name: `wiredfurni.variable_picker.tab.${key}` }));

describe('Wired variable picker', () => {
    beforeEach(() => clearWiredVariablePickerHistory());
    afterEach(cleanup);

    it('opens on the user-created tab without a selection and on the internal tab for an internal variable', () => {
        render(<WiredVariablePicker entries={entries} selectedToken="" onSelect={vi.fn()} />);

        open();
        expect(screen.getByRole('button', { name: 'wiredfurni.variable_picker.tab.user_created' })).toHaveAttribute('aria-pressed', 'true');
        expect(rowNames()).toEqual(['my_score', 'flag']);
        cleanup();

        render(<WiredVariablePicker entries={entries} selectedToken={entries[2].token} onSelect={vi.fn()} />);
        open();
        expect(screen.getByRole('button', { name: 'wiredfurni.variable_picker.tab.internal' })).toHaveAttribute('aria-pressed', 'true');
    });

    it('nests the tree to any depth and selects a leaf', () => {
        const onSelect = vi.fn();

        render(<WiredVariablePicker entries={entries} selectedToken="" onSelect={onSelect} />);
        open();
        tab('all');
        expect(rowNames().slice(0, 3)).toEqual(['event', 'my_score', 'flag']);
        hover('event');
        expect(rowNames().slice(-2)).toEqual(['transaction_complete', 'variable_update']);
        hover('transaction_complete');
        hover('deposit');
        expect(rowNames().slice(-2)).toEqual(['furni_count', 'credits']);
        // A branch without a variable is not selectable.
        fireEvent.click(row('deposit'));
        expect(onSelect).not.toHaveBeenCalled();
        fireEvent.click(row('credits'));
        expect(onSelect).toHaveBeenCalledWith(entries[1]);
        expect(screen.queryAllByRole('option')).toHaveLength(0);
    });

    it('greys variables the filter rejects and does not select them', () => {
        const onSelect = vi.fn();

        render(<WiredVariablePicker entries={entries} selectedToken="" onSelect={onSelect} />);
        open();
        expect(row('flag')).toHaveAttribute('title', 'wiredfurni.variable_picker.tooltip_disabled');
        fireEvent.click(row('flag'));
        expect(onSelect).not.toHaveBeenCalled();
    });

    it('searches with every word and shows single matches by full name', () => {
        render(<WiredVariablePicker entries={entries} selectedToken="" onSelect={vi.fn()} />);
        open();
        fireEvent.change(screen.getByRole('textbox'), { target: { value: 'old event' } });
        expect(screen.getByRole('button', { name: 'wiredfurni.variable_picker.tab.search' })).toHaveAttribute('aria-pressed', 'true');
        expect(rowNames()).toEqual(['event.variable_update.old_value']);
        fireEvent.change(screen.getByRole('textbox'), { target: { value: 'deposit' } });
        // The box variables and AIR's built-in @event.transaction_complete.deposit.* parts.
        expect(rowNames()).toEqual(['event', '@event']);
    });

    it('takes the first search result on Enter and an exact name on Enter', () => {
        const onSelect = vi.fn();

        render(<WiredVariablePicker entries={entries} selectedToken="" onSelect={onSelect} />);
        open();
        fireEvent.change(screen.getByRole('textbox'), { target: { value: 'old_value' } });
        fireEvent.keyDown(screen.getByRole('textbox'), { key: 'Enter' });
        expect(onSelect).toHaveBeenLastCalledWith(entries[2]);
        open();
        fireEvent.change(screen.getByRole('textbox'), { target: { value: 'MY_SCORE' } });
        fireEvent.keyDown(screen.getByRole('textbox'), { key: 'Enter' });
        expect(onSelect).toHaveBeenLastCalledWith(entries[3]);
    });

    it('hides invisible variables unless they are the stored selection', () => {
        const hidden: IWiredVariablePickerEntry[] = [...entries.slice(3, 5), { ...entries[3], id: 'custom:9', token: 'custom:9', label: 'secret', displayLabel: 'secret', isInvisible: true }];

        render(<WiredVariablePicker entries={hidden} selectedToken="" onSelect={vi.fn()} />);
        open();
        expect(rowNames()).toEqual(['my_score', 'flag']);
        cleanup();

        render(<WiredVariablePicker entries={hidden} selectedToken="custom:9" onSelect={vi.fn()} />);
        open();
        expect(rowNames()).toEqual(['my_score', 'flag', 'secret']);
    });

    it('records a selection in the recent tab only once the form is saved', () => {
        render(<WiredVariablePicker entries={entries} selectedToken={entries[3].token} onSelect={vi.fn()} />);
        open();
        tab('recent');
        expect(rowNames()).toEqual([]);
        finalizeWiredVariablePickers();
        tab('all');
        tab('recent');
        expect(rowNames()).toEqual(['my_score']);
    });
});
15Sujets
1Dépôts
20Membres
2En 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