67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import { describe, expect, it, vi } from "vitest"
|
|
import { Service, Container } from "../lib/main"
|
|
|
|
class TestServiceA extends Service {
|
|
public static ID = "TestServiceA"
|
|
}
|
|
|
|
class TestServiceB extends Service<"test"> {
|
|
public static ID = "TestServiceB"
|
|
|
|
// Marked public to allow for testing
|
|
public readonly serviceA = this.bind(TestServiceA)
|
|
|
|
public emitTestEvent() {
|
|
this.emit("test")
|
|
}
|
|
}
|
|
|
|
describe("Service", () => {
|
|
describe("constructor", () => {
|
|
it("throws an error if the service is initialized without a container", () => {
|
|
expect(() => new TestServiceA()).toThrowError(
|
|
"Tried to initialize service with no container (ID: TestServiceA)"
|
|
)
|
|
})
|
|
})
|
|
|
|
describe("bind", () => {
|
|
it("correctly binds the dependency service using the container", () => {
|
|
const container = new Container()
|
|
|
|
const serviceA = container.bind(TestServiceA)
|
|
|
|
const serviceB = container.bind(TestServiceB)
|
|
expect(serviceB.serviceA).toBe(serviceA)
|
|
})
|
|
})
|
|
|
|
describe("getContainer", () => {
|
|
it("returns the container the service is bound to", () => {
|
|
const container = new Container()
|
|
|
|
const serviceA = container.bind(TestServiceA)
|
|
|
|
// @ts-expect-error getContainer is a protected member, we are just using it to help with testing
|
|
expect(serviceA.getContainer()).toBe(container)
|
|
})
|
|
})
|
|
|
|
describe("getEventStream", () => {
|
|
it("returns the valid event stream of the service", () => {
|
|
const container = new Container()
|
|
|
|
const serviceB = container.bind(TestServiceB)
|
|
|
|
const serviceFunc = vi.fn()
|
|
|
|
serviceB.getEventStream().subscribe(serviceFunc)
|
|
|
|
serviceB.emitTestEvent()
|
|
|
|
expect(serviceFunc).toHaveBeenCalledOnce()
|
|
expect(serviceFunc).toHaveBeenCalledWith("test")
|
|
})
|
|
})
|
|
})
|