Files
NODEDC_MISSION_CORE/apps/control-station/test/viewerSettingsTarget.test.mjs
T

89 lines
2.5 KiB
JavaScript

import assert from "node:assert/strict";
import { after, before, test } from "node:test";
import { createServer } from "vite";
let server;
let viewerSettingsTargetIdentity;
before(async () => {
server = await createServer({
appType: "custom",
logLevel: "silent",
server: { middlewareMode: true },
});
({ viewerSettingsTargetIdentity } = await server.ssrLoadModule(
"/src/core/observation/viewerSettingsTarget.ts",
));
});
after(async () => {
await server?.close();
});
function runtimeState({ acquisitionId, sessionId = "session-a", deviceId = "device-a" }) {
return {
phase: "connected",
sourceMode: "idle",
activeDevice: {
pluginId: "xgrids-k1",
modelId: "lixel-k1",
instanceId: "instance-a",
displayName: "K1",
},
deviceSession: { sessionId, deviceId },
acquisition: acquisitionId
? {
acquisitionId,
deviceId,
deviceSessionId: sessionId,
compatibilityProfileId: "profile-a",
controlMode: "live",
state: "streaming",
stateRevision: 1,
operatorInstructions: [],
}
: null,
};
}
test("new acquisition on the same control session keeps the viewer settings target stable", () => {
const beforeStart = viewerSettingsTargetIdentity(runtimeState({}));
const firstRun = viewerSettingsTargetIdentity(runtimeState({ acquisitionId: "acquisition-a" }));
const secondRun = viewerSettingsTargetIdentity(runtimeState({ acquisitionId: "acquisition-b" }));
assert.equal(firstRun, beforeStart);
assert.equal(secondRun, beforeStart);
});
test("temporary loss of control authority does not reapply settings within one device session", () => {
const authoritative = runtimeState({ acquisitionId: "acquisition-a" });
const authorityUnavailable = {
...authoritative,
activeDevice: null,
phase: "starting",
};
assert.equal(
viewerSettingsTargetIdentity(authorityUnavailable),
viewerSettingsTargetIdentity(authoritative),
);
});
test("a new control session or device produces a new viewer settings target", () => {
const original = viewerSettingsTargetIdentity(runtimeState({ acquisitionId: "acquisition-a" }));
assert.notEqual(
viewerSettingsTargetIdentity(runtimeState({ sessionId: "session-b" })),
original,
);
assert.notEqual(
viewerSettingsTargetIdentity(runtimeState({ deviceId: "device-b" })),
original,
);
});
test("an unconfigured runtime uses the local target", () => {
assert.equal(viewerSettingsTargetIdentity(null), "local-runtime");
});