fix: harden phase summary open questions

This commit is contained in:
User
2026-07-14 15:09:50 +02:00
parent 18701f020e
commit e228c6f2fd
8 changed files with 110 additions and 12 deletions
@@ -151,6 +151,22 @@ test("validatePhaseSummaryV2: rejects a section missing title or items", () => {
assert.ok(out.errors.some((e) => /sections\[0\].*title/.test(e)));
});
test("validatePhaseSummaryV2: rejects structured open_questions instead of crashing the UI", () => {
const out = validatePhaseSummaryV2({
schema_version: 2,
summary: "s",
open_questions: [
{
label: "pazienti_finale restituisce 0 righe",
question: "Verificare se i filtri sono troppo restrittivi",
},
],
});
assert.equal(out.ok, false);
assert.ok(out.errors.some((error) => /open_questions\[0\]/.test(error)));
});
test("validatePhaseSummaryV2: permissive on extra unknown fields", () => {
const out = validatePhaseSummaryV2({ schema_version: 2, summary: "s", extra_field_from_model: "whatever" });
assert.equal(out.ok, true);
@@ -115,6 +115,17 @@ function validatePhaseSummaryV2(data) {
if (data.tables !== undefined && !isArray(data.tables)) {
errors.push("tables deve essere un array se presente.");
}
if (data.open_questions !== undefined) {
if (!isArray(data.open_questions)) {
errors.push("open_questions deve essere un array di stringhe se presente.");
} else {
data.open_questions.forEach((question, i) => {
if (typeof question !== "string") {
errors.push(`open_questions[${i}] deve essere una stringa.`);
}
});
}
}
return { ok: errors.length === 0, errors };
}