// @vitest-environment nuxt import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { useVideoCollections } from '../use-video-collections'; import { useSnackbar } from '../use-snackbar'; describe('useVideoCollections', () => { beforeEach(() => { useNuxtApp().payload.state = {}; vi.useFakeTimers(); useSnackbar().resetSnackbar(); }); afterEach(() => { vi.useRealTimers(); }); it('добавляет в «смотреть позже» и показывает снекбар с кнопкой отмены', () => { const { watchLater, isWatchLater, toggleWatchLater } = useVideoCollections(); const { snackbarText, snackbarIcon, snackbarHighlight, snackbarActionText } = useSnackbar(); toggleWatchLater('guid-1', 'Video title'); expect(watchLater.value).toEqual([ 'guid-1' ]); expect(isWatchLater('guid-1')).toBe(true); expect(snackbarText.value).toBe('added'); expect(snackbarIcon.value).toBe('clock'); expect(snackbarHighlight.value).toBe('Video title'); expect(snackbarActionText.value).toBe('undo'); }); it('удаление показывает снекбар «removed»', () => { const { watchLater, toggleWatchLater } = useVideoCollections(); const { snackbarText } = useSnackbar(); toggleWatchLater('guid-1', 'Video title'); toggleWatchLater('guid-1', 'Video title'); expect(watchLater.value).toEqual([]); expect(snackbarText.value).toBe('removed'); }); it('избранное показывает снекбар с иконкой сердца', () => { const { favorites, isFavorite, toggleFavorite } = useVideoCollections(); const { snackbarIcon, snackbarText } = useSnackbar(); toggleFavorite('guid-2', 'Another title'); expect(favorites.value).toEqual([ 'guid-2' ]); expect(isFavorite('guid-2')).toBe(true); expect(snackbarIcon.value).toBe('heart'); expect(snackbarText.value).toBe('added'); }); it('отмена возвращает список и не показывает новый снекбар', () => { const { favorites, toggleFavorite } = useVideoCollections(); const { runSnackbarAction, snackbarText } = useSnackbar(); toggleFavorite('guid-2', 'Another title'); runSnackbarAction(); expect(favorites.value).toEqual([]); expect(snackbarText.value).toBe(''); }); it('отмена удаления возвращает ролик обратно', () => { const { watchLater, toggleWatchLater } = useVideoCollections(); const { runSnackbarAction } = useSnackbar(); toggleWatchLater('guid-3', 'Third title'); toggleWatchLater('guid-3', 'Third title'); runSnackbarAction(); expect(watchLater.value).toEqual([ 'guid-3' ]); }); });