Files
ThreadNet-Web/packages/module-api/src/loader.test.ts
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

59 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-01-30 15:12:15 +00:00
/*
Copyright 2025 New Vector Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
2025-01-30 15:14:30 +00:00
import { expect, test, describe, vi, beforeEach } from "vitest";
2025-01-30 15:12:15 +00:00
2025-11-12 12:16:31 +00:00
import { type Api, ModuleIncompatibleError, ModuleLoader } from ".";
2025-01-30 15:12:15 +00:00
describe("ModuleIncompatibleError", () => {
test("should extend Error", () => {
expect(new ModuleIncompatibleError("1.0.0")).toBeInstanceOf(Error);
});
});
describe("ModuleLoader", () => {
const mockApi = {} as Api;
beforeEach(() => {
vi.stubGlobal("__VERSION__", "1.0.1");
});
test("should load a module", async () => {
const TestModule = {
default: class TestModule {
public static moduleApiVersion = "^1.0.0";
public constructor(private readonly api: Api) {}
public async load(): Promise<void> {}
},
};
const spy = vi.spyOn(TestModule.default.prototype, "load");
const loader = new ModuleLoader(mockApi);
await loader.load(TestModule);
await loader.start();
expect(spy).toHaveBeenCalledWith();
});
test("should fail to load an incompatible module", async () => {
const TestModule = {
default: class TestModule {
public static moduleApiVersion = "^2";
public constructor(private readonly api: Api) {}
public async load(): Promise<void> {}
},
};
const spy = vi.spyOn(TestModule.default.prototype, "load");
const loader = new ModuleLoader(mockApi);
await expect(loader.load(TestModule)).rejects.toThrowError(ModuleIncompatibleError);
await loader.start();
expect(spy).not.toHaveBeenCalledWith();
});
});