66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
jest.mock('@react-native-async-storage/async-storage', () => {
|
|
const storage = new Map<string, string>();
|
|
|
|
return {
|
|
__esModule: true,
|
|
default: {
|
|
getItem: jest.fn((key: string) => Promise.resolve(storage.get(key) ?? null)),
|
|
removeItem: jest.fn((key: string) => {
|
|
storage.delete(key);
|
|
return Promise.resolve();
|
|
}),
|
|
setItem: jest.fn((key: string, value: string) => {
|
|
storage.set(key, value);
|
|
return Promise.resolve();
|
|
}),
|
|
},
|
|
};
|
|
});
|
|
|
|
import { act } from 'react-test-renderer';
|
|
|
|
import { defaultVolumeSettings } from '../src/settings/gameSettings';
|
|
import { useGameSettingsStore } from '../src/state';
|
|
|
|
describe('useGameSettingsStore', () => {
|
|
beforeEach(() => {
|
|
useGameSettingsStore.setState({
|
|
audioMuted: false,
|
|
autosaveEnabled: true,
|
|
resolutionId: 'iphoneDefault',
|
|
volumes: defaultVolumeSettings,
|
|
});
|
|
});
|
|
|
|
it('captures all settings in persisted state', () => {
|
|
const partialize = useGameSettingsStore.persist.getOptions().partialize;
|
|
|
|
expect(partialize?.(useGameSettingsStore.getState())).toEqual({
|
|
audioMuted: false,
|
|
autosaveEnabled: true,
|
|
resolutionId: 'iphoneDefault',
|
|
volumes: {
|
|
ambience: 70,
|
|
master: 80,
|
|
music: 70,
|
|
sfx: 80,
|
|
speech: 80,
|
|
},
|
|
});
|
|
});
|
|
|
|
it('updates autosave, resolution, and volume settings', () => {
|
|
act(() => {
|
|
useGameSettingsStore.getState().toggleAutosave();
|
|
useGameSettingsStore.getState().toggleAudioMuted();
|
|
useGameSettingsStore.getState().setResolution('phoneLarge');
|
|
useGameSettingsStore.getState().setVolume('music', 105);
|
|
});
|
|
|
|
expect(useGameSettingsStore.getState().autosaveEnabled).toBe(false);
|
|
expect(useGameSettingsStore.getState().audioMuted).toBe(true);
|
|
expect(useGameSettingsStore.getState().resolutionId).toBe('phoneLarge');
|
|
expect(useGameSettingsStore.getState().volumes.music).toBe(100);
|
|
});
|
|
});
|