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 / hooks / rooms / widgets / useUserChooserState.test.ts
useUserChooserState.test.ts 3 Ko Télécharger le fichier
/* @vitest-environment jsdom */
import { act, cleanup, renderHook } from '@testing-library/react';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { RoomObjectItem } from '../../../api/room/widgets/RoomObjectItem';

const state = vi.hoisted(() => ({
    allowed: true,
    added: null as (event: { id: number; category: number }) => void,
    removed: null as (event: { id: number; category: number }) => void,
    users: new Map<number, { roomIndex: number; type: number; name: string }>()
}));

vi.mock('@octane/renderer', () => ({
    RoomObjectCategory: { UNIT: 100 },
    GetRoomEngine: () => ({ getRoomObjects: () => [...state.users.keys()].map((id) => ({ id })) })
}));
vi.mock('../../../api', () => ({
    RoomObjectItem,
    CanOpenUserChooser: () => state.allowed,
    GetRoomSession: () => ({ roomId: 1, userDataManager: { getUserDataByIndex: (id: number) => state.users.get(id) } })
}));
vi.mock('../engine', () => ({
    useUserAddedEvent: (_enabled: boolean, callback: (event: { id: number; category: number }) => void) => { state.added = callback; },
    useUserRemovedEvent: (_enabled: boolean, callback: (event: { id: number; category: number }) => void) => { state.removed = callback; }
}));

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

afterEach(cleanup);

beforeEach(() =>
{
    state.allowed = true;
    state.users.clear();
});

describe('useUserChooserState (AIR UserChooserWidgetHandler)', () =>
{
    it('lists every room unit with user data, room index zero included, sorted by name', () =>
    {
        [ [ 1, 'dennis' ], [ 2, 'Rover' ], [ 3, 'Oldbot' ], [ 4, 'Robo' ] ].forEach(([ type, name ], roomIndex) =>
            state.users.set(roomIndex, { roomIndex, type: type as number, name: name as string }));

        const { result } = renderHook(useUserChooserState);

        act(() => result.current.populateChooser());

        expect(result.current.items.map((item) => [ item.id, item.name, item.type ])).toEqual([
            [ 0, 'dennis', '1' ],
            [ 2, 'Oldbot', '3' ],
            [ 3, 'Robo', '4' ],
            [ 1, 'Rover', '2' ]
        ]);
    });

    it('adds and removes pets and bots while open', () =>
    {
        const { result } = renderHook(useUserChooserState);

        act(() => result.current.populateChooser());

        state.users.set(5, { roomIndex: 5, type: 2, name: 'Rex' });
        act(() => state.added({ id: 5, category: 100 }));
        expect(result.current.items.map((item) => item.type)).toEqual([ '2' ]);

        act(() => state.removed({ id: 5, category: 100 }));
        expect(result.current.items).toEqual([]);
    });

    it('stays closed while the room disables the chooser for this visitor', () =>
    {
        state.allowed = false;
        state.users.set(0, { roomIndex: 0, type: 1, name: 'dennis' });

        const { result } = renderHook(useUserChooserState);

        act(() => result.current.populateChooser());

        expect(result.current.items).toBeNull();
    });
});
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