Add E2E test for teleport trigger and update build-runtime-scene test

This commit is contained in:
2026-03-31 06:20:35 +02:00
parent cf00861b41
commit a2a24c0257
2 changed files with 83 additions and 0 deletions

View File

@@ -9,6 +9,7 @@ import {
createTeleportTargetEntity,
createTriggerVolumeEntity
} from "../../src/entities/entity-instances";
import { createTeleportPlayerInteractionLink, createToggleVisibilityInteractionLink } from "../../src/interactions/interaction-links";
import { buildRuntimeSceneFromDocument } from "../../src/runtime-three/runtime-scene-build";
describe("buildRuntimeSceneFromDocument", () => {
@@ -96,6 +97,21 @@ describe("buildRuntimeSceneFromDocument", () => {
[triggerVolume.id]: triggerVolume,
[teleportTarget.id]: teleportTarget,
[interactable.id]: interactable
},
interactionLinks: {
"link-teleport": createTeleportPlayerInteractionLink({
id: "link-teleport",
sourceEntityId: triggerVolume.id,
trigger: "enter",
targetEntityId: teleportTarget.id
}),
"link-hide-brush": createToggleVisibilityInteractionLink({
id: "link-hide-brush",
sourceEntityId: triggerVolume.id,
trigger: "exit",
targetBrushId: brush.id,
visible: false
})
}
};
document.world.background = {
@@ -223,6 +239,27 @@ describe("buildRuntimeSceneFromDocument", () => {
}
]
});
expect(runtimeScene.interactionLinks).toEqual([
{
id: "link-teleport",
sourceEntityId: "entity-trigger-door",
trigger: "enter",
action: {
type: "teleportPlayer",
targetEntityId: "entity-teleport-target-main"
}
},
{
id: "link-hide-brush",
sourceEntityId: "entity-trigger-door",
trigger: "exit",
action: {
type: "toggleVisibility",
targetBrushId: "brush-room-floor",
visible: false
}
}
]);
expect(runtimeScene.playerStart).toEqual({
entityId: "entity-player-start-main",
position: {
@@ -274,6 +311,7 @@ describe("buildRuntimeSceneFromDocument", () => {
teleportTargets: [],
interactables: []
});
expect(runtimeScene.interactionLinks).toEqual([]);
expect(runtimeScene.spawn).toEqual({
source: "fallback",
entityId: null,

View File

@@ -0,0 +1,45 @@
import { expect, test } from "@playwright/test";
test("Trigger Volume enter can teleport the player to a Teleport Target", async ({ page }) => {
const pageErrors: string[] = [];
const consoleErrors: string[] = [];
page.on("pageerror", (error) => {
pageErrors.push(error.message);
});
page.on("console", (message) => {
if (message.type() === "error") {
consoleErrors.push(message.text());
}
});
await page.goto("/");
await page.evaluate((storageKey) => {
window.localStorage.removeItem(storageKey);
}, "webeditor3d.scene-document-draft");
await page.reload();
await page.getByTestId("place-player-start").click();
await page.getByTestId("add-entity-triggerVolume").click();
await page.getByTestId("add-entity-teleportTarget").click();
await page.getByTestId("teleportTarget-position-x").fill("6");
await page.getByTestId("teleportTarget-position-x").press("Tab");
await page
.locator('[data-testid^="outliner-entity-"]')
.filter({ hasText: "Trigger Volume" })
.first()
.click();
await page.getByTestId("add-trigger-teleport-link").click();
await page.getByTestId("enter-run-mode").click();
await expect(page.getByTestId("runner-shell")).toBeVisible();
await expect(page.getByTestId("runner-player-position")).toContainText("6.00, 0.00, 0.00");
expect(pageErrors).toEqual([]);
expect(consoleErrors).toEqual([]);
});