feat: add trip preference overrides with precedence resolution

This commit is contained in:
Bastian Wagner
2026-08-17 15:38:03 +02:00
parent ee7ec94ea0
commit dedb3fff40
12 changed files with 373 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
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);
});
});