mirror of
https://github.com/bknd-io/bknd/
synced 2026-08-02 16:16:02 +00:00
1fdee8435d
Introduced a new timestamps plugin that allows the addition of `created_at` and `updated_at` fields to specified entities. Included tests to verify functionality, ensuring timestamps are correctly set on entity creation and updates. Updated the plugin index to export the new timestamps functionality.
75 lines
2.5 KiB
TypeScript
75 lines
2.5 KiB
TypeScript
import { describe, test, expect, beforeAll, afterAll } from "bun:test";
|
|
import { timestamps } from "./timestamps.plugin";
|
|
import { em, entity, text } from "bknd";
|
|
import { createApp } from "core/test/utils";
|
|
import { disableConsoleLog, enableConsoleLog } from "core/utils/test";
|
|
|
|
beforeAll(() => disableConsoleLog());
|
|
afterAll(enableConsoleLog);
|
|
|
|
describe("timestamps plugin", () => {
|
|
test("should ignore if no or invalid entities are provided", async () => {
|
|
const app = createApp({
|
|
options: {
|
|
plugins: [timestamps({ entities: [] })],
|
|
},
|
|
});
|
|
await app.build();
|
|
expect(app.em.entities.map((e) => e.name)).toEqual([]);
|
|
|
|
{
|
|
const app = createApp({
|
|
options: {
|
|
plugins: [timestamps({ entities: ["posts"] })],
|
|
},
|
|
});
|
|
await app.build();
|
|
expect(app.em.entities.map((e) => e.name)).toEqual([]);
|
|
}
|
|
});
|
|
|
|
test("should add timestamps to the specified entities", async () => {
|
|
const app = createApp({
|
|
config: {
|
|
data: em({
|
|
posts: entity("posts", {
|
|
title: text(),
|
|
}),
|
|
}).toJSON(),
|
|
},
|
|
options: {
|
|
plugins: [timestamps({ entities: ["posts", "invalid"] })],
|
|
},
|
|
});
|
|
await app.build();
|
|
expect(app.em.entities.map((e) => e.name)).toEqual(["posts"]);
|
|
expect(app.em.entity("posts")?.fields.map((f) => f.name)).toEqual([
|
|
"id",
|
|
"title",
|
|
"created_at",
|
|
"updated_at",
|
|
]);
|
|
|
|
// insert
|
|
const mutator = app.em.mutator(app.em.entity("posts"));
|
|
const { data } = await mutator.insertOne({ title: "Hello" });
|
|
expect(data.created_at).toBeDefined();
|
|
expect(data.updated_at).toBeDefined();
|
|
expect(data.created_at).toBeInstanceOf(Date);
|
|
expect(data.updated_at).toBeInstanceOf(Date);
|
|
const diff = data.created_at.getTime() - data.updated_at.getTime();
|
|
expect(diff).toBeLessThan(10);
|
|
expect(diff).toBeGreaterThan(-1);
|
|
|
|
// update (set updated_at to null, otherwise it's too fast to test)
|
|
await app.em.connection.kysely
|
|
.updateTable("posts")
|
|
.set({ updated_at: null })
|
|
.where("id", "=", data.id)
|
|
.execute();
|
|
const { data: updatedData } = await mutator.updateOne(data.id, { title: "Hello 2" });
|
|
expect(updatedData.updated_at).toBeDefined();
|
|
expect(updatedData.updated_at).toBeInstanceOf(Date);
|
|
});
|
|
});
|