72 lines
3.4 KiB
JavaScript
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(() => {");
|
|
});
|
|
});
|