You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.4 KiB
67 lines
2.4 KiB
import {
|
|
AggregateError,
|
|
ErrorResult,
|
|
ResourceError,
|
|
UnexpectedResourceError,
|
|
} from "../src/results/error/ErrorResult.js";
|
|
import { InvalidUriError } from "../src/results/error/InvalidUriError.js";
|
|
import { MockResource } from "./mocks/MockResource.js";
|
|
import { describe, it, expect } from "vitest";
|
|
|
|
const mockResource = new MockResource("https://example.com/");
|
|
|
|
describe("ErrorResult", () => {
|
|
describe("fromThrown", () => {
|
|
it("returns an UnexpecteResourceError if a string is provided", () => {
|
|
expect(
|
|
UnexpectedResourceError.fromThrown(mockResource, "hello").message,
|
|
).toBe("hello");
|
|
});
|
|
|
|
it("returns an UnexpecteResourceError if an odd valud is provided", () => {
|
|
expect(UnexpectedResourceError.fromThrown(mockResource, 5).message).toBe(
|
|
"Error of type number thrown: 5",
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("AggregateError", () => {
|
|
it("flattens aggregate errors provided to the constructor", () => {
|
|
const err1 = UnexpectedResourceError.fromThrown(mockResource, "1");
|
|
const err2 = UnexpectedResourceError.fromThrown(mockResource, "2");
|
|
const err3 = UnexpectedResourceError.fromThrown(mockResource, "3");
|
|
const err4 = UnexpectedResourceError.fromThrown(mockResource, "4");
|
|
const aggErr1 = new AggregateError([err1, err2]);
|
|
const aggErr2 = new AggregateError([err3, err4]);
|
|
const finalAgg = new AggregateError([aggErr1, aggErr2]);
|
|
expect(finalAgg.errors.length).toBe(4);
|
|
});
|
|
});
|
|
|
|
describe("default messages", () => {
|
|
class ConcreteResourceError extends ResourceError<MockResource> {
|
|
readonly type = "concreteResourceError" as const;
|
|
}
|
|
class ConcreteErrorResult extends ErrorResult {
|
|
readonly type = "concreteErrorResult" as const;
|
|
}
|
|
|
|
it("ResourceError fallsback to a default message if none is provided", () => {
|
|
expect(new ConcreteResourceError(mockResource).message).toBe(
|
|
"An unkown error for https://example.com/",
|
|
);
|
|
});
|
|
|
|
it("ErrorResult fallsback to a default message if none is provided", () => {
|
|
expect(new ConcreteErrorResult().message).toBe(
|
|
"An unkown error was encountered.",
|
|
);
|
|
});
|
|
|
|
it("InvalidUriError fallsback to a default message if none is provided", () => {
|
|
expect(new InvalidUriError(mockResource).message).toBe(
|
|
"https://example.com/ is an invalid uri.",
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|