Files
idlegame/src/state/__tests__/store.test.ts
T

56 lines
1.8 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { getPrefs } from '../prefs';
import { useGameStore } from '../store';
describe('game store nav and prefs', () => {
beforeEach(() => {
const store: Record<string, string> = {};
vi.stubGlobal('localStorage', {
getItem(key: string) {
return store[key] ?? null;
},
setItem(key: string, value: string) {
store[key] = value;
},
});
useGameStore.setState({
activePanel: 'play',
selectedStoryNodeId: null,
prefs: getPrefs(),
});
});
afterEach(() => {
vi.unstubAllGlobals();
});
it('has default activePanel and selectedStoryNodeId', () => {
const state = useGameStore.getState();
expect(state.activePanel).toBe('play');
expect(state.selectedStoryNodeId).toBeNull();
});
it('updates activePanel via setActivePanel', () => {
const state = useGameStore.getState();
state.setActivePanel('story');
expect(useGameStore.getState().activePanel).toBe('story');
});
it('updates selectedStoryNodeId via setSelectedStoryNodeId', () => {
const state = useGameStore.getState();
state.setSelectedStoryNodeId('node-1');
expect(useGameStore.getState().selectedStoryNodeId).toBe('node-1');
});
it('toggles collapsed action groups in prefs', () => {
const state = useGameStore.getState();
expect(state.prefs.collapsedActionGroups['skills:gather']).toBeUndefined();
state.toggleActionGroupCollapsed('skills:gather');
expect(useGameStore.getState().prefs.collapsedActionGroups['skills:gather']).toBe(true);
useGameStore.getState().toggleActionGroupCollapsed('skills:gather');
expect(useGameStore.getState().prefs.collapsedActionGroups['skills:gather']).toBe(false);
});
});