Files
OmniRoute/tests/unit/compression-pipeline-model.test.ts
Diego Rodrigues de Sa e Souza 7833453bdb feat(dashboard): T06/T03 — drag-reorder compression pipeline editor + studio e2e (#5727)
T06: named-combos editor gains a @dnd-kit/sortable drag-to-reorder stacked pipeline backed by a pure model (compressionPipelineModel.ts: add/remove/move/update, engine->intensity invariant, never-empty). CompressionPipelineEditor.tsx replaces the inline fixed list in CompressionCombosPageClient; order persists via the existing combos endpoint (no API change). T03: adds tests/e2e/compression-studio.spec.ts (Tela A render + Play/Compare tab switch), the dedicated compression-studio e2e combo-live-studio.spec.ts did not cover. TDD: compression-pipeline-model.test.ts (11) + compression-pipeline-editor.test.tsx (4). gaps v3.8.42 — T06 + T03.
2026-06-30 19:37:26 -03:00

112 lines
3.7 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
allowedIntensities,
normalizeStep,
moveLayer,
addLayer,
removeLayer,
updateLayer,
type EngineIntensities,
type PipelineStep,
} from "../../src/shared/components/compression/compressionPipelineModel.ts";
// T06 — pure pipeline model. Reorder/add/remove/update preserve invariants.
const TABLE: EngineIntensities = {
rtk: ["standard", "aggressive"],
caveman: ["lite", "full", "ultra"],
llmlingua: ["standard"],
};
const BASE: PipelineStep[] = [
{ engine: "rtk", intensity: "standard" },
{ engine: "caveman", intensity: "full" },
{ engine: "llmlingua", intensity: "standard" },
];
describe("compressionPipelineModel — normalize", () => {
it("keeps a valid intensity and coerces an invalid one to the first allowed", () => {
assert.deepEqual(normalizeStep({ engine: "caveman", intensity: "ultra" }, TABLE), {
engine: "caveman",
intensity: "ultra",
});
assert.deepEqual(normalizeStep({ engine: "caveman", intensity: "bogus" }, TABLE), {
engine: "caveman",
intensity: "lite",
});
});
it("falls back to standard for an unknown engine", () => {
assert.deepEqual(allowedIntensities("nope", TABLE), ["standard"]);
assert.deepEqual(normalizeStep({ engine: "nope" }, TABLE), {
engine: "nope",
intensity: "standard",
});
});
});
describe("compressionPipelineModel — moveLayer", () => {
it("moves a step and is always a permutation (same length + members)", () => {
const moved = moveLayer(BASE, 0, 2);
assert.deepEqual(
moved.map((s) => s.engine),
["caveman", "llmlingua", "rtk"]
);
assert.equal(moved.length, BASE.length);
});
it("does not mutate the input", () => {
const copy = BASE.map((s) => ({ ...s }));
moveLayer(BASE, 0, 2);
assert.deepEqual(BASE, copy);
});
it("returns an unchanged copy for out-of-range or no-op moves", () => {
assert.deepEqual(moveLayer(BASE, 1, 1), BASE);
assert.deepEqual(moveLayer(BASE, -1, 2), BASE);
assert.deepEqual(moveLayer(BASE, 0, 9), BASE);
});
});
describe("compressionPipelineModel — add/remove", () => {
it("addLayer appends a normalized step", () => {
const next = addLayer(BASE, { engine: "caveman", intensity: "bogus" }, TABLE);
assert.equal(next.length, 4);
assert.deepEqual(next[3], { engine: "caveman", intensity: "lite" });
});
it("removeLayer drops the indexed step but never goes below minLength", () => {
const next = removeLayer(BASE, 1);
assert.deepEqual(
next.map((s) => s.engine),
["rtk", "llmlingua"]
);
const single: PipelineStep[] = [{ engine: "rtk", intensity: "standard" }];
assert.deepEqual(removeLayer(single, 0), single, "must not remove the last step");
});
it("removeLayer ignores out-of-range index", () => {
assert.deepEqual(removeLayer(BASE, 9), BASE);
});
});
describe("compressionPipelineModel — updateLayer", () => {
it("patches a step and re-normalizes intensity for a new engine", () => {
const next = updateLayer(BASE, 0, { engine: "caveman" }, TABLE);
// rtk(standard) → caveman: 'standard' is not a caveman intensity → first allowed (lite)
assert.deepEqual(next[0], { engine: "caveman", intensity: "lite" });
// other steps untouched
assert.deepEqual(next[1], BASE[1]);
});
it("keeps a still-valid intensity when only the engine changes to a compatible one", () => {
const next = updateLayer(BASE, 1, { intensity: "ultra" }, TABLE);
assert.deepEqual(next[1], { engine: "caveman", intensity: "ultra" });
});
it("ignores out-of-range index", () => {
assert.deepEqual(updateLayer(BASE, 9, { engine: "rtk" }, TABLE), BASE);
});
});