mirror of
https://github.com/penpot/penpot.git
synced 2026-08-08 13:58:35 +00:00
64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { formatTaskError } from "./ErrorUtils.ts";
|
|
|
|
test("includes ClojureScript exception data in the task error message", () => {
|
|
const keyword = (name: string) => ({ name, fqn: name });
|
|
const entries = [
|
|
{ key: keyword("type"), val: keyword("validation") },
|
|
{ key: keyword("code"), val: keyword("request-body-too-large") },
|
|
{ key: keyword("status"), val: 413 },
|
|
];
|
|
const data = {
|
|
*[Symbol.iterator]() {
|
|
yield* entries;
|
|
},
|
|
};
|
|
const error = Object.assign(new Error("http error"), { data });
|
|
|
|
assert.equal(formatTaskError(error), "http error (type: validation, code: request-body-too-large, status: 413)");
|
|
});
|
|
|
|
test("falls back to the printed representation when map internals are renamed by the Closure compiler", () => {
|
|
// In release builds MapEntry/Keyword field names are minified, so entry
|
|
// extraction finds nothing; only toString keeps the readable CLJS form.
|
|
const entries = [{ a7: { Eb: "type" }, gb: { Eb: "validation" } }];
|
|
const data = {
|
|
*[Symbol.iterator]() {
|
|
yield* entries;
|
|
},
|
|
toString: () => "{:type :validation, :code :request-body-too-large}",
|
|
};
|
|
const error = Object.assign(new Error("http error"), { data });
|
|
|
|
assert.equal(formatTaskError(error), "http error ({:type :validation, :code :request-body-too-large})");
|
|
});
|
|
|
|
test("formats plain object data and nested printable values", () => {
|
|
const data = {
|
|
status: 413,
|
|
uri: "https://example.test/api/export",
|
|
detail: { toString: () => "{:code :too-large}" },
|
|
};
|
|
const error = Object.assign(new Error("http error"), { data });
|
|
|
|
assert.equal(
|
|
formatTaskError(error),
|
|
"http error (status: 413, uri: https://example.test/api/export, detail: {:code :too-large})"
|
|
);
|
|
});
|
|
|
|
test("keeps string values verbatim", () => {
|
|
const error = Object.assign(new Error("http error"), { data: { hint: ":not-a-keyword" } });
|
|
|
|
assert.equal(formatTaskError(error), "http error (hint: :not-a-keyword)");
|
|
});
|
|
|
|
test("returns the original message when no structured data is available", () => {
|
|
assert.equal(formatTaskError(new Error("export timed out")), "export timed out");
|
|
});
|
|
|
|
test("formats non-Error values", () => {
|
|
assert.equal(formatTaskError("connection closed"), "connection closed");
|
|
});
|