Initial commit

This commit is contained in:
Technical University Darmstadt Germany
2024-06-06 12:28:40 +02:00
commit c8019d04cd
22 changed files with 6618 additions and 0 deletions

View File

@ -0,0 +1,21 @@
import { randomUUID } from "crypto";
jest.mock("typeorm");
describe("src/db:dataSource.migration", () => {
beforeEach(() => {
jest.resetModules();
jest.clearAllMocks();
process.env["DB_HOST"] = randomUUID();
process.env["DB_USER"] = randomUUID();
process.env["DB_PASS"] = randomUUID();
process.env["DB_NAME"] = randomUUID();
});
it("exports an initialized dataSource", async () => {
const dut = (await import("./dataSource.migration")).default;
expect(dut.initialize).toHaveBeenCalled();
});
});

View File

@ -0,0 +1,3 @@
import dataSource from "./dataSource";
export default dataSource;

59
src/db/dataSource.test.ts Normal file
View File

@ -0,0 +1,59 @@
import { randomUUID } from "crypto";
jest.mock("typeorm");
jest.mock("dotenv");
jest.mock("dotenv-expand");
describe("src/db:dataSource", () => {
beforeEach(() => {
jest.resetModules();
jest.clearAllMocks();
process.env["DB_HOST"] = randomUUID();
process.env["DB_USER"] = randomUUID();
process.env["DB_PASS"] = randomUUID();
process.env["DB_NAME"] = randomUUID();
});
it("throws an error if an environment variable is missing", async () => {
delete process.env["DB_HOST"];
process.env["DB_USER"] = randomUUID();
process.env["DB_PASS"] = randomUUID();
process.env["DB_NAME"] = randomUUID();
await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError);
jest.resetModules();
process.env["DB_HOST"] = randomUUID();
delete process.env["DB_USER"];
await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError);
jest.resetModules();
process.env["DB_USER"] = randomUUID();
delete process.env["DB_PASS"];
await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError);
jest.resetModules();
process.env["DB_PASS"] = randomUUID();
delete process.env["DB_NAME"];
await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError);
jest.resetModules();
process.env["DB_NAME"] = randomUUID();
expect(async () => await import("./dataSource")).not.toThrow();
});
it("exports an initialized dataSource", async () => {
const dut = (await import("./dataSource")).default;
expect(dut.initialize).toHaveBeenCalled();
});
});

37
src/db/dataSource.ts Normal file
View File

@ -0,0 +1,37 @@
import path from "path";
import { DataSource } from "typeorm";
import { config } from "dotenv";
import dotenvExpand from "dotenv-expand";
const env = config();
dotenvExpand.expand(env);
const host = process.env["DB_HOST"];
const username = process.env["DB_USER"];
const password = process.env["DB_PASS"];
const database = process.env["DB_NAME"];
if (!host) throw new ReferenceError("Environment variable DB_HOST is missing");
if (!password) throw new ReferenceError("Environment variable DB_PASS is missing");
if (!username) throw new ReferenceError("Environment variable DB_USER is missing");
if (!database) throw new ReferenceError("Environment variable DB_NAME is missing");
const dataSource = new DataSource({
type: "postgres",
host: host,
port: 5432,
username: username,
password: password,
database: database,
migrationsRun: true,
migrations: [path.join(__dirname, "/migrations/*")],
entities: [],
migrationsTransactionMode: "each",
});
const initPromise = dataSource.initialize();
export default dataSource;
export {
initPromise
}