Files
life-echo/app-expo/tests/core/settings/memoir-reading-settings.test.ts

87 lines
2.4 KiB
TypeScript
Raw Normal View History

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