import assert from "node:assert/strict"; import { describe, it } from "node:test"; import { db } from "../src/db/client.js"; import { DistributionBoardRepository } from "../src/db/repositories/distribution-board.repository.js"; import { circuitLists } from "../src/db/schema/circuit-lists.js"; import { circuitSections } from "../src/db/schema/circuit-sections.js"; import { distributionBoards } from "../src/db/schema/distribution-boards.js"; describe("distribution board repository", () => { it("creates board, circuit list and default sections in one synchronous transaction", () => { const originalTransaction = db.transaction; const insertedValues: Array<{ table: unknown; values: unknown }> = []; let transactionCalls = 0; (db as unknown as { transaction: (callback: (tx: unknown) => unknown) => unknown }).transaction = (callback) => { transactionCalls += 1; return callback({ insert(table: unknown) { return { values(values: unknown) { insertedValues.push({ table, values }); return { run() { return { changes: Array.isArray(values) ? values.length : 1 }; }, }; }, }; }, }); }; try { const repository = new DistributionBoardRepository(); const board = repository.createWithCircuitListAndDefaultSections("p1", "UV-01"); assert.equal(transactionCalls, 1); assert.equal(insertedValues.length, 3); assert.equal(insertedValues[0].table, distributionBoards); assert.deepEqual(insertedValues[0].values, board); assert.equal(insertedValues[1].table, circuitLists); assert.deepEqual(insertedValues[1].values, { id: board.id, projectId: "p1", distributionBoardId: board.id, name: "UV-01 Stromkreisliste", }); assert.equal(insertedValues[2].table, circuitSections); const sections = insertedValues[2].values as Array<{ circuitListId: string; key: string; prefix: string; }>; assert.equal(sections.length, 4); assert.ok(sections.every((section) => section.circuitListId === board.id)); assert.deepEqual( sections.map((section) => [section.key, section.prefix]), [ ["lighting", "-1F"], ["single_phase", "-2F"], ["three_phase", "-3F"], ["unassigned", "-UF"], ] ); } finally { (db as unknown as { transaction: unknown }).transaction = originalTransaction; } }); });