Persist complete distribution board subtrees

This commit is contained in:
2026-07-31 11:57:10 +02:00
parent 13693f64b1
commit 0fd564a930
8 changed files with 789 additions and 0 deletions
+36
View File
@@ -21,6 +21,7 @@ import { CircuitGroupMoveProjectCommandRepository } from "../src/db/repositories
import { CircuitGroupSubtreeProjectCommandRepository } from "../src/db/repositories/circuit-group-subtree-project-command.repository.js";
import { DistributionBoardFixtureRepository } from "./support/distribution-board-fixture.js";
import { DistributionBoardStructureProjectCommandRepository } from "../src/db/repositories/distribution-board-structure-project-command.repository.js";
import { DistributionBoardSubtreeProjectCommandRepository } from "../src/db/repositories/distribution-board-subtree-project-command.repository.js";
import { DistributionBoardComponentStructureProjectCommandRepository } from "../src/db/repositories/distribution-board-component-structure-project-command.repository.js";
import { ProjectHistoryRepository } from "../src/db/repositories/project-history.repository.js";
import { ProjectLocationStructureProjectCommandRepository } from "../src/db/repositories/project-location-structure-project-command.repository.js";
@@ -34,6 +35,7 @@ import { circuitProtectionDevices } from "../src/db/schema/circuit-protection-de
import { circuitSections } from "../src/db/schema/circuit-sections.js";
import { circuits } from "../src/db/schema/circuits.js";
import { distributionBoardComponents } from "../src/db/schema/distribution-board-components.js";
import { distributionBoards } from "../src/db/schema/distribution-boards.js";
import { projectChangeSets } from "../src/db/schema/project-change-sets.js";
import { projectDevices } from "../src/db/schema/project-devices.js";
import { projectRevisions } from "../src/db/schema/project-revisions.js";
@@ -68,6 +70,7 @@ import {
createDistributionBoardInsertProjectCommand,
createDistributionBoardStructureSnapshot,
} from "../src/domain/models/distribution-board-structure-project-command.model.js";
import { createDistributionBoardDeleteSubtreeProjectCommand } from "../src/domain/models/distribution-board-subtree-project-command.model.js";
import {
createDistributionBoardComponentInsertProjectCommand,
createDistributionBoardComponentUpdateProjectCommand,
@@ -137,6 +140,7 @@ function createService(context: DatabaseContext) {
new CircuitDeviceRowMoveProjectCommandRepository(context.db),
new CircuitStructureProjectCommandRepository(context.db),
new DistributionBoardStructureProjectCommandRepository(context.db),
new DistributionBoardSubtreeProjectCommandRepository(context.db),
new ProjectLocationStructureProjectCommandRepository(context.db),
new CircuitSectionReorderProjectCommandRepository(context.db),
new CircuitSectionRenumberProjectCommandRepository(context.db),
@@ -174,6 +178,38 @@ function getRowQuantity(context: DatabaseContext) {
}
describe("project command service", () => {
it("dispatches populated distribution-board subtree deletion through history", () => {
const context = createTestDatabase();
try {
const service = createService(context);
const repository =
new DistributionBoardSubtreeProjectCommandRepository(context.db);
const board = context.db.select().from(distributionBoards).get();
assert.ok(board);
const snapshot = repository.capture("project-1", board.id);
service.executeUser({
projectId: "project-1",
expectedRevision: 0,
command:
createDistributionBoardDeleteSubtreeProjectCommand(snapshot),
});
assert.equal(
context.db
.select()
.from(distributionBoards)
.where(eq(distributionBoards.id, board.id))
.get(),
undefined
);
service.undo({ projectId: "project-1", expectedRevision: 1 });
assert.deepEqual(repository.capture("project-1", board.id), snapshot);
} finally {
context.close();
}
});
it("dispatches circuit-protection updates through project history", () => {
const context = createTestDatabase();
try {