feat: add trip preference overrides with precedence resolution
This commit is contained in:
47
backend/libs/trips/src/preference-precedence.spec.ts
Normal file
47
backend/libs/trips/src/preference-precedence.spec.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user