mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Make higher order function for logging errors support asynchronous rejecting with non error instance
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
18d13a23ac
commit
de8d5eef37
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
||||
import loggerInjectable from "../../logger.injectable";
|
||||
|
||||
export type WithErrorLoggingFor = (
|
||||
getErrorMessage: (error: Error) => string
|
||||
getErrorMessage: (error: unknown) => string
|
||||
) => <T extends (...args: any[]) => any>(
|
||||
toBeDecorated: T
|
||||
) => (...args: Parameters<T>) => ReturnType<T>;
|
||||
@ -24,14 +24,19 @@ const withErrorLoggingInjectable = getInjectable({
|
||||
const returnValue = toBeDecorated(...args);
|
||||
|
||||
if (isPromise(returnValue)) {
|
||||
returnValue.catch((e: Error) => {
|
||||
logger.error(getErrorMessage(e as Error), e);
|
||||
returnValue.catch((e) => {
|
||||
const errorMessage = getErrorMessage(e);
|
||||
|
||||
logger.error(errorMessage, e);
|
||||
});
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
} catch (e) {
|
||||
logger.error(getErrorMessage(e as Error), e);
|
||||
const errorMessage = getErrorMessage(e);
|
||||
|
||||
logger.error(errorMessage, e);
|
||||
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
|
||||
@ -33,7 +33,7 @@ describe("with-error-logging", () => {
|
||||
|
||||
decorated = pipeline(
|
||||
toBeDecorated,
|
||||
withErrorLoggingFor((error: Error) => `some-error-message-for-${error.message}`),
|
||||
withErrorLoggingFor((error: any) => `some-error-message-for-${error.message}`),
|
||||
);
|
||||
});
|
||||
|
||||
@ -133,7 +133,11 @@ describe("with-error-logging", () => {
|
||||
|
||||
decorated = pipeline(
|
||||
toBeDecorated,
|
||||
withErrorLoggingFor((error: Error) => `some-error-message-for-${error.message}`),
|
||||
|
||||
withErrorLoggingFor(
|
||||
(error: any) =>
|
||||
`some-error-message-for-${error.message || error.someProperty}`,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
@ -158,7 +162,7 @@ describe("with-error-logging", () => {
|
||||
expect(promiseStatus.fulfilled).toBe(false);
|
||||
});
|
||||
|
||||
describe("when call rejects", () => {
|
||||
describe("when call rejects with error instance", () => {
|
||||
let error: Error;
|
||||
|
||||
beforeEach(async () => {
|
||||
@ -179,6 +183,30 @@ describe("with-error-logging", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("when call rejects with something else than error instance", () => {
|
||||
let error: unknown;
|
||||
|
||||
beforeEach(async () => {
|
||||
try {
|
||||
await toBeDecorated.reject({ someProperty: "some-rejection" });
|
||||
await returnValuePromise;
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
});
|
||||
|
||||
it("logs the rejection", () => {
|
||||
expect(loggerStub.error).toHaveBeenCalledWith(
|
||||
"some-error-message-for-some-rejection",
|
||||
error,
|
||||
);
|
||||
});
|
||||
|
||||
it("rejects", () => {
|
||||
return expect(() => returnValuePromise).rejects.toEqual({ someProperty: "some-rejection" });
|
||||
});
|
||||
});
|
||||
|
||||
describe("when call resolves with value", () => {
|
||||
beforeEach(async () => {
|
||||
await toBeDecorated.resolve(42);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user