import { ExitCode, InternalService, Microservice, MicroserviceState } from "../../src"; class MockService extends InternalService { public NAME = "Mock Service"; public hasBooted = false; public hasStarted = false; public hasShutdown = false; public override async boot() { this.hasBooted = true; } public override async start() { this.hasStarted = true; } public override async shutdown() { this.hasShutdown = true; } } class MockServiceBootFail extends InternalService { public NAME = "Boot Fail"; public override async boot() { throw new Error(); } } class MockServiceStartFail extends InternalService { public NAME = "Start Fail"; public override async start() { throw new Error(); } } class MockServiceShutdownFail extends InternalService { public NAME = "Shutdown Fail"; public override async shutdown() { throw new Error(); } } describe("Microservice/Internal Service Integration", () => { test("Check that internal service state methods have been executed", async () => { let microservice = new Microservice(); microservice.installService(MockService); let executing = microservice.exec(); microservice.on("ready", () => microservice.quit()); await executing; expect(microservice.service(MockService).hasBooted).toBe(true); expect(microservice.service(MockService).hasStarted).toBe(true); expect(microservice.service(MockService).hasShutdown).toBe(true); }); test("Trigger boot failure", async () => { let microservice = new Microservice(); microservice.installService(MockServiceBootFail); let exitCode = await microservice.exec(); expect(exitCode).toEqual(ExitCode.BootError); expect(microservice.state).toEqual(MicroserviceState.Finished); }); test("Trigger start failure", async () => { let microservice = new Microservice(); microservice.installService(MockServiceStartFail); let exitCode = await microservice.exec(); expect(exitCode).toEqual(ExitCode.StartupError); expect(microservice.state).toEqual(MicroserviceState.Finished); }); test("Trigger shutdown failure", async () => { let microservice = new Microservice(); microservice.installService(MockServiceShutdownFail); let execPromise = microservice.exec(); microservice.on("ready", () => microservice.quit()); let exitCode = await execPromise; expect(exitCode).toEqual(ExitCode.ShutdownError); expect(microservice.state).toEqual(MicroserviceState.Finished); }); });