Files
5chan/src/stores/__tests__/preference-stores.test.ts
T
plebeius 76eb4b537e test: expand honest whole-repo coverage
Adds broad coverage across stores, hooks, and runtime utilities while switching `vitest.config.ts` to an explicit whole-repo include list. This turns the coverage report into a real repo-wide baseline instead of an imported-file subset.
2026-03-08 13:59:38 +08:00

93 lines
3.8 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest';
import { getAllBoardCodes } from '../../constants/board-codes';
describe('preference stores', () => {
beforeEach(() => {
vi.resetModules();
localStorage.clear();
});
it('useAllFeedFilterStore loads and persists the selected filter', async () => {
localStorage.setItem('5chan-all-feed-filter', 'nsfw');
const store = (await import('../use-all-feed-filter-store')).default;
expect(store.getState().filter).toBe('nsfw');
store.getState().setFilter('sfw');
expect(store.getState().filter).toBe('sfw');
expect(localStorage.getItem('5chan-all-feed-filter')).toBe('sfw');
});
it('useBoardsFilterStore restores board preferences and saves updates', async () => {
localStorage.setItem('5chan-boards-use-catalog', 'true');
localStorage.setItem('5chan-boards-filter', 'worksafe');
const store = (await import('../use-boards-filter-store')).default;
expect(store.getState().useCatalogLinks).toBe(true);
expect(store.getState().boardFilter).toBe('worksafe');
store.getState().setUseCatalogLinks(false);
store.getState().setBoardFilter('nsfw');
expect(store.getState().useCatalogLinks).toBe(false);
expect(store.getState().boardFilter).toBe('nsfw');
expect(localStorage.getItem('5chan-boards-use-catalog')).toBe('false');
expect(localStorage.getItem('5chan-boards-filter')).toBe('nsfw');
});
it('useCatalogStyleStore reads existing preferences and updates both settings', async () => {
localStorage.setItem('imageSize', 'Large');
localStorage.setItem('showOPComment', 'false');
const store = (await import('../use-catalog-style-store')).default;
expect(store.getState().imageSize).toBe('Large');
expect(store.getState().showOPComment).toBe(false);
store.getState().setImageSize('Small');
store.getState().setShowOPComment(true);
expect(store.getState().imageSize).toBe('Small');
expect(store.getState().showOPComment).toBe(true);
expect(localStorage.getItem('imageSize')).toBe('Small');
expect(localStorage.getItem('showOPComment')).toBe('true');
});
it('useBoardsBarVisibilityStore loads legacy keys and updates visibility settings', async () => {
const boardCodes = getAllBoardCodes();
localStorage.setItem('5chan-topbar-directories-visible', JSON.stringify([boardCodes[0]]));
localStorage.setItem('5chan-topbar-subscriptions-visible', JSON.stringify(['sub-1']));
const store = (await import('../use-boards-bar-visibility-store')).default;
expect(Array.from(store.getState().visibleDirectories)).toEqual([boardCodes[0]]);
expect(store.getState().showSubscriptionsInBoardsBar).toBe(true);
store.getState().toggleDirectory(boardCodes[1]);
expect(store.getState().visibleDirectories.has(boardCodes[1])).toBe(true);
store.getState().setDirectoryVisibility(boardCodes[0], false);
expect(store.getState().visibleDirectories.has(boardCodes[0])).toBe(false);
store.getState().setShowSubscriptionsInBoardsBar(false);
expect(store.getState().showSubscriptionsInBoardsBar).toBe(false);
expect(localStorage.getItem('5chan-boardsbar-subscriptions-visible')).toBe('false');
});
it('useBoardsBarVisibilityStore reinitializes from current storage keys', async () => {
const boardCodes = getAllBoardCodes();
const store = (await import('../use-boards-bar-visibility-store')).default;
localStorage.setItem('5chan-boardsbar-directories-visible', JSON.stringify([boardCodes[2], boardCodes[3]]));
localStorage.setItem('5chan-boardsbar-subscriptions-visible', JSON.stringify(true));
store.getState().initialize();
expect(Array.from(store.getState().visibleDirectories)).toEqual([boardCodes[2], boardCodes[3]]);
expect(store.getState().showSubscriptionsInBoardsBar).toBe(true);
});
});