import {expect, test, it} from 'vitest'; import {render, fireEvent} from '@testing-library/react'; import {t} from '@/scripts/i18n'; import Viewer, {PICTURES_COUNT} from '@/components/Viewer'; test('custom footer', () => { const {queryByText} = render(footer); expect(queryByText('footer')).toBeInTheDocument(); }); describe('indicator', () => { it('hidden by default', () => { const {queryByText} = render(); expect(queryByText(t('general.skin'))).not.toBeInTheDocument(); }); it('nothing', () => { const {queryByText} = render(); expect(queryByText(t('general.skin'))).not.toBeInTheDocument(); expect(queryByText(t('general.cape'))).not.toBeInTheDocument(); }); it('skin only', () => { const {queryByText} = render( , ); expect(queryByText(t('general.skin'))).toBeInTheDocument(); expect(queryByText(t('general.cape'))).not.toBeInTheDocument(); }); it('cape only', () => { const {queryByText} = render( , ); expect(queryByText(t('general.skin'))).not.toBeInTheDocument(); expect(queryByText(t('general.cape'))).toBeInTheDocument(); }); it('skin and cape', () => { const {queryByText} = render( , ); expect( queryByText(`${t('general.skin')} & ${t('general.cape')}`), ).toBeInTheDocument(); expect(queryByText(t('general.skin'))).not.toBeInTheDocument(); expect(queryByText(t('general.cape'))).not.toBeInTheDocument(); }); }); describe('actions', () => { it('toggle animation', () => { const component = ; const {getByTitle} = render(component); fireEvent.click(getByTitle(`${t('general.switchAnimation')}`)); // Should start running fireEvent.click(getByTitle(`${t('general.switchAnimation')}`)); // Should start flying fireEvent.click(getByTitle(`${t('general.switchAnimation')}`)); // Should be idle fireEvent.click(getByTitle(`${t('general.switchAnimation')}`)); // Should start walking }); it('toggle rotation', () => { const {getByTitle} = render(); fireEvent.click(getByTitle(t('general.rotation'))); // Should stop rotation fireEvent.click(getByTitle(t('general.rotation'))); // Should start rotation }); it('toggle pause', () => { const {getByTitle} = render(); const icon = getByTitle(t('general.pauseAnimation')); fireEvent.click(icon); expect(icon).toHaveClass('fa-play'); }); }); describe('background', () => { it('white', () => { const {getByTitle} = render(); fireEvent.click(getByTitle(t('colors.white'))); }); it('black', () => { const {getByTitle} = render(); fireEvent.click(getByTitle(t('colors.black'))); }); it('white', () => { const {getByTitle} = render(); fireEvent.click(getByTitle(t('colors.gray'))); }); it('previous picture', () => { const {getByTitle} = render(); fireEvent.click(getByTitle(t('colors.prev'))); fireEvent.click(getByTitle(t('colors.prev'))); }); it('next picture', () => { const {getByTitle} = render(); fireEvent.click(getByTitle(t('colors.next'))); fireEvent.click(getByTitle(t('colors.next'))); Array.from({length: PICTURES_COUNT - 1}).forEach(() => { fireEvent.click(getByTitle(t('colors.next'))); }); }); it('default for dark mode', () => { document.body.classList.add('dark-mode'); render(); document.body.classList.remove('dark-mode'); }); });