72 lines
2.0 KiB
JavaScript

const { state } = require("../src/state");
const { DEFAULT_CHANNEL_MAP } = require("../src/mapping/canonical");
describe("StateManager", () => {
beforeEach(() => {
state.emitterMap = null;
state.artNetConfig = null;
state.currentFrame = null;
state.presets = new Map();
state.playlist = { entries: [], activeIndex: -1, loop: true };
state.blackout = false;
state.outputEnabled = false;
});
it("stores and retrieves emitter map", () => {
const emitter = {
id: "e1",
xyz: [0, 0, 0],
region: "top",
sourceUniverse: 0,
sourceDmxSlot: 1,
destinationRouteId: "192.168.1.101",
channelMap: { ...DEFAULT_CHANNEL_MAP },
provenance: { sourceFile: "t.json", checksum: "x", importedAt: "now" },
};
const map = {
version: 1,
generatedAt: "now",
sourceFile: "t.json",
checksum: "x",
emitters: [emitter],
universeCount: 1,
slotOccupancy: new Map([[0, new Set([1, 2])]]),
};
state.setEmitterMap(map);
expect(state.getEmitterMap()).toBe(map);
state.clearEmitterMap();
expect(state.getEmitterMap()).toBeNull();
});
it("tracks blackout state", () => {
expect(state.isBlackout()).toBe(false);
state.setBlackout(true);
expect(state.isBlackout()).toBe(true);
state.setBlackout(false);
expect(state.isBlackout()).toBe(false);
});
it("tracks output enabled state", () => {
expect(state.isOutputEnabled()).toBe(false);
state.setOutputEnabled(true);
expect(state.isOutputEnabled()).toBe(true);
});
it("stores and retrieves frame", () => {
const frame = {
timestamp: 1,
fps: 40,
intensities: new Map([["a", { top: 0.5, bottom: 0.5 }]]),
};
state.setFrame(frame);
expect(state.getFrame()).toBe(frame);
});
it("snapshot reports state", () => {
const snap = state.snapshot();
expect(snap).toHaveProperty("hasEmitterMap");
expect(snap).toHaveProperty("blackout");
expect(snap).toHaveProperty("outputEnabled");
});
});