Files
pleno-vue/tests/unit/self-serve-studio-managed-inspector.spec.js
T

72 lines
3.4 KiB
JavaScript

import { readFileSync } from "node:fs";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
const readSource = (relativePath) => readFileSync(join(process.cwd(), relativePath), "utf8");
describe("self-serve studio managed inspector", () => {
const studioSource = () =>
readSource("src/views/dashboards/departmentDashboard/modules/self-serve/DepartmentSelfServeStudio.vue");
it("routes non-graph self-serve nodes to managed inspector panels", () => {
const source = studioSource();
expect(source).toContain("const managedInspectorNodeKinds = [");
for (const nodeKind of [
"runtime_checkpoint",
"vehicle_type",
"machine_type",
"edge_gateway",
"relay_binding",
"relay",
]) {
expect(source).toContain(`"${nodeKind}"`);
}
expect(source).toContain('v-else-if="isSelectedManaged"');
expect(source).toContain('data-testid="studio-managed-inspector"');
expect(source).toContain('data-testid="studio-runtime-inspector"');
expect(source).toContain('data-testid="studio-gateway-inspector"');
expect(source).toContain('data-testid="studio-binding-inspector"');
expect(source).toContain('data-testid="studio-relay-inspector"');
});
it("persists vehicle and machine type configuration through their owning endpoints", () => {
const source = studioSource();
expect(source).toContain("const normalizeVehicleTypeForm = (raw = {}) => {");
expect(source).toContain("const saveVehicleTypeProduct = async () => {");
expect(source).toContain("if (!canEditVehicleTypeProduct.value) {");
expect(source).toContain('await requestPut("/products", {');
expect(source).toContain('data-testid="studio-vehicle-type-form"');
expect(source).toContain('data-testid="studio-vehicle-type-name"');
expect(source).toContain(':disabled="!canEditVehicleTypeProduct"');
expect(source).toContain("const normalizeMachineTypeForm = (raw = {}) => {");
expect(source).toContain("const saveMachineType = async () => {");
expect(source).toContain('await requestPut("/department/selfserve/machine-types", {');
});
it("requires superuser access before saving vehicle type product catalog fields", () => {
const source = studioSource();
expect(source).toContain("const canEditVehicleTypeProduct = computed(() =>");
expect(source).toContain("Boolean(permissions.value.can_edit) && SessionUser.canAccessSuperUser()");
expect(source.indexOf("if (!canEditVehicleTypeProduct.value) {")).toBeLessThan(
source.indexOf('await requestPut("/products", {')
);
expect(source).toContain("Only superusers can update vehicle type product catalog fields.");
});
it("manages virtual hardware from selected gateway and relay binding nodes", () => {
const source = studioSource();
expect(source).toContain("const saveSelectedVirtualGateway = () => {");
expect(source).toContain('return applyVirtualHardwareOperation("upsert_gateway", {');
expect(source).toContain("const saveSelectedVirtualBinding = () => {");
expect(source).toContain('return applyVirtualHardwareOperation("upsert_binding", payload);');
expect(source).toContain("const deleteSelectedVirtualBinding = () =>");
expect(source).toContain("deleteVirtualBinding({");
expect(source).toContain("const selectedGatewayBindingEntries = computed(() => {");
expect(source).toContain("const selectedRelayBindingEntries = computed(() => {");
});
});