mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-17 12:56:05 +00:00
refactored EventManager to run asyncs on call only, app defaults to run before response (#129)
* refactored EventManager to run asyncs on call only, app defaults to run before response * fix tests
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { describe, expect, mock, test } from "bun:test";
|
||||
import type { ModuleBuildContext } from "../../src";
|
||||
import { type App, createApp } from "../../src/App";
|
||||
import { App, createApp } from "../../src/App";
|
||||
import * as proto from "../../src/data/prototype";
|
||||
|
||||
describe("App", () => {
|
||||
@@ -51,4 +51,87 @@ describe("App", () => {
|
||||
expect(todos[0]?.title).toBe("ctx");
|
||||
expect(todos[1]?.title).toBe("api");
|
||||
});
|
||||
|
||||
test("lifecycle events are triggered", async () => {
|
||||
const firstBoot = mock(() => null);
|
||||
const configUpdate = mock(() => null);
|
||||
const appBuilt = mock(() => null);
|
||||
const appRequest = mock(() => null);
|
||||
const beforeResponse = mock(() => null);
|
||||
|
||||
const app = createApp();
|
||||
|
||||
app.emgr.onEvent(
|
||||
App.Events.AppFirstBoot,
|
||||
(event) => {
|
||||
expect(event).toBeInstanceOf(App.Events.AppFirstBoot);
|
||||
expect(event.params.app.version()).toBe(app.version());
|
||||
firstBoot();
|
||||
},
|
||||
"sync",
|
||||
);
|
||||
app.emgr.onEvent(
|
||||
App.Events.AppBuiltEvent,
|
||||
(event) => {
|
||||
expect(event).toBeInstanceOf(App.Events.AppBuiltEvent);
|
||||
expect(event.params.app.version()).toBe(app.version());
|
||||
appBuilt();
|
||||
},
|
||||
"sync",
|
||||
);
|
||||
app.emgr.onEvent(
|
||||
App.Events.AppConfigUpdatedEvent,
|
||||
() => {
|
||||
configUpdate();
|
||||
},
|
||||
"sync",
|
||||
);
|
||||
app.emgr.onEvent(
|
||||
App.Events.AppRequest,
|
||||
(event) => {
|
||||
expect(event).toBeInstanceOf(App.Events.AppRequest);
|
||||
expect(event.params.app.version()).toBe(app.version());
|
||||
expect(event.params.request).toBeInstanceOf(Request);
|
||||
appRequest();
|
||||
},
|
||||
"sync",
|
||||
);
|
||||
app.emgr.onEvent(
|
||||
App.Events.AppBeforeResponse,
|
||||
(event) => {
|
||||
expect(event).toBeInstanceOf(App.Events.AppBeforeResponse);
|
||||
expect(event.params.app.version()).toBe(app.version());
|
||||
expect(event.params.response).toBeInstanceOf(Response);
|
||||
beforeResponse();
|
||||
},
|
||||
"sync",
|
||||
);
|
||||
|
||||
await app.build();
|
||||
expect(firstBoot).toHaveBeenCalled();
|
||||
expect(appBuilt).toHaveBeenCalled();
|
||||
//expect(configUpdate).toHaveBeenCalled();
|
||||
expect(appRequest).not.toHaveBeenCalled();
|
||||
expect(beforeResponse).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("emgr exec modes", async () => {
|
||||
const called = mock(() => null);
|
||||
const app = createApp({
|
||||
options: {
|
||||
asyncEventsMode: "sync",
|
||||
},
|
||||
});
|
||||
|
||||
// register async listener
|
||||
app.emgr.onEvent(App.Events.AppFirstBoot, async () => {
|
||||
called();
|
||||
});
|
||||
|
||||
await app.build();
|
||||
await app.server.request(new Request("http://localhost"));
|
||||
|
||||
// expect async listeners to be executed sync after request
|
||||
expect(called).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user