5180 fichiers 38.5 Mo 0 téléchargements 208 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / components / toolbar / ToolbarProgressionView.test.tsx
ToolbarProgressionView.test.tsx 3.2 Ko Télécharger le fichier
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { ToolbarProgressionView } from './ToolbarProgressionView';

const mocks = vi.hoisted(() => ({
    config: new Map<string, unknown>(),
    createLinkEvent: vi.fn()
}));

afterEach(() => {
    cleanup();
    vi.clearAllMocks();
    mocks.config.clear();
});

vi.mock('@octane/renderer', () => ({
    CreateLinkEvent: mocks.createLinkEvent
}));

vi.mock('../../api', () => ({
    GetConfigurationValue: (key: string, fallback: unknown) => (mocks.config.has(key) ? mocks.config.get(key) : fallback),
    localizeWithFallback: (_key: string, fallback: string) => fallback
}));

const renderMenu = (counts: { achievements?: number; dailyTasks?: number; rewardTrack?: number } = {}) => {
    const setExpanded = vi.fn();

    render(
        <ToolbarProgressionView
            setExpanded={setExpanded}
            unseenAchievementCount={counts.achievements ?? 0}
            unseenDailyTaskCount={counts.dailyTasks ?? 0}
            unseenRewardTrackCount={counts.rewardTrack ?? 0}
        />
    );

    return setExpanded;
};

describe('ToolbarProgressionView (prog_menu_view)', () => {
    it('lists the official entries in the official order', () => {
        renderMenu();

        expect(screen.getAllByRole('button').map((button) => button.getAttribute('data-name'))).toEqual([
            'dailytasks',
            'quests',
            'achievements',
            'leaderboards',
            'introduction'
        ]);
    });

    it('opens the Introduction reward track and closes the menu', () => {
        const setExpanded = renderMenu();

        fireEvent.click(screen.getByRole('button', { name: 'Introduction' }));

        expect(mocks.createLinkEvent).toHaveBeenCalledWith('reward_track/open/introduction');
        expect(setExpanded).toHaveBeenCalledWith(false);
    });

    it('badges the Introduction entry with the claimable rewards', () => {
        renderMenu({ rewardTrack: 3 });

        expect(screen.getByRole('button', { name: 'Introduction' })).toHaveTextContent('3');
    });

    it('follows toolbar.hide.quests and dailytasks.enabled like the official menu', () => {
        mocks.config.set('toolbar.hide.quests', true);
        mocks.config.set('dailytasks.enabled', false);
        renderMenu();

        expect(screen.queryByRole('button', { name: 'Quests' })).toBeNull();
        expect(screen.queryByRole('button', { name: 'Daily tasks' })).toBeNull();
        expect(screen.getByRole('button', { name: 'Introduction' })).toBeInTheDocument();
    });

    it('is what the toolbar progression icon opens, with the progression badge', () => {
        const source = readFileSync(resolve(process.cwd(), 'src/components/toolbar/ToolbarView.tsx'), 'utf8');

        expect(source).toContain('<ToolbarProgressionView');
        expect(source).toContain('setProgressionExpanded(value => !value)');
        expect(source).toContain('<LayoutItemCountView count={ unseenProgMenuCount }');
        expect(source).not.toContain('icon="progression" onClick={ () => CreateLinkEvent(\'achievements/toggle\') }');
    });
});
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