Files
dc-recorder/tests/database.test.ts

92 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-05-14 14:59:37 +07:00
import process from "node:process";
import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
const originalEnv = process.env;
describe("Drizzle ORM Database", () => {
let config: typeof import("../src/config").config;
let drizzle: typeof import("../src/database/drizzle");
let logger: ReturnType<typeof import("../src/logger").createChildLogger>;
2026-05-14 14:59:37 +07:00
beforeAll(async () => {
// Set up environment for config loading
process.env = {
...originalEnv,
DISCORD_TOKEN: "test-token",
NODE_ENV: "test",
DATABASE_TYPE: originalEnv.DATABASE_TYPE || "sqlite",
};
// Reset modules to pick up new environment
vi.resetModules();
// Import after environment is set
const configModule = await import("../src/config");
const drizzleModule = await import("../src/database/drizzle");
2026-05-14 14:59:37 +07:00
const loggerModule = await import("../src/logger");
config = configModule.config;
drizzle = drizzleModule;
2026-05-14 14:59:37 +07:00
logger = loggerModule.createChildLogger("database.test");
logger.info(`Testing with DATABASE_TYPE: ${config.DATABASE_TYPE}`);
2026-05-14 14:59:37 +07:00
});
afterAll(async () => {
try {
await drizzle.closeDatabase();
} catch (error) {
if (logger) {
logger.error(
{ error: error instanceof Error ? error.message : String(error) },
"Error closing database in afterAll",
);
2026-05-14 14:59:37 +07:00
}
}
process.env = originalEnv;
});
it("should initialize database connection", async () => {
const db = await drizzle.initializeDatabase();
2026-05-14 14:59:37 +07:00
expect(db).toBeDefined();
expect(db).toHaveProperty("query");
expect(db).toHaveProperty("select");
2026-05-14 14:59:37 +07:00
});
it("should return same instance on subsequent calls", async () => {
const db1 = await drizzle.initializeDatabase();
const db2 = await drizzle.initializeDatabase();
2026-05-14 14:59:37 +07:00
expect(db1).toBe(db2);
2026-05-14 14:59:37 +07:00
});
it("should get database instance", async () => {
await drizzle.initializeDatabase();
const db = drizzle.getDatabase();
2026-05-14 14:59:37 +07:00
expect(db).toBeDefined();
expect(db).toHaveProperty("query");
2026-05-14 14:59:37 +07:00
});
it("should throw error if database not initialized", async () => {
// Reset the database state
vi.resetModules();
2026-05-14 14:59:37 +07:00
const drizzleModule = await import("../src/database/drizzle");
2026-05-14 14:59:37 +07:00
expect(() => {
drizzleModule.getDatabase();
}).toThrow("Database not initialized");
2026-05-14 14:59:37 +07:00
});
it("should close database connection", async () => {
await drizzle.initializeDatabase();
await drizzle.closeDatabase();
2026-05-14 14:59:37 +07:00
expect(() => {
drizzle.getDatabase();
}).toThrow("Database not initialized");
2026-05-14 14:59:37 +07:00
});
});