Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/utils/integrations/leads/leadService.test.ts
T

36 lines
1.2 KiB
TypeScript

import { describe, expect, test } from "vitest";
import { canTransitionLeadStatus, LEAD_BULK_MAX_ENTRIES, normalizeBulkLeadIds, type LeadStatus } from "./leadService.server";
describe("lead status workflow", () => {
test.each<[LeadStatus, LeadStatus]>([
["new", "qualified"],
["new", "lost"],
["new", "spam"],
["qualified", "converted"],
["qualified", "lost"],
["qualified", "spam"],
])("allows %s -> %s", (from, to) => {
expect(canTransitionLeadStatus(from, to)).toBe(true);
});
test.each<[LeadStatus, LeadStatus]>([
["converted", "new"],
["converted", "qualified"],
["lost", "qualified"],
["spam", "qualified"],
])("blocks terminal transition %s -> %s", (from, to) => {
expect(canTransitionLeadStatus(from, to)).toBe(false);
});
test("allows idempotent status writes", () => {
expect(canTransitionLeadStatus("converted", "converted")).toBe(true);
});
test("bounds and deduplicates bulk lead IDs", () => {
expect(normalizeBulkLeadIds([" lead-a ", "lead-a", "", "lead-b"])).toEqual(["lead-a", "lead-b"]);
expect(() => normalizeBulkLeadIds(Array.from({ length: LEAD_BULK_MAX_ENTRIES + 1 }, (_, index) => `lead-${index}`))).toThrow(
"foundation.mass_action_exceeds_limit"
);
});
});