mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 04:27:21 +00:00
149 lines
4.8 KiB
TypeScript
149 lines
4.8 KiB
TypeScript
import { afterEach, describe, test, expect, beforeAll, afterAll } 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";
|
|
import { disableConsoleLog, enableConsoleLog } from "core/utils/test";
|
|
|
|
beforeAll(() => disableConsoleLog());
|
|
|
|
const { dummyConnection, afterAllCleanup } = getDummyConnection();
|
|
afterEach(async () => (await afterAllCleanup()) && enableConsoleLog());
|
|
|
|
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({
|
|
config: {
|
|
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.size).toBe(1);
|
|
expect(Array.from(app.plugins.keys())).toEqual(["test"]);
|
|
});
|
|
|
|
test("drivers", async () => {
|
|
const called: string[] = [];
|
|
const app = new App(dummyConnection, undefined, {
|
|
drivers: {
|
|
email: {
|
|
send: async (to, subject, body) => {
|
|
called.push("email.send");
|
|
return {
|
|
id: "",
|
|
};
|
|
},
|
|
},
|
|
cache: {
|
|
get: async (key) => {
|
|
called.push("cache.get");
|
|
return "";
|
|
},
|
|
set: async (key, value, ttl) => {
|
|
called.push("cache.set");
|
|
},
|
|
del: async (key) => {
|
|
called.push("cache.del");
|
|
},
|
|
},
|
|
},
|
|
});
|
|
await app.build();
|
|
|
|
expect(app.drivers.cache).toBeDefined();
|
|
expect(app.drivers.email).toBeDefined();
|
|
await app.drivers.email.send("", "", "");
|
|
await app.drivers.cache.get("");
|
|
await app.drivers.cache.set("", "", 0);
|
|
await app.drivers.cache.del("");
|
|
|
|
expect(called).toEqual(["email.send", "cache.get", "cache.set", "cache.del"]);
|
|
});
|
|
});
|