mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 12:37:20 +00:00
108 lines
3.5 KiB
TypeScript
108 lines
3.5 KiB
TypeScript
import { afterEach, describe, test, expect } from "bun:test";
|
|
import { App, createApp } from "core/test/utils";
|
|
import { getDummyConnection } from "./helper";
|
|
import { Hono } from "hono";
|
|
import * as proto from "../src/data/prototype";
|
|
import { pick } from "lodash-es";
|
|
|
|
const { dummyConnection, afterAllCleanup } = getDummyConnection();
|
|
afterEach(afterAllCleanup);
|
|
|
|
describe("App tests", async () => {
|
|
test("boots and pongs", async () => {
|
|
const app = new App(dummyConnection);
|
|
await app.build();
|
|
|
|
expect(await app.em.ping()).toBeTrue();
|
|
});
|
|
|
|
test("plugins", async () => {
|
|
const called: string[] = [];
|
|
const app = createApp({
|
|
initialConfig: {
|
|
auth: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
options: {
|
|
plugins: [
|
|
(app) => {
|
|
expect(app).toBeDefined();
|
|
expect(app).toBeInstanceOf(App);
|
|
return {
|
|
name: "test",
|
|
schema: () => {
|
|
called.push("schema");
|
|
return proto.em(
|
|
{
|
|
posts: proto.entity("posts", {
|
|
title: proto.text(),
|
|
}),
|
|
comments: proto.entity("comments", {
|
|
content: proto.text(),
|
|
}),
|
|
users: proto.entity("users", {
|
|
email_verified: proto.boolean(),
|
|
}),
|
|
},
|
|
(fn, s) => {
|
|
fn.relation(s.comments).manyToOne(s.posts);
|
|
fn.index(s.posts).on(["title"]);
|
|
},
|
|
);
|
|
},
|
|
onBoot: async () => {
|
|
called.push("onBoot");
|
|
},
|
|
beforeBuild: async () => {
|
|
called.push("beforeBuild");
|
|
},
|
|
onBuilt: async () => {
|
|
called.push("onBuilt");
|
|
},
|
|
onServerInit: async (server) => {
|
|
called.push("onServerInit");
|
|
expect(server).toBeDefined();
|
|
expect(server).toBeInstanceOf(Hono);
|
|
},
|
|
onFirstBoot: async () => {
|
|
called.push("onFirstBoot");
|
|
},
|
|
};
|
|
},
|
|
],
|
|
},
|
|
});
|
|
|
|
await app.build();
|
|
|
|
expect(app.em.entities.map((e) => e.name)).toEqual(["users", "posts", "comments"]);
|
|
expect(app.em.indices.map((i) => i.name)).toEqual([
|
|
"idx_unique_users_email",
|
|
"idx_users_strategy",
|
|
"idx_users_strategy_value",
|
|
"idx_posts_title",
|
|
]);
|
|
expect(
|
|
app.em.relations.all.map((r) => pick(r.toJSON(), ["type", "source", "target"])),
|
|
).toEqual([
|
|
{
|
|
type: "n:1",
|
|
source: "comments",
|
|
target: "posts",
|
|
},
|
|
]);
|
|
expect(called).toEqual([
|
|
"onBoot",
|
|
"onServerInit",
|
|
"beforeBuild",
|
|
"onServerInit",
|
|
"schema",
|
|
"onFirstBoot",
|
|
"onBuilt",
|
|
]);
|
|
expect(app.plugins).toHaveLength(1);
|
|
expect(app.plugins.map((p) => p.name)).toEqual(["test"]);
|
|
});
|
|
});
|