Add tests for project sequence templates

This commit is contained in:
2026-04-15 00:08:00 +02:00
parent 6bfb25ed6d
commit 06f3db4cf5

View File

@@ -0,0 +1,89 @@
import { describe, expect, it } from "vitest";
import { createInteractionControlTargetRef } from "../../src/controls/control-surface";
import { createDefaultInteractionProjectSequence } from "../../src/sequencer/project-sequence-templates";
import type { ProjectDialogue } from "../../src/dialogues/project-dialogues";
import type { ProjectScheduleTargetOption } from "../../src/scheduler/project-schedule-control-options";
describe("project sequence templates", () => {
it("prefers a dialogue impulse step when a project dialogue exists", () => {
const dialogue: ProjectDialogue = {
id: "dialogue-merchant",
title: "Merchant",
lines: [
{
id: "dialogue-line-merchant-1",
speakerName: "Merchant",
text: "Fresh fruit."
}
]
};
const sequence = createDefaultInteractionProjectSequence({
source: {
id: "entity-interactable-merchant",
kind: "interactable",
name: "Merchant Stall"
},
dialogues: [dialogue],
targetOptions: []
});
expect(sequence).toEqual(
expect.objectContaining({
title: "Merchant Stall Dialogue",
steps: [
{
stepClass: "impulse",
type: "startDialogue",
dialogueId: "dialogue-merchant"
}
]
})
);
});
it("falls back to an impulse control step for the selected interactable when no dialogue exists", () => {
const targetOption: ProjectScheduleTargetOption = {
key: "interaction:interactable:entity-interactable-gate",
target: createInteractionControlTargetRef(
"interactable",
"entity-interactable-gate"
),
label: "Gate Lever",
subtitle: "Main Scene",
groupLabel: "Interactions",
defaults: {}
};
const sequence = createDefaultInteractionProjectSequence({
source: {
id: "entity-interactable-gate",
kind: "interactable",
name: "Gate Lever"
},
dialogues: [],
targetOptions: [targetOption]
});
expect(sequence).toEqual(
expect.objectContaining({
title: "Gate Lever Sequence",
steps: [
{
stepClass: "impulse",
type: "controlEffect",
effect: {
type: "setInteractionEnabled",
target: createInteractionControlTargetRef(
"interactable",
"entity-interactable-gate"
),
enabled: true
}
}
]
})
);
});
});