Files
pleno-vue/tests/unit/edge-gateway-workflow-helpers.spec.js
T
Jeppe Bundgaard 5d30690dfd Remove deprecated edge gateway components and associated unit tests:
- Deleted `EdgeGatewayAdvancedOperations.vue` and `EdgeGatewayContextPanel.vue`.
- Removed related unit tests in `use-edge-gateway-terminal.spec.js`.
- Cleaned up unused exports in `useEdgeGatewayTerminal.js`.
2026-04-20 11:20:27 +02:00

96 lines
3.0 KiB
JavaScript

import { describe, expect, it } from "vitest";
import {
buildRelayHealthRows,
mergeWorkspaceDraftState,
resolveIncidentPrimaryAction,
resolveNextWorkflowStep,
} from "@/components/displays/edgeGateway/edgeGatewayWorkspace.helpers.js";
describe("edge gateway workflow helpers", () => {
it("derives the next workflow step from selection state", () => {
expect(resolveNextWorkflowStep("select", false)).toBe("select");
expect(resolveNextWorkflowStep("manage", false)).toBe("manage");
expect(resolveNextWorkflowStep("select", true)).toBe("assess");
expect(resolveNextWorkflowStep("configure", true)).toBe("configure");
expect(resolveNextWorkflowStep("manage", true)).toBe("manage");
});
it("maps backend recommended actions into guided workflow CTAs", () => {
expect(
resolveIncidentPrimaryAction({
transport_health: { recommended_action: "retry_discovery" },
fallback_summary: {},
})
).toMatchObject({
label: "Kør discovery nu",
targetStep: "configure",
kind: "trigger_discovery",
});
const offlineAction = resolveIncidentPrimaryAction({
status: "OFFLINE",
transport_health: {},
fallback_summary: {},
});
expect(offlineAction.targetStep).toBe("manage");
expect(offlineAction.kind).toBe("switch_step");
expect(offlineAction.label).toContain("gatewaystyring");
});
it("formats relay health rows with fallback and execution labels", () => {
const rows = buildRelayHealthRows(
{
relay_health: [
{
binding_id: 12,
relay_id: "M-7",
fallback_mode: "CLOUD_ONLY",
execution_path: "cloud",
device_freshness_state: "STALE",
reason: "device_stale",
},
],
},
[]
);
expect(rows).toHaveLength(1);
expect(rows[0]).toMatchObject({
fallbackModeLabel: "Kun cloud",
executionPathLabel: "Cloud fallback",
freshnessLabel: "Forældet",
reasonLabel: "Shelly-device er for gammelt i discovery",
});
});
it("preserves dirty editor state while merging fresh server data", () => {
const merged = mergeWorkspaceDraftState({
gateway: {
bindings: [{ relay_id: "M-1", device_id: "server-device", channel: 1 }],
label: "Server label",
is_primary: true,
department_transport_mode: "cloud",
},
currentState: {
editableBindings: [{ relay_id: "M-9", device_id: "draft-device", channel: 0 }],
gatewayLabel: "Draft label",
gatewayIsPrimary: false,
transportMode: "gateway",
},
dirtyState: {
bindings: true,
gatewayLabel: true,
gatewayIsPrimary: true,
transportMode: false,
},
});
expect(merged.editableBindings).toEqual([{ relay_id: "M-9", device_id: "draft-device", channel: 0 }]);
expect(merged.gatewayLabel).toBe("Draft label");
expect(merged.gatewayIsPrimary).toBe(false);
expect(merged.transportMode).toBe("cloud");
});
});