48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import { resolveEffectivePreference } from './preference-precedence';
|
|
import type { UserPreferenceFields } from '../../users/src';
|
|
|
|
describe('resolveEffectivePreference', () => {
|
|
const appDefault: UserPreferenceFields = {
|
|
preferredPace: 'moderate',
|
|
preferredBudgetLevel: 'medium',
|
|
maxWalkingDistanceKm: 5,
|
|
preferredStartTime: null,
|
|
childFriendlyPreferred: false,
|
|
interests: [],
|
|
notes: null,
|
|
};
|
|
|
|
it('falls back to the application default when nothing is set', () => {
|
|
expect(
|
|
resolveEffectivePreference(undefined, undefined, appDefault),
|
|
).toEqual(appDefault);
|
|
});
|
|
|
|
it('prefers the persistent user preference over the application default', () => {
|
|
const userPref = { ...appDefault, preferredPace: 'relaxed' };
|
|
expect(
|
|
resolveEffectivePreference(undefined, userPref, appDefault).preferredPace,
|
|
).toBe('relaxed');
|
|
});
|
|
|
|
it('prefers a trip-specific override over the persistent user preference', () => {
|
|
const userPref = { ...appDefault, preferredPace: 'relaxed' };
|
|
const override = { preferredPace: 'fast' };
|
|
expect(
|
|
resolveEffectivePreference(override, userPref, appDefault).preferredPace,
|
|
).toBe('fast');
|
|
});
|
|
|
|
it('merges field-by-field rather than replacing the whole object', () => {
|
|
const userPref = {
|
|
...appDefault,
|
|
preferredPace: 'relaxed',
|
|
childFriendlyPreferred: true,
|
|
};
|
|
const override = { preferredPace: 'fast' };
|
|
const result = resolveEffectivePreference(override, userPref, appDefault);
|
|
expect(result.preferredPace).toBe('fast');
|
|
expect(result.childFriendlyPreferred).toBe(true);
|
|
});
|
|
});
|