diff --git a/tests/domain/interaction-links.validation.test.ts b/tests/domain/interaction-links.validation.test.ts index 9ddea073..d7e69f47 100644 --- a/tests/domain/interaction-links.validation.test.ts +++ b/tests/domain/interaction-links.validation.test.ts @@ -3,14 +3,18 @@ import { describe, expect, it } from "vitest"; import { createBoxBrush } from "../../src/document/brushes"; import { createEmptySceneDocument } from "../../src/document/scene-document"; import { validateSceneDocument } from "../../src/document/scene-document-validation"; -import { createPlayerStartEntity, createTeleportTargetEntity, createTriggerVolumeEntity } from "../../src/entities/entity-instances"; +import { createInteractableEntity, createPlayerStartEntity, createTeleportTargetEntity, createTriggerVolumeEntity } from "../../src/entities/entity-instances"; import { createTeleportPlayerInteractionLink, createToggleVisibilityInteractionLink } from "../../src/interactions/interaction-links"; describe("interaction link validation", () => { - it("accepts valid Trigger Volume teleport and visibility links", () => { + it("accepts valid Trigger Volume and Interactable links", () => { const triggerVolume = createTriggerVolumeEntity({ id: "entity-trigger-main" }); + const interactable = createInteractableEntity({ + id: "entity-interactable-main", + prompt: "Use Console" + }); const teleportTarget = createTeleportTargetEntity({ id: "entity-teleport-main" }); @@ -24,6 +28,7 @@ describe("interaction link validation", () => { }, entities: { [triggerVolume.id]: triggerVolume, + [interactable.id]: interactable, [teleportTarget.id]: teleportTarget }, interactionLinks: { @@ -39,6 +44,12 @@ describe("interaction link validation", () => { trigger: "exit", targetBrushId: brush.id, visible: false + }), + "link-click-teleport": createTeleportPlayerInteractionLink({ + id: "link-click-teleport", + sourceEntityId: interactable.id, + trigger: "click", + targetEntityId: teleportTarget.id }) } }; @@ -55,11 +66,15 @@ describe("interaction link validation", () => { const triggerVolume = createTriggerVolumeEntity({ id: "entity-trigger-main" }); + const interactable = createInteractableEntity({ + id: "entity-interactable-main" + }); const document = { ...createEmptySceneDocument(), entities: { [playerStart.id]: playerStart, - [triggerVolume.id]: triggerVolume + [triggerVolume.id]: triggerVolume, + [interactable.id]: interactable }, interactionLinks: { "link-invalid-source": createTeleportPlayerInteractionLink({ @@ -73,6 +88,12 @@ describe("interaction link validation", () => { sourceEntityId: triggerVolume.id, trigger: "exit", targetBrushId: "brush-missing" + }), + "link-invalid-click-trigger": createTeleportPlayerInteractionLink({ + id: "link-invalid-click-trigger", + sourceEntityId: interactable.id, + trigger: "enter", + targetEntityId: "entity-missing-teleport-target" }) } }; @@ -92,6 +113,14 @@ describe("interaction link validation", () => { expect.objectContaining({ code: "missing-visibility-target-brush", path: "interactionLinks.link-invalid-visibility.action.targetBrushId" + }), + expect.objectContaining({ + code: "unsupported-interaction-trigger", + path: "interactionLinks.link-invalid-click-trigger.trigger" + }), + expect.objectContaining({ + code: "missing-teleport-target-entity", + path: "interactionLinks.link-invalid-click-trigger.action.targetEntityId" }) ]) );