import { test, TapeWriter } from "./TestTraits"; import { Container } from "@implab/core/di/Container"; import { ReferenceDescriptor } from "@implab/core/di/ReferenceDescriptor"; import { AggregateDescriptor } from "@implab/core/di/AggregateDescriptor"; import { ValueDescriptor } from "@implab/core/di/ValueDescriptor"; import { TraceSource, DebugLevel } from "@implab/core/log/TraceSource"; import { Foo } from "./mock/Foo"; import { Bar } from "./mock/Bar"; import { isNull } from "@implab/core/safe"; test("Container register/resolve tests", async t => { const writer = new TapeWriter(t); TraceSource.on(ts => { ts.level = DebugLevel; writer.writeEvents(ts.events); }); const container = new Container(); const connection1 = "db://localhost"; container.register("connection", new ValueDescriptor(connection1)); t.equals(container.getService("connection"), connection1); container.register( "dbParams", new AggregateDescriptor({ timeout: 10, connection: new ReferenceDescriptor({ name: "connection" }) }) ); const dbParams = container.getService("dbParams"); t.equals(dbParams.connection, connection1, "should get connection"); writer.destroy(); }); test("Container configure/resolve tests", async t => { const writer = new TapeWriter(t); TraceSource.on(ts => { ts.level = DebugLevel; writer.writeEvents(ts.events); }); const container = new Container(); await container.configure({ foo: { $type: Foo }, bar: { $type: Bar, params: { db: { provider: { $dependency: "db" } } } } }); const f1 = container.resolve("foo"); t.assert(!isNull(f1), "foo should be not null"); const b1 = container.resolve("bar"); writer.destroy(); });