43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
import { describe, expect, it } from "vitest";
|
|
|
|
import fixture from "@/tests/fixtures/live-product-launch-update-response.json";
|
|
import { formulateQuestion } from "@/lib/graph/question-formulator.js";
|
|
|
|
describe("RTO.A5 explicit-node formulation apparatus", () => {
|
|
it("formulates directly for nxmeiab without selector invocation or graph mutation", () => {
|
|
const graph = structuredClone(fixture.updatedSituationGraph);
|
|
const graphBefore = structuredClone(graph);
|
|
const capturedSelectedQuestionNodeIdBefore = fixture.selectedQuestion.nodeId;
|
|
const activeUnknownNodeIdBefore = graph.activeUnknownNodeId ?? null;
|
|
const resolvedNodeIdsBefore = structuredClone(graph.resolvedNodeIds || []);
|
|
|
|
const target = graph.nodes.find((node) => node.id === "nxmeiab");
|
|
|
|
expect(target).toBeTruthy();
|
|
expect(target?.kind).toBe("unknown");
|
|
expect(target?.status).not.toBe("resolved");
|
|
|
|
const result = formulateQuestion({
|
|
node: target,
|
|
graph,
|
|
context: {
|
|
selectionState: {
|
|
status: "selected",
|
|
nodeId: "nxmeiab",
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(result).toBeTruthy();
|
|
expect(typeof result.question).toBe("string");
|
|
expect(result.question.length).toBeGreaterThan(0);
|
|
expect(result.question.toLowerCase()).toMatch(
|
|
/competitor|competitors|similar products|release/,
|
|
);
|
|
|
|
expect(fixture.selectedQuestion.nodeId).toBe(capturedSelectedQuestionNodeIdBefore);
|
|
expect(graph.activeUnknownNodeId ?? null).toBe(activeUnknownNodeIdBefore);
|
|
expect(graph.resolvedNodeIds || []).toEqual(resolvedNodeIdsBefore);
|
|
expect(graph).toEqual(graphBefore);
|
|
});
|
|
}); |