Render protected circuit structure
This commit is contained in:
@@ -2,10 +2,18 @@ import assert from "node:assert/strict";
|
||||
import { describe, it } from "node:test";
|
||||
import {
|
||||
getInsertionSortOrder,
|
||||
isGridInsertionRowType,
|
||||
resolveGridInsertionIntent,
|
||||
} from "../src/frontend/utils/circuit-grid-insertion.js";
|
||||
|
||||
describe("circuit grid insertion", () => {
|
||||
it("excludes structural rows from insertion and deletion commands", () => {
|
||||
assert.equal(isGridInsertionRowType("headerComponent"), false);
|
||||
assert.equal(isGridInsertionRowType("groupComponent"), false);
|
||||
assert.equal(isGridInsertionRowType("footerComponent"), false);
|
||||
assert.equal(isGridInsertionRowType("circuitCompact"), true);
|
||||
});
|
||||
|
||||
it("inserts a circuit after circuit-level selections", () => {
|
||||
assert.deepEqual(
|
||||
resolveGridInsertionIntent(
|
||||
|
||||
@@ -2,6 +2,7 @@ import assert from "node:assert/strict";
|
||||
import { describe, it } from "node:test";
|
||||
import {
|
||||
buildVisibleGridRows,
|
||||
buildVisibleGridRowsWithStructure,
|
||||
filterAndSortCircuitSections,
|
||||
getDistinctFilterValues,
|
||||
} from "../src/frontend/utils/circuit-grid-projection.js";
|
||||
@@ -176,6 +177,66 @@ describe("circuit grid projection", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("normalizes structural component rows around complete circuit groups", () => {
|
||||
const component = {
|
||||
circuitListId: "list-1",
|
||||
equipmentIdentifier: "-Q0",
|
||||
name: "Hauptschalter",
|
||||
role: "main_switch" as const,
|
||||
placement: "header" as const,
|
||||
sortOrder: 10,
|
||||
};
|
||||
const groupedSections = sections.map((section) => ({
|
||||
...section,
|
||||
components: [
|
||||
{
|
||||
...component,
|
||||
id: "group-rcd",
|
||||
sectionId: section.id,
|
||||
equipmentIdentifier: "-1Q1.0",
|
||||
name: "Gruppen-FI",
|
||||
role: "group_residual_current_protection" as const,
|
||||
placement: "group" as const,
|
||||
},
|
||||
],
|
||||
}));
|
||||
const rows = buildVisibleGridRowsWithStructure(groupedSections, {
|
||||
headerComponents: [{ ...component, id: "main" }],
|
||||
footerComponents: [
|
||||
{
|
||||
...component,
|
||||
id: "actor",
|
||||
equipmentIdentifier: "-K1",
|
||||
name: "KNX Aktor",
|
||||
role: "auxiliary",
|
||||
placement: "footer",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
assert.deepEqual(
|
||||
rows.map((row) => row.rowType),
|
||||
[
|
||||
"headerComponent",
|
||||
"section",
|
||||
"groupComponent",
|
||||
"circuitCompact",
|
||||
"circuitSummary",
|
||||
"deviceRow",
|
||||
"deviceRow",
|
||||
"reserveCircuit",
|
||||
"placeholder",
|
||||
"footerComponent",
|
||||
]
|
||||
);
|
||||
assert.equal(
|
||||
rows.find((row) => row.rowType === "groupComponent")?.cells.some(
|
||||
(cell) => cell.editable
|
||||
),
|
||||
false
|
||||
);
|
||||
});
|
||||
|
||||
it("collects filter options from both circuit and device values", () => {
|
||||
const values = getDistinctFilterValues(sections, [
|
||||
{ key: "displayName", label: "Display name" },
|
||||
|
||||
Reference in New Issue
Block a user