mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-11-04 00:00:28 +09:00
54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
import { PostgreSqlContainer, type StartedPostgreSqlContainer } from "@testcontainers/postgresql";
|
|
import { Kysely, PostgresDialect } from "kysely";
|
|
import { Migrator } from "kysely/migration";
|
|
import pg from "pg";
|
|
import type { TestProject } from "vitest/node";
|
|
import migrations from "../../src/lib/server/db/migrations/index.ts";
|
|
|
|
declare module "vitest" {
|
|
export interface ProvidedContext {
|
|
database: {
|
|
host: string;
|
|
port: number;
|
|
user: string;
|
|
password: string;
|
|
name: string;
|
|
};
|
|
}
|
|
}
|
|
|
|
let container: StartedPostgreSqlContainer | undefined;
|
|
|
|
export const setup = async (project: TestProject) => {
|
|
container = await new PostgreSqlContainer("postgres:17").start();
|
|
|
|
const database = {
|
|
host: container.getHost(),
|
|
port: container.getPort(),
|
|
user: container.getUsername(),
|
|
password: container.getPassword(),
|
|
name: container.getDatabase(),
|
|
};
|
|
|
|
const db = new Kysely({
|
|
dialect: new PostgresDialect({
|
|
pool: new pg.Pool({ ...database, database: database.name }),
|
|
}),
|
|
});
|
|
try {
|
|
const { error } = await new Migrator({
|
|
db,
|
|
provider: { getMigrations: async () => migrations },
|
|
}).migrateToLatest();
|
|
if (error) throw error;
|
|
} finally {
|
|
await db.destroy();
|
|
}
|
|
|
|
project.provide("database", database);
|
|
};
|
|
|
|
export const teardown = async () => {
|
|
await container?.stop();
|
|
};
|