Files
openhuman/app/src/store/developerModeSlice.test.ts
T

56 lines
2.1 KiB
TypeScript

/**
* Tests for the `developerMode` field added to themeSlice and the
* `selectDeveloperMode` selector.
*
* The field is persisted via the `theme` redux-persist config (localStorage,
* same as other theme preferences). These tests validate the reducer + selector
* in isolation without requiring the full persist machinery.
*/
import { describe, expect, it } from 'vitest';
import themeReducer, { selectDeveloperMode, setDeveloperMode } from './themeSlice';
const initialState = themeReducer(undefined, { type: '@@INIT' });
describe('themeSlice — developerMode field', () => {
it('defaults developerMode to false', () => {
expect(initialState.developerMode).toBe(false);
});
it('enables developerMode via setDeveloperMode(true)', () => {
const state = themeReducer(initialState, setDeveloperMode(true));
expect(state.developerMode).toBe(true);
});
it('disables developerMode via setDeveloperMode(false)', () => {
const withDevMode = themeReducer(initialState, setDeveloperMode(true));
const back = themeReducer(withDevMode, setDeveloperMode(false));
expect(back.developerMode).toBe(false);
});
it('leaves all other theme fields untouched when toggling developerMode', () => {
const { developerMode: _, ...restBefore } = initialState;
const withDevMode = themeReducer(initialState, setDeveloperMode(true));
const { developerMode: _2, ...restAfter } = withDevMode;
expect(restAfter).toEqual(restBefore);
});
});
describe('selectDeveloperMode', () => {
it('returns false from a fresh store', () => {
const result = selectDeveloperMode({ theme: initialState });
expect(result).toBe(false);
});
it('returns true after setDeveloperMode(true)', () => {
const state = themeReducer(initialState, setDeveloperMode(true));
expect(selectDeveloperMode({ theme: state })).toBe(true);
});
it('returns false after toggling back to false', () => {
const enabled = themeReducer(initialState, setDeveloperMode(true));
const disabled = themeReducer(enabled, setDeveloperMode(false));
expect(selectDeveloperMode({ theme: disabled })).toBe(false);
});
});