5180 fichiers 38.5 Mo 0 téléchargements 221 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / help / useGuardianChatReview.test.ts
useGuardianChatReview.test.ts 3 Ko Télécharger le fichier
import { describe, expect, it, vi } from 'vitest';

vi.mock('../../api', async () => {
    const review = await import('../../api/guide-tool/GuardianChatReview');
    const state = await import('../../api/guide-tool/GuideSessionState');

    return { ...review, ...state, SendMessageComposer: vi.fn() };
});
vi.mock('../events', () => ({ useMessageEvent: vi.fn() }));
vi.mock('../../api/utils/LocalizeText', () => ({ LocalizeText: (key: string) => key }));

import { GuideSessionState } from '../../api/guide-tool/GuideSessionState';
import { GUARDIAN_NO_VOTE, guardianChatReviewReducer, initialGuardianChatReviewState } from './useGuardianChatReview';

describe('guardianChatReviewReducer', () => {
    it('walks the AIR states from the offer to the verdict', () => {
        let state = guardianChatReviewReducer(initialGuardianChatReviewState, { type: 'offered', acceptanceTimeout: 90 });

        expect(state.state).toBe(GuideSessionState.GUARDIAN_CHAT_REVIEW_ACCEPT);
        expect(state.countdownSeconds).toBe(90);

        state = guardianChatReviewReducer(state, { type: 'accepted' });
        expect(state.state).toBe(GuideSessionState.GUARDIAN_CHAT_REVIEW_WAIT_FOR_VOTERS);
        expect(state.countdownSeconds).toBe(-1);

        state = guardianChatReviewReducer(state, { type: 'started', votingTimeout: 117, chatRecord: '2026 1 2 3 4 5;\runused;0;hey' });
        expect(state.state).toBe(GuideSessionState.GUARDIAN_CHAT_REVIEW_VOTE);
        expect(state.countdownSeconds).toBe(117);
        expect(state.record?.lines).toEqual([{ userIndex: 0, messages: ['hey'] }]);

        state = guardianChatReviewReducer(state, { type: 'voted', vote: 1 });
        expect(state.state).toBe(GuideSessionState.GUARDIAN_CHAT_REVIEW_WAIT_FOR_RESULTS);
        expect(state.ownVote).toBe(1);

        state = guardianChatReviewReducer(state, { type: 'status', statuses: [0, 2, 5] });
        expect(state.statuses).toEqual([0, 2, 5]);

        state = guardianChatReviewReducer(state, { type: 'results', winningVote: 1, ownVote: 1, statuses: [2, 2] });
        expect(state.state).toBe(GuideSessionState.GUARDIAN_CHAT_REVIEW_RESULTS);
        expect(state.winningVote).toBe(1);
        expect(state.statuses).toEqual([2, 2]);

        state = guardianChatReviewReducer(state, { type: 'closed' });
        expect(state.state).toBeNull();
        expect(state.ownVote).toBe(GUARDIAN_NO_VOTE);
    });

    it('ignores the voting status outside the "waiting for results" window, as AIR does', () => {
        const voting = guardianChatReviewReducer(initialGuardianChatReviewState, { type: 'started', votingTimeout: 30, chatRecord: '' });

        expect(guardianChatReviewReducer(voting, { type: 'status', statuses: [1] })).toBe(voting);
    });

    it('restarts the countdown on every window', () => {
        const offered = guardianChatReviewReducer(initialGuardianChatReviewState, { type: 'offered', acceptanceTimeout: 90 });
        const again = guardianChatReviewReducer(offered, { type: 'offered', acceptanceTimeout: 90 });

        expect(again.countdownId).not.toBe(offered.countdownId);
    });
});
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