Files
rea/tests/boundary/firmware/firmwareValidationProjection.test.ts
T
morluto 1629266e3c fix(errors): preserve canonical failures and correction details
Retain process input and unexpected failure diagnostics through the shared error projector. Preserve filesystem causes and firmware validation issues, and mark unchanged invalid requests nonretryable.

Use typed stat settlement and parse unknown command failures without losing null or undefined rejection causes.

Refs #5397, #5401, #5402, #5642
2026-10-21 02:03:17 +08:00

61 lines
1.9 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { FirmwareAnalysisService } from "../../../src/application/firmware/FirmwareAnalysisService.js";
import { analysisErrorProjectionSchema } from "../../../src/contracts/errorSchemas.js";
import { projectAnalysisError } from "../../../src/domain/analysisErrorProjection.js";
describe("firmware request validation projection", () => {
it.each([
{
input: {
path: "/tmp/firmware.bin",
output_directory: "/tmp/out",
range: { offset: 5 },
},
missing: "length",
},
{
input: {
path: "/tmp/firmware.bin",
output_directory: "/tmp/out",
range: { length: 5 },
},
missing: "offset",
},
] as const)(
"identifies missing range.$missing before provider admission",
async ({ input, missing }) => {
const execute = vi.fn(async () => {
throw new Error("Provider must not execute for invalid input");
});
const service = new FirmwareAnalysisService({ execute });
const result = await service.execute("extract_firmware", input);
expect(result.ok).toBe(false);
if (result.ok) throw new Error("Expected request validation to fail");
const projected = projectAnalysisError(result.error);
expect(analysisErrorProjectionSchema.safeParse(projected).success).toBe(
true,
);
expect(projected).toMatchObject({
code: "invalid_request",
category: "invalid_input",
retryable: false,
details: {
operation: "extract_firmware",
issues: [
{
path: ["input", "range", missing],
reason: "missing_argument",
},
],
},
remediation: {
action: expect.stringContaining("Correct the listed fields"),
},
});
expect(execute).not.toHaveBeenCalled();
},
);
});