Refactor scene transition tests and update component logic
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user