UNPKG

alepha

Version:

Easy-to-use modern TypeScript framework for building many kind of applications.

117 lines (91 loc) 3.12 kB
import { afterEach, describe, expect, it } from "bun:test"; import { Alepha, z } from "alepha"; import { $entity, $repository, DatabaseProvider, db } from "alepha/orm"; import { BunPostgresProvider } from "../providers/BunPostgresProvider.ts"; // ------------------------------------------------------------------------------------------------------------------- const users = $entity({ name: "users", schema: z.object({ id: db.primaryKey(), createdAt: db.createdAt(), updatedAt: db.updatedAt(), name: z.text(), role: db.default(z.text(), "user"), }), indexes: [{ column: "name", unique: true }], }); class TestApp { userRepo = $repository(users); } // ------------------------------------------------------------------------------------------------------------------- describe("BunPostgresProvider", () => { let alepha: Alepha; afterEach(async () => { await alepha?.stop().catch(() => {}); }); const setup = () => { alepha = Alepha.create({ env: { DATABASE_URL: "postgres://postgres:postgres@127.0.0.1:15432/postgres", }, }).with({ provide: DatabaseProvider, use: BunPostgresProvider, }); return alepha.inject(TestApp); }; it("should connect and disconnect cleanly", async () => { setup(); await alepha.start(); await alepha.stop(); }); it("should create and query entities", async () => { const app = setup(); await alepha.start(); const created = await app.userRepo.create({ name: "Alice" }); expect(created.name).toBe("Alice"); expect(created.role).toBe("user"); expect(created.id).toBeDefined(); expect(created.createdAt).toBeDefined(); const found = await app.userRepo.findOne({ where: { name: { eq: "Alice" } }, }); expect(found?.name).toBe("Alice"); }); it("should update entities with timestamp tracking", async () => { const app = setup(); await alepha.start(); const created = await app.userRepo.create({ name: "Bob" }); await new Promise((r) => setTimeout(r, 5)); const updated = await app.userRepo.updateOne( { name: { eq: "Bob" } }, { role: "admin" }, ); expect(updated.role).toBe("admin"); expect(updated.createdAt).toBe(created.createdAt); expect(updated.updatedAt).not.toBe(created.updatedAt); }); it("should delete entities", async () => { const app = setup(); await alepha.start(); await app.userRepo.create({ name: "Charlie" }); await app.userRepo.deleteMany({ name: { eq: "Charlie" } }); const found = await app.userRepo.findOne({ where: { name: { eq: "Charlie" } }, }); expect(found).toBeFalsy(); }); it("should execute raw SQL", async () => { setup(); await alepha.start(); const db = alepha.inject(DatabaseProvider); const result = await db.execute("SELECT 1 as value"); expect(result[0].value).toBe(1); }); it("should report postgresql dialect", async () => { setup(); await alepha.start(); const db = alepha.inject(DatabaseProvider); expect(db.dialect).toBe("postgresql"); }); });