Plan circuit group moves
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
import "./circuit-group-structure-project-command.repository.test.js";
|
||||
import { createCircuitGroupRenumberPlan } from "../src/domain/services/circuit-group-renumbering.js";
|
||||
import "./circuit-group-renumber-project-command.repository.test.js";
|
||||
import { createCircuitGroupMovePlan } from "../src/domain/services/circuit-group-move-planning.js";
|
||||
|
||||
describe("circuit group numbering", () => {
|
||||
it("formats the agreed identifiers including the leading hyphen", () => {
|
||||
@@ -240,3 +241,117 @@ describe("circuit group renumber planning", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("circuit group move planning", () => {
|
||||
const sourceGroup = {
|
||||
id: "lighting-1",
|
||||
category: "lighting" as const,
|
||||
groupNumber: 1,
|
||||
prefix: "-1F1.",
|
||||
};
|
||||
const targetGroup = {
|
||||
id: "lighting-2",
|
||||
category: "lighting" as const,
|
||||
groupNumber: 2,
|
||||
prefix: "-1F2.",
|
||||
};
|
||||
|
||||
it("uses the highest target suffix plus one and stores both positions", () => {
|
||||
assert.deepEqual(
|
||||
createCircuitGroupMovePlan({
|
||||
circuit: {
|
||||
id: "circuit-1",
|
||||
circuitListId: "list-1",
|
||||
sectionId: "lighting-1",
|
||||
equipmentIdentifier: "-1F1.7",
|
||||
sortOrder: 20,
|
||||
},
|
||||
sourceGroup,
|
||||
targetGroup,
|
||||
targetCircuitEquipmentIdentifiers: [
|
||||
"-1F2.1",
|
||||
"-1F2.4",
|
||||
"-1F2.9",
|
||||
],
|
||||
targetSortOrder: 40,
|
||||
}),
|
||||
{
|
||||
circuitId: "circuit-1",
|
||||
circuitListId: "list-1",
|
||||
expectedSectionId: "lighting-1",
|
||||
targetSectionId: "lighting-2",
|
||||
expectedEquipmentIdentifier: "-1F1.7",
|
||||
targetEquipmentIdentifier: "-1F2.10",
|
||||
expectedSortOrder: 20,
|
||||
targetSortOrder: 40,
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it("does not fill target gaps", () => {
|
||||
assert.equal(
|
||||
createCircuitGroupMovePlan({
|
||||
circuit: {
|
||||
id: "circuit-1",
|
||||
circuitListId: "list-1",
|
||||
sectionId: "lighting-1",
|
||||
equipmentIdentifier: "-1F1.2",
|
||||
sortOrder: 10,
|
||||
},
|
||||
sourceGroup,
|
||||
targetGroup,
|
||||
targetCircuitEquipmentIdentifiers: ["-1F2.1", "-1F2.3"],
|
||||
targetSortOrder: 20,
|
||||
}).targetEquipmentIdentifier,
|
||||
"-1F2.4"
|
||||
);
|
||||
});
|
||||
|
||||
it("rejects cross-category, same-group and mismatched source moves", () => {
|
||||
const base = {
|
||||
circuit: {
|
||||
id: "circuit-1",
|
||||
circuitListId: "list-1",
|
||||
sectionId: "lighting-1",
|
||||
equipmentIdentifier: "-1F1.1",
|
||||
sortOrder: 10,
|
||||
},
|
||||
sourceGroup,
|
||||
targetGroup,
|
||||
targetCircuitEquipmentIdentifiers: [] as string[],
|
||||
targetSortOrder: 10,
|
||||
};
|
||||
assert.throws(
|
||||
() =>
|
||||
createCircuitGroupMovePlan({
|
||||
...base,
|
||||
targetGroup: {
|
||||
id: "single-1",
|
||||
category: "single_phase",
|
||||
groupNumber: 1,
|
||||
prefix: "-2F1.",
|
||||
},
|
||||
}),
|
||||
/same category/
|
||||
);
|
||||
assert.throws(
|
||||
() =>
|
||||
createCircuitGroupMovePlan({
|
||||
...base,
|
||||
targetGroup: sourceGroup,
|
||||
}),
|
||||
/different groups/
|
||||
);
|
||||
assert.throws(
|
||||
() =>
|
||||
createCircuitGroupMovePlan({
|
||||
...base,
|
||||
circuit: {
|
||||
...base.circuit,
|
||||
equipmentIdentifier: "-1F9.1",
|
||||
},
|
||||
}),
|
||||
/does not match/
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user