Files
bknd/app/src/plugins/data/timestamp.plugin.spec.ts
T
dswbx 1fdee8435d feat: add timestamps plugin to manage created_at and updated_at fields
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.
2025-09-29 22:12:23 +02:00

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);
});
});