// Tests for user hydrator // Run with: cd express && DB_PORT=5433 DB_USER=diachron_test DB_PASSWORD=diachron_test DB_NAME=diachron_test ../cmd npx tsx --test framework/hydrators/tests/user.test.ts import { describe, it, before, after, beforeEach } from "node:test"; import assert from "node:assert/strict"; import { setupTestDatabase, cleanupTables, teardownTestDatabase, insertTestUser, } from "./setup"; import { get } from "../user"; describe("user hydrator", () => { before(async () => { await setupTestDatabase(); }); after(async () => { await teardownTestDatabase(); }); beforeEach(async () => { await cleanupTables(); }); describe("get", () => { it("returns null for non-existent user", async () => { const result = await get("00000000-0000-0000-0000-000000000000"); assert.equal(result, null); }); it("returns user when found", async () => { const userId = "cfae0a19-6515-4813-bc2d-1e032b72b203"; await insertTestUser({ id: userId, displayName: "Test User", status: "active", email: "test@example.com", }); const result = await get(userId); assert.notEqual(result, null); assert.equal(result!.id, userId); assert.equal(result!.display_name, "Test User"); assert.equal(result!.status, "active"); assert.equal(result!.email, "test@example.com"); }); it("validates user data with zod parser", async () => { const userId = crypto.randomUUID(); await insertTestUser({ id: userId, displayName: "Valid User", status: "active", email: "valid@example.com", }); const result = await get(userId); // If we get here without throwing, parsing succeeded assert.notEqual(result, null); assert.equal(typeof result!.id, "string"); assert.equal(typeof result!.email, "string"); }); it("returns user with pending status", async () => { const userId = crypto.randomUUID(); await insertTestUser({ id: userId, displayName: "Pending User", status: "pending", email: "pending@example.com", }); const result = await get(userId); assert.notEqual(result, null); assert.equal(result!.status, "pending"); }); it("returns user with suspended status", async () => { const userId = crypto.randomUUID(); await insertTestUser({ id: userId, displayName: "Suspended User", status: "suspended", email: "suspended@example.com", }); const result = await get(userId); assert.notEqual(result, null); assert.equal(result!.status, "suspended"); }); }); });