Persist device row moves
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { describe, it } from "node:test";
|
||||
import {
|
||||
buildCircuitDeviceRowMoveAssignments,
|
||||
} from "../src/frontend/utils/circuit-device-row-move-command.js";
|
||||
import type {
|
||||
CircuitTreeCircuitDto,
|
||||
CircuitTreeDeviceRowDto,
|
||||
} from "../src/frontend/types.js";
|
||||
|
||||
function row(
|
||||
id: string,
|
||||
sortOrder: number
|
||||
): CircuitTreeDeviceRowDto {
|
||||
return {
|
||||
id,
|
||||
sortOrder,
|
||||
name: id,
|
||||
displayName: id,
|
||||
quantity: 1,
|
||||
powerPerUnit: 0.1,
|
||||
simultaneityFactor: 1,
|
||||
rowTotalPower: 0.1,
|
||||
};
|
||||
}
|
||||
|
||||
function circuit(
|
||||
id: string,
|
||||
deviceRows: CircuitTreeDeviceRowDto[]
|
||||
): CircuitTreeCircuitDto {
|
||||
return {
|
||||
id,
|
||||
circuitListId: "list-1",
|
||||
sectionId: "section-1",
|
||||
equipmentIdentifier: id,
|
||||
sortOrder: 10,
|
||||
isReserve: deviceRows.length === 0,
|
||||
circuitTotalPower: 0,
|
||||
deviceRows,
|
||||
};
|
||||
}
|
||||
|
||||
describe("circuit device-row move command builder", () => {
|
||||
it("records exact sources and appends rows in selection order", () => {
|
||||
const targetRows = [row("target-row", 20)];
|
||||
const circuits = [
|
||||
circuit("source-1", [row("row-1", 30)]),
|
||||
circuit("source-2", [row("row-2", 10)]),
|
||||
circuit("target", targetRows),
|
||||
];
|
||||
|
||||
assert.deepEqual(
|
||||
buildCircuitDeviceRowMoveAssignments({
|
||||
circuits,
|
||||
rowIds: ["row-2", "row-1"],
|
||||
targetCircuitId: "target",
|
||||
targetDeviceRows: targetRows,
|
||||
}),
|
||||
[
|
||||
{
|
||||
rowId: "row-2",
|
||||
expectedCircuitId: "source-2",
|
||||
expectedSortOrder: 10,
|
||||
targetCircuitId: "target",
|
||||
targetSortOrder: 30,
|
||||
},
|
||||
{
|
||||
rowId: "row-1",
|
||||
expectedCircuitId: "source-1",
|
||||
expectedSortOrder: 30,
|
||||
targetCircuitId: "target",
|
||||
targetSortOrder: 40,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
it("starts a generated target circuit at sort order ten", () => {
|
||||
assert.deepEqual(
|
||||
buildCircuitDeviceRowMoveAssignments({
|
||||
circuits: [circuit("source", [row("row-1", 40)])],
|
||||
rowIds: ["row-1"],
|
||||
targetCircuitId: "generated-target",
|
||||
targetDeviceRows: [],
|
||||
}),
|
||||
[
|
||||
{
|
||||
rowId: "row-1",
|
||||
expectedCircuitId: "source",
|
||||
expectedSortOrder: 40,
|
||||
targetCircuitId: "generated-target",
|
||||
targetSortOrder: 10,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
it("omits unchanged assignments during a same-circuit reorder", () => {
|
||||
const rows = [row("row-1", 10), row("row-2", 20)];
|
||||
assert.deepEqual(
|
||||
buildCircuitDeviceRowMoveAssignments({
|
||||
circuits: [circuit("target", rows)],
|
||||
rowIds: ["row-1", "row-2"],
|
||||
targetCircuitId: "target",
|
||||
targetDeviceRows: rows,
|
||||
}),
|
||||
[]
|
||||
);
|
||||
});
|
||||
|
||||
it("rejects duplicate or missing selected rows", () => {
|
||||
const circuits = [circuit("source", [row("row-1", 10)])];
|
||||
assert.throws(
|
||||
() =>
|
||||
buildCircuitDeviceRowMoveAssignments({
|
||||
circuits,
|
||||
rowIds: ["row-1", "row-1"],
|
||||
targetCircuitId: "target",
|
||||
targetDeviceRows: [],
|
||||
}),
|
||||
/mehrfach/
|
||||
);
|
||||
assert.throws(
|
||||
() =>
|
||||
buildCircuitDeviceRowMoveAssignments({
|
||||
circuits,
|
||||
rowIds: ["missing"],
|
||||
targetCircuitId: "target",
|
||||
targetDeviceRows: [],
|
||||
}),
|
||||
/nicht gefunden/
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user