Integrate local business workflow and SaaS redesign

This commit is contained in:
2026-06-12 21:08:35 +02:00
parent f00c5a3193
commit 21c7e4c9a4
88 changed files with 2683 additions and 849 deletions

View File

@@ -84,6 +84,8 @@ test("pageSpeed module exports mutation contracts", () => {
assert.equal(existsSync(pageSpeedPath), true, "pageSpeed.ts should be present");
const exports = getExportedConstNames(sourceFile);
const required = [
"getLeadAuditStartStates",
"requestLeadAudit",
"queueLeadPageSpeedAudit",
"startPageSpeedAuditRun",
"persistPageSpeedResult",
@@ -110,12 +112,40 @@ test("pageSpeed module uses internalMutation for queue/start/persist/finish", ()
}
});
test("requestLeadAudit is a public authenticated mutation that queues PageSpeed only after user intent", () => {
const source = extractExportSource("requestLeadAudit");
assert.equal(
hasPattern(pageSpeedSource, /export const requestLeadAudit = mutation\s*\(/),
true,
"requestLeadAudit should be a public mutation for UI-triggered audit starts.",
);
assert.match(source, /requireOperator\(ctx\)/);
assert.match(source, /queueLeadPageSpeedAuditForLead/);
assert.match(source, /triggeredBy:\s*"manual"/);
assert.match(source, /Audit-Start wurde manuell angefordert\./);
});
test("getLeadAuditStartStates exposes active audit run status for lead review buttons", () => {
const source = extractExportSource("getLeadAuditStartStates");
assert.equal(
hasPattern(pageSpeedSource, /export const getLeadAuditStartStates = query\s*\(/),
true,
"getLeadAuditStartStates should be a public query.",
);
assert.match(source, /requireOperator\(ctx\)/);
assert.match(source, /leadIds:\s*v\.array\(v\.id\("leads"\)\)/);
assert.match(pageSpeedSource, /by_type_and_status_and_leadId/);
assert.match(source, /canStart/);
});
test("queueLeadPageSpeedAudit dedupes per lead and schedules pagespeed action", () => {
const queueSource = extractExportSource("queueLeadPageSpeedAudit");
const queueSource = pageSpeedSource;
assert.equal(
hasPattern(
queueSource,
/withIndex\(\s*"by_type_and_status_and_leadId"[\s\S]*?eq\("type",\s*"audit"\)[\s\S]*?eq\("status",\s*"pending"\)[\s\S]*?eq\("leadId",\s*args\.leadId\)/,
/withIndex\(\s*"by_type_and_status_and_leadId"[\s\S]*?eq\("type",\s*"audit"\)[\s\S]*?eq\("status",\s*"pending"\)[\s\S]*?eq\("leadId",\s*(?:args\.)?leadId\)/,
),
true,
"Queue should dedupe pending audit runs by type+status+leadId.",
@@ -123,7 +153,7 @@ test("queueLeadPageSpeedAudit dedupes per lead and schedules pagespeed action",
assert.equal(
hasPattern(
queueSource,
/withIndex\(\s*"by_type_and_status_and_leadId"[\s\S]*?eq\("type",\s*"audit"\)[\s\S]*?eq\("status",\s*"running"\)[\s\S]*?eq\("leadId",\s*args\.leadId\)/,
/withIndex\(\s*"by_type_and_status_and_leadId"[\s\S]*?eq\("type",\s*"audit"\)[\s\S]*?eq\("status",\s*"running"\)[\s\S]*?eq\("leadId",\s*(?:args\.)?leadId\)/,
),
true,
"Queue should dedupe running audit runs by type+status+leadId.",