carepath-api / scribe /frontend /src /leads.test.ts
tranth3truong's picture
Deploy public Scribe-only CarePath Space
cc678b9
Raw
History Blame Contribute Delete
3.12 kB
import { describe, expect, it, vi } from "vitest";
import { scenarios } from "./demo/scenarios";
import { buildLeadDraft, buildLeadMailto, submitLead } from "./leads";
describe("buildLeadDraft", () => {
it("attaches the configured scenario and transcript only when requested", () => {
const draft = buildLeadDraft({
clinic: "Phòng khám Minh Tâm",
specialty: "Tim mạch",
scenario: scenarios[1],
transcript: "VI: Không dị ứng\nEN: Not allergic",
language: "vi",
includeInterpreterContext: true,
});
expect(draft.scenarioId).toBe("allergy");
expect(draft.interest).toBe("both");
expect(draft.message).toContain("Kiểm tra dị ứng — xác nhận phủ định");
expect(draft.transcript).toContain("Not allergic");
});
it("omits interpreter context by default", () => {
const draft = buildLeadDraft({
clinic: "Phòng khám Minh Tâm",
specialty: "Tim mạch",
scenario: scenarios[1],
transcript: "VI: Không dị ứng\nEN: Not allergic",
language: "vi",
});
expect(draft).toMatchObject({ scenarioId: "", scenarioTitle: "", transcript: "" });
});
it("omits interpreter context from Scribe-only leads", () => {
const draft = buildLeadDraft({
clinic: "Phòng khám Minh Tâm",
specialty: "Tim mạch",
scenario: scenarios[1],
transcript: "VI: Không dị ứng\nEN: Not allergic",
language: "vi",
interest: "scribe",
});
expect(draft).toMatchObject({
interest: "scribe",
scenarioId: "",
scenarioTitle: "",
transcript: "",
});
expect(draft.message).toContain("Ghi chép bệnh án AI");
expect(draft.message).not.toContain(scenarios[1].title.vi);
});
it("includes product interest in the mail subject and body", () => {
const draft = buildLeadDraft({
clinic: "Phòng khám Minh Tâm",
specialty: "Tim mạch",
scenario: scenarios[0],
transcript: "sample",
language: "en",
interest: "interpreter",
});
const mailto = decodeURIComponent(
buildLeadMailto(draft, "pilot@example.com"),
);
expect(mailto).toContain("subject=CarePath pilot (interpreter)");
expect(mailto).toContain("Product interest: interpreter");
});
});
describe("submitLead", () => {
const draft = buildLeadDraft({
clinic: "Phòng khám Minh Tâm",
specialty: "Nội tổng quát",
scenario: scenarios[0],
transcript: "",
language: "vi",
});
it("throws instead of opening an empty mail draft when no channel is configured", async () => {
const openMailto = vi.fn();
await expect(
submitLead(draft, { endpoint: "", email: "", openMailto }),
).rejects.toThrow();
expect(openMailto).not.toHaveBeenCalled();
});
it("opens a prefilled mail draft when an email is configured", async () => {
const openMailto = vi.fn();
const result = await submitLead(draft, {
email: "pilot@example.com",
openMailto,
});
expect(result).toBe("mailto");
expect(openMailto).toHaveBeenCalledOnce();
});
});