mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
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.
93 lines
3.8 KiB
TypeScript
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);
|
|
});
|
|
});
|