fix(qa): fail suite on summary scenario failures

This commit is contained in:
Vincent Koc
2026-06-07 02:49:02 +02:00
parent 154ee9fd23
commit 6d2566682a
4 changed files with 22 additions and 14 deletions
+1 -7
View File
@@ -503,13 +503,7 @@ describe("qa cli runtime", () => {
watchUrl: "http://127.0.0.1:43124",
reportPath: suiteReportPath,
summaryPath: suiteSummaryPath,
scenarios: [
{
name: "channel chat baseline",
status: "fail",
steps: [],
},
],
scenarios: [],
});
try {
+1 -1
View File
@@ -706,7 +706,7 @@ export async function runQaSuiteCommand(opts: {
process.stdout.write(`QA suite watch: ${result.watchUrl}\n`);
process.stdout.write(`QA suite report: ${result.reportPath}\n`);
process.stdout.write(`QA suite summary: ${result.summaryPath}\n`);
const failedScenarioCount = readQaSuiteFailedScenarioCountFromSummary(result);
const failedScenarioCount = await readQaFailedScenarioCountFromSummary(result.summaryPath);
if (!allowFailures && failedScenarioCount !== null && failedScenarioCount > 0) {
process.exitCode = 1;
}
+8 -1
View File
@@ -12,7 +12,14 @@ describe("qa suite summary helpers", () => {
).toBe(2);
});
it("prefers counts.failed when available", () => {
it("uses the larger failure signal when counts and scenarios disagree", () => {
expect(
readQaSuiteFailedScenarioCountFromSummary({
counts: { failed: 0 },
scenarios: [{ status: "pass" }, { status: "fail" }],
}),
).toBe(1);
expect(
readQaSuiteFailedScenarioCountFromSummary({
counts: { failed: 3.8 },
+12 -5
View File
@@ -79,11 +79,18 @@ export function readQaSuiteFailedScenarioCountFromSummary(summary: unknown): num
};
scenarios?: Array<QaSuiteScenarioStatus>;
};
if (typeof payload.counts?.failed === "number" && Number.isFinite(payload.counts.failed)) {
return Math.max(0, Math.floor(payload.counts.failed));
const countedFailures =
typeof payload.counts?.failed === "number" && Number.isFinite(payload.counts.failed)
? Math.max(0, Math.floor(payload.counts.failed))
: null;
const scenarioFailures = Array.isArray(payload.scenarios)
? countQaSuiteFailedScenarios(payload.scenarios)
: null;
if (countedFailures !== null && scenarioFailures !== null) {
return Math.max(countedFailures, scenarioFailures);
}
if (Array.isArray(payload.scenarios)) {
return countQaSuiteFailedScenarios(payload.scenarios);
if (scenarioFailures !== null) {
return scenarioFailures;
}
return null;
return countedFailures;
}