Refactor scene transition tests and update component logic

This commit is contained in:
2026-04-15 03:50:17 +02:00
parent a7209957af
commit df33439a5b

View File

@@ -7,8 +7,7 @@ import {
} from "../../src/document/scene-document"; } from "../../src/document/scene-document";
import { import {
createPlayerStartEntity, createPlayerStartEntity,
createSceneEntryEntity, createSceneEntryEntity
createSceneExitEntity
} from "../../src/entities/entity-instances"; } from "../../src/entities/entity-instances";
const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => { const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => {
@@ -92,43 +91,27 @@ vi.mock("../../src/assets/project-asset-storage", () => ({
vi.mock("../../src/runner-web/RunnerCanvas", () => ({ vi.mock("../../src/runner-web/RunnerCanvas", () => ({
RunnerCanvas: (props: { RunnerCanvas: (props: {
sceneName: string; sceneName: string;
runtimeScene: { onSceneTransitionActivated(request: {
entities: { sourceEntityId: string | null;
sceneExits: Array<{
entityId: string;
targetSceneId: string;
targetEntryEntityId: string;
}>;
};
};
onSceneExitActivated(request: {
sourceExitEntityId: string;
targetSceneId: string; targetSceneId: string;
targetEntryEntityId: string; targetEntryEntityId: string;
}): void; }): void;
}) => { }) => {
const firstSceneExit = props.runtimeScene.entities.sceneExits[0] ?? null;
return ( return (
<div data-testid="mock-runner-canvas"> <div data-testid="mock-runner-canvas">
<div data-testid="mock-runner-scene-name">{props.sceneName}</div> <div data-testid="mock-runner-scene-name">{props.sceneName}</div>
<button <button
type="button" type="button"
data-testid="mock-trigger-scene-exit" data-testid="mock-trigger-scene-transition"
disabled={firstSceneExit === null}
onClick={() => { onClick={() => {
if (firstSceneExit === null) { props.onSceneTransitionActivated({
return; sourceEntityId: "entity-interactable-front-door",
} targetSceneId: "scene-house",
targetEntryEntityId: "entity-scene-entry-house-front"
props.onSceneExitActivated({
sourceExitEntityId: firstSceneExit.entityId,
targetSceneId: firstSceneExit.targetSceneId,
targetEntryEntityId: firstSceneExit.targetEntryEntityId
}); });
}} }}
> >
Trigger Scene Exit Trigger Scene Transition
</button> </button>
</div> </div>
); );
@@ -174,17 +157,6 @@ function createSceneTransitionProject() {
}, },
yawDegrees: 270 yawDegrees: 270
}); });
const outsideExit = createSceneExitEntity({
id: "entity-scene-exit-front-door",
position: {
x: 2,
y: 1,
z: 0
},
prompt: "Enter House",
targetSceneId: houseScene.id,
targetEntryEntityId: houseEntry.id
});
const projectDocument = createEmptyProjectDocument({ const projectDocument = createEmptyProjectDocument({
sceneId: outdoorScene.id, sceneId: outdoorScene.id,
sceneName: outdoorScene.name sceneName: outdoorScene.name
@@ -195,8 +167,7 @@ function createSceneTransitionProject() {
[outdoorScene.id]: { [outdoorScene.id]: {
...outdoorScene, ...outdoorScene,
entities: { entities: {
[outdoorPlayerStart.id]: outdoorPlayerStart, [outdoorPlayerStart.id]: outdoorPlayerStart
[outsideExit.id]: outsideExit
} }
}, },
[houseScene.id]: { [houseScene.id]: {
@@ -223,7 +194,7 @@ describe("App scene transition flow", () => {
vi.restoreAllMocks(); vi.restoreAllMocks();
}); });
it("switches runtime scenes through Scene Exits without changing the editor active scene", async () => { it("switches runtime scenes through scene transition requests without changing the editor active scene", async () => {
const store = createEditorStore({ const store = createEditorStore({
initialProjectDocument: createSceneTransitionProject() initialProjectDocument: createSceneTransitionProject()
}); });
@@ -250,7 +221,7 @@ describe("App scene transition flow", () => {
); );
expect(store.getState().activeSceneId).toBe("scene-outside"); expect(store.getState().activeSceneId).toBe("scene-outside");
fireEvent.click(screen.getByTestId("mock-trigger-scene-exit")); fireEvent.click(screen.getByTestId("mock-trigger-scene-transition"));
await waitFor(() => { await waitFor(() => {
expect(screen.getByTestId("mock-runner-scene-name")).toHaveTextContent( expect(screen.getByTestId("mock-runner-scene-name")).toHaveTextContent(