Skip to content

Commit

Permalink
impr(dev): add function and tests to get a message from an error
Browse files Browse the repository at this point in the history
  • Loading branch information
Miodec committed Sep 13, 2024
1 parent ceedf8a commit 07d94a6
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 10 deletions.
57 changes: 56 additions & 1 deletion frontend/__tests__/utils/misc.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { deepClone, isObject } from "../../src/ts/utils/misc";
import { deepClone, getErrorMessage, isObject } from "../../src/ts/utils/misc";
import {
getLanguageDisplayString,
removeLanguageSize,
Expand Down Expand Up @@ -169,4 +169,59 @@ describe("misc.ts", () => {
});
});
});
describe("getErrorMesssage", () => {
it("should correctly get the error message", () => {
const tests = [
{
input: null,
expected: undefined,
},
{
input: undefined,
expected: undefined,
},
{
input: "",
expected: undefined,
},
{
input: {},
expected: undefined,
},
{
input: "error message",
expected: "error message",
},
{
input: 1,
expected: "1",
},
{
input: { message: "error message" },
expected: "error message",
},
{
input: { message: 1 },
expected: "1",
},
{
input: { message: "" },
expected: undefined,
},
{
input: { message: {} },
expected: undefined,
},
{
input: new Error("error message"),
expected: "error message",
},
];

tests.forEach((test) => {
const result = getErrorMessage(test.input);
expect(result).toBe(test.expected);
});
});
});
});
37 changes: 28 additions & 9 deletions frontend/src/ts/utils/misc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -484,21 +484,40 @@ export async function downloadResultsCSV(
Loader.hide();
}

export function createErrorMessage(error: unknown, message: string): string {
export function getErrorMessage(error: unknown): string | undefined {
let message = "";

if (error instanceof Error) {
return `${message}: ${error.message}`;
message = error.message;
} else if (
error !== null &&
typeof error === "object" &&
"message" in error &&
(typeof error.message === "string" || typeof error.message === "number")
) {
message = `${error.message}`;
} else if (typeof error === "string") {
message = error;
} else if (typeof error === "number") {
message = `${error}`;
}

if (error instanceof Object && "message" in error) {
const objectWithMessage = error as { message?: string };
if (message === "") {
return undefined;
}

if (objectWithMessage?.message !== undefined) {
return `${message}: ${objectWithMessage.message}`;
}
return message;
}

export function createErrorMessage(error: unknown, message: string): string {
const errorMessage = getErrorMessage(error);

if (errorMessage === undefined) {
console.error("Could not get error message from error", error);
return `${message}: Unknown error`;
}

console.error("Unknown error", error);
return `${message}: Unknown error`;
return `${message}: ${errorMessage}`;
}

export function isElementVisible(query: string): boolean {
Expand Down

0 comments on commit 07d94a6

Please sign in to comment.