import { DEFAULT_MEMOIR_READING_PREFERENCES, mergeMemoirReadingPreferences, parseMemoirReadingPreferences, } from '@/core/settings/memoir-reading-settings'; describe('parseMemoirReadingPreferences', () => { it('returns defaults for null and empty', () => { expect(parseMemoirReadingPreferences(null)).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); expect(parseMemoirReadingPreferences('')).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); expect(parseMemoirReadingPreferences(' ')).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); }); it('returns defaults for invalid JSON', () => { expect(parseMemoirReadingPreferences('not json')).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); }); it('returns defaults for non-object JSON', () => { expect(parseMemoirReadingPreferences('[]')).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); expect(parseMemoirReadingPreferences('"x"')).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); }); it('fills missing or invalid fields from defaults', () => { expect(parseMemoirReadingPreferences('{}')).toEqual( DEFAULT_MEMOIR_READING_PREFERENCES, ); expect( parseMemoirReadingPreferences( JSON.stringify({ fontSize: 'huge', fontFamily: 'comic', background: 'black', }), ), ).toEqual(DEFAULT_MEMOIR_READING_PREFERENCES); }); it('accepts valid partial object', () => { expect( parseMemoirReadingPreferences( JSON.stringify({ fontSize: 'large' }), ), ).toEqual( mergeMemoirReadingPreferences(DEFAULT_MEMOIR_READING_PREFERENCES, { fontSize: 'large', }), ); expect( parseMemoirReadingPreferences( JSON.stringify({ background: 'sepia', fontFamily: 'sans' }), ), ).toEqual({ ...DEFAULT_MEMOIR_READING_PREFERENCES, background: 'sepia', fontFamily: 'sans', }); }); }); describe('mergeMemoirReadingPreferences', () => { it('applies only defined patch keys', () => { const base = { fontSize: 'small' as const, fontFamily: 'sans' as const, background: 'sepia' as const, }; expect(mergeMemoirReadingPreferences(base, { fontSize: 'large' })).toEqual({ fontSize: 'large', fontFamily: 'sans', background: 'sepia', }); expect(mergeMemoirReadingPreferences(base, {})).toEqual(base); }); });