47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import {
|
|
onboardingMissionInstanceId,
|
|
selectOnboardingMissionIds,
|
|
} from "../src/missions/lifecycle.js";
|
|
|
|
const userA = "user_abc123";
|
|
|
|
assert.deepEqual(
|
|
selectOnboardingMissionIds({ onboarding: { goal: "I need internship interview prep" } }),
|
|
["interview-to-offer", "personal-brand-opportunity-engine"],
|
|
"default onboarding should start interview-to-offer plus personal brand",
|
|
);
|
|
|
|
assert.deepEqual(
|
|
selectOnboardingMissionIds({ onboarding: { goal: "I want to negotiate my offer and compensation" } }),
|
|
["salary-negotiation-war-room", "personal-brand-opportunity-engine"],
|
|
"salary/offer context should prioritize the negotiation mission",
|
|
);
|
|
|
|
assert.deepEqual(
|
|
selectOnboardingMissionIds({ preferences: { onboarding: { goal: "I need a career transition into product" } } }),
|
|
["career-transition", "personal-brand-opportunity-engine"],
|
|
"preferences onboarding context should be read when selecting missions",
|
|
);
|
|
|
|
assert.deepEqual(
|
|
selectOnboardingMissionIds({ preferences: { onboarding: { goal: "Build LinkedIn visibility and network" } } }),
|
|
["personal-brand-opportunity-engine", "interview-to-offer"],
|
|
"brand/networking context should not duplicate the personal-brand mission",
|
|
);
|
|
|
|
assert.equal(
|
|
onboardingMissionInstanceId(userA, "interview-to-offer"),
|
|
onboardingMissionInstanceId(userA, "interview-to-offer"),
|
|
"onboarding mission instance ids must be deterministic for idempotent retries",
|
|
);
|
|
|
|
assert.notEqual(
|
|
onboardingMissionInstanceId(userA, "interview-to-offer"),
|
|
onboardingMissionInstanceId("user_other", "interview-to-offer"),
|
|
"onboarding mission instance ids must be scoped by user",
|
|
);
|
|
|
|
console.log("mission-lifecycle tests passed");
|
|
process.exit(0);
|