135 lines
3.3 KiB
TypeScript
135 lines
3.3 KiB
TypeScript
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/
|
|
);
|
|
});
|
|
});
|