import { describe, expect, it } from "vite-plus/test"; import { EnvironmentAuthInvalidError, EnvironmentInternalError, EnvironmentOperationForbiddenError, EnvironmentRequestInvalidError, EnvironmentResourceNotFoundError, EnvironmentScopeRequiredError, } from "./environmentHttp.ts"; const traceId = "trace-1"; describe("environment HTTP errors", () => { // A client squashes the cause and shows `message`; an empty one becomes a generic // "The environment request failed." that names nothing the reader can act on. it("each carries a message that names its reason", () => { const errors = [ new EnvironmentRequestInvalidError({ code: "invalid_request", reason: "invalid_command", traceId, }), new EnvironmentAuthInvalidError({ code: "auth_invalid", reason: "missing_credential", traceId, }), new EnvironmentScopeRequiredError({ code: "insufficient_scope", requiredScope: "orchestration:read", traceId, }), new EnvironmentOperationForbiddenError({ code: "operation_forbidden", reason: "current_session_revoke_not_allowed", traceId, }), new EnvironmentResourceNotFoundError({ code: "not_found", reason: "thread_not_found", traceId, }), new EnvironmentInternalError({ code: "internal_error", reason: "orchestration_snapshot_failed", traceId, }), ] as const; const details = [ "invalid_command", "missing_credential", "orchestration:read", "current_session_revoke_not_allowed", "thread_not_found", "orchestration_snapshot_failed", ]; errors.forEach((error, index) => { expect(error.message).toContain(details[index]); }); }); });