forked from jappel/leistungsbilanz-ts
Add logical distribution board feed links
This commit is contained in:
parent
b50c00c0ac
commit
b893c72534
23 changed files with 3732 additions and 45 deletions
|
|
@ -491,6 +491,159 @@ describe("distribution-board structure project command", () => {
|
|||
}
|
||||
});
|
||||
|
||||
it("links a feeding board and circuit while preserving version-1 updates", () => {
|
||||
const context = createTestDatabase();
|
||||
try {
|
||||
const repository =
|
||||
new DistributionBoardStructureProjectCommandRepository(context.db);
|
||||
const upstream = createDistributionBoardStructureSnapshot(
|
||||
"project-1",
|
||||
"NSHV",
|
||||
{ supplyType: "AV" }
|
||||
);
|
||||
const downstream = createDistributionBoardStructureSnapshot(
|
||||
"project-1",
|
||||
"UV EG",
|
||||
{ supplyType: "AV" }
|
||||
);
|
||||
repository.execute({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 0,
|
||||
source: "user",
|
||||
command: createDistributionBoardInsertProjectCommand(upstream),
|
||||
});
|
||||
repository.execute({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 1,
|
||||
source: "user",
|
||||
command: createDistributionBoardInsertProjectCommand(downstream),
|
||||
});
|
||||
context.db.insert(circuits).values([
|
||||
{
|
||||
id: "feed-circuit",
|
||||
circuitListId: upstream.circuitList.id,
|
||||
sectionId: upstream.sections[2]!.id,
|
||||
equipmentIdentifier: "-3F1.1",
|
||||
sortOrder: 10,
|
||||
},
|
||||
{
|
||||
id: "downstream-circuit",
|
||||
circuitListId: downstream.circuitList.id,
|
||||
sectionId: downstream.sections[2]!.id,
|
||||
equipmentIdentifier: "-3F1.1",
|
||||
sortOrder: 10,
|
||||
},
|
||||
]).run();
|
||||
|
||||
const linked = repository.executeUpdate({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 2,
|
||||
source: "user",
|
||||
command: createDistributionBoardUpdateProjectCommand(
|
||||
downstream.distributionBoard.id,
|
||||
{
|
||||
feedingDistributionBoardId: upstream.distributionBoard.id,
|
||||
feedingCircuitId: "feed-circuit",
|
||||
}
|
||||
),
|
||||
});
|
||||
assert.deepEqual(
|
||||
context.db
|
||||
.select({
|
||||
feedingDistributionBoardId:
|
||||
distributionBoards.feedingDistributionBoardId,
|
||||
feedingCircuitId: distributionBoards.feedingCircuitId,
|
||||
})
|
||||
.from(distributionBoards)
|
||||
.where(eq(distributionBoards.id, downstream.distributionBoard.id))
|
||||
.get(),
|
||||
{
|
||||
feedingDistributionBoardId: upstream.distributionBoard.id,
|
||||
feedingCircuitId: "feed-circuit",
|
||||
}
|
||||
);
|
||||
|
||||
repository.executeUpdate({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 3,
|
||||
source: "undo",
|
||||
historyTargetChangeSetId: new ProjectHistoryRepository(
|
||||
context.db
|
||||
).getNextCommand("project-1", "undo")?.changeSetId,
|
||||
command: linked.inverse,
|
||||
});
|
||||
repository.executeUpdate({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 4,
|
||||
source: "user",
|
||||
command: createDistributionBoardUpdateProjectCommand(
|
||||
downstream.distributionBoard.id,
|
||||
{
|
||||
feedingDistributionBoardId: upstream.distributionBoard.id,
|
||||
feedingCircuitId: null,
|
||||
}
|
||||
),
|
||||
});
|
||||
|
||||
assert.throws(
|
||||
() => repository.executeUpdate({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 5,
|
||||
source: "user",
|
||||
command: createDistributionBoardUpdateProjectCommand(
|
||||
upstream.distributionBoard.id,
|
||||
{
|
||||
feedingDistributionBoardId: downstream.distributionBoard.id,
|
||||
feedingCircuitId: null,
|
||||
}
|
||||
),
|
||||
}),
|
||||
/Zyklus/
|
||||
);
|
||||
assert.throws(
|
||||
() => repository.executeUpdate({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 5,
|
||||
source: "user",
|
||||
command: createDistributionBoardUpdateProjectCommand(
|
||||
downstream.distributionBoard.id,
|
||||
{
|
||||
feedingDistributionBoardId: upstream.distributionBoard.id,
|
||||
feedingCircuitId: "downstream-circuit",
|
||||
}
|
||||
),
|
||||
}),
|
||||
/gehört nicht zur gewählten Verteilung/
|
||||
);
|
||||
|
||||
repository.executeUpdate({
|
||||
projectId: "project-1",
|
||||
expectedRevision: 5,
|
||||
source: "user",
|
||||
command: {
|
||||
schemaVersion: 1,
|
||||
type: "distribution-board.update",
|
||||
payload: {
|
||||
distributionBoardId: downstream.distributionBoard.id,
|
||||
changes: [{ field: "boardNumber", value: "UV-01" }],
|
||||
},
|
||||
},
|
||||
});
|
||||
const afterLegacyUpdate = context.db
|
||||
.select()
|
||||
.from(distributionBoards)
|
||||
.where(eq(distributionBoards.id, downstream.distributionBoard.id))
|
||||
.get();
|
||||
assert.equal(afterLegacyUpdate?.boardNumber, "UV-01");
|
||||
assert.equal(
|
||||
afterLegacyUpdate?.feedingDistributionBoardId,
|
||||
upstream.distributionBoard.id
|
||||
);
|
||||
} finally {
|
||||
context.close();
|
||||
}
|
||||
});
|
||||
|
||||
it("sends distribution-board writes to the revision-safe API", async () => {
|
||||
const requests: Array<{ url: string; method: string; body: unknown }> = [];
|
||||
const originalFetch = globalThis.fetch;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue