Files
Typescript-Dependency-Manager/dependency-manager.test.ts
Robin Chappatte cc31065348 add unit tests
2024-05-31 15:07:20 +02:00

78 lines
2.4 KiB
TypeScript

import {
assertEquals,
assertRejects,
assertThrows,
} from "https://deno.land/std@0.224.0/assert/mod.ts";
import { DependencyManager } from "./dependency-manager.ts";
// Test case for registering a module
Deno.test("DependencyManager: register a module", () => {
const manager = new DependencyManager();
const provider = () => "dependency";
manager.register("identifier", provider);
assertEquals(
manager.resolve("identifier"),
Promise.resolve("dependency"),
);
});
// Test case for resolving a module
Deno.test("DependencyManager: resolve a module", async () => {
const manager = new DependencyManager();
const provider = () => "dependency";
manager.register("identifier", provider);
const result = await manager.resolve("identifier");
assertEquals(result, "dependency");
});
// Test case for resolving an async module
Deno.test("DependencyManager: resolve an async module", async () => {
const manager = new DependencyManager();
const provider = () => {
return new Promise((resolve) =>
setTimeout(() => resolve("dependency"), 100)
);
};
manager.register("identifier", provider);
const result = await manager.resolve("identifier");
assertEquals(result, "dependency");
});
// Test case for handling circular dependencies
Deno.test("DependencyManager: circular dependency detection", async () => {
const manager = new DependencyManager();
const providerA = async () => await manager.resolve("B");
const providerB = async () => await manager.resolve("A");
manager.register("A", providerA);
manager.register("B", providerB);
await assertRejects(
() => manager.resolve("A"),
Error,
"Circular dependency detected for module A.",
);
});
// Test case for handling duplicate module registration
Deno.test("DependencyManager: duplicate module registration", () => {
const manager = new DependencyManager();
const provider = () => "dependency";
manager.register("identifier", provider);
assertThrows(
() => manager.register("identifier", provider),
Error,
"Module identifier is already registered.",
);
});
// Test case for handling unresolved modules
Deno.test("DependencyManager: resolve an unregistered module", async () => {
const manager = new DependencyManager();
await assertRejects(
() => manager.resolve("unregistered-identifier"),
Error,
"Module unregistered-identifier is not registered.",
);
});