56 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|