feat(homolog): L0 avaliador de paridade de deploy (TDD)

This commit is contained in:
Diego Rodrigues de Sa e Souza
2026-07-14 01:03:31 -03:00
parent 98dcce4564
commit edc08b7db8
2 changed files with 44 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
/**
* Avaliação pura de paridade do deploy (testável sem rede).
* @param {{status?: string, version?: string}} health corpo de /api/monitoring/health
* @param {{expectedVersion: string, httpStatus: number}} ctx
* @returns {{ok: boolean, failures: string[]}}
*/
export function evaluateParity(health, ctx) {
const failures = [];
if (ctx.httpStatus !== 200) failures.push(`health HTTP ${ctx.httpStatus} (esperado 200)`);
if (health?.status !== "healthy")
failures.push(`status "${health?.status}" (esperado "healthy")`);
if (health?.version !== ctx.expectedVersion)
failures.push(`version "${health?.version}" (esperado "${ctx.expectedVersion}")`);
return { ok: failures.length === 0, failures };
}

View File

@@ -0,0 +1,29 @@
import { test } from "node:test";
import assert from "node:assert/strict";
import { evaluateParity } from "../../scripts/homolog/lib/parity.mjs";
test("parity OK quando health bate com a versão esperada", () => {
const r = evaluateParity(
{ status: "healthy", version: "3.8.49" },
{ expectedVersion: "3.8.49", httpStatus: 200 }
);
assert.equal(r.ok, true);
assert.deepEqual(r.failures, []);
});
test("parity falha listando cada divergência", () => {
const r = evaluateParity(
{ status: "degraded", version: "3.8.47" },
{ expectedVersion: "3.8.49", httpStatus: 200 }
);
assert.equal(r.ok, false);
assert.equal(r.failures.length, 2); // status!=healthy, version mismatch
});
test("parity falha em HTTP não-200 mesmo com body bom", () => {
const r = evaluateParity(
{ status: "healthy", version: "3.8.49" },
{ expectedVersion: "3.8.49", httpStatus: 503 }
);
assert.equal(r.ok, false);
});