Files

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);
});
});