Update tests for project document serialization and add project name handling

This commit is contained in:
2026-04-11 13:26:46 +02:00
parent 8506b235db
commit 811b51bd6a
4 changed files with 83 additions and 4 deletions

View File

@@ -94,7 +94,10 @@ import { App } from "../../src/app/App";
import { createEditorStore } from "../../src/app/editor-store";
describe("App project persistence controls", () => {
let clickedDownloads: string[];
beforeEach(() => {
clickedDownloads = [];
viewportHostInstances.length = 0;
saveProjectPackageMock.mockClear();
loadProjectPackageMock.mockClear();
@@ -103,7 +106,11 @@ describe("App project persistence controls", () => {
createObjectURL: vi.fn(() => "blob:project"),
revokeObjectURL: vi.fn()
});
vi.spyOn(HTMLAnchorElement.prototype, "click").mockImplementation(() => undefined);
vi.spyOn(HTMLAnchorElement.prototype, "click").mockImplementation(
function (this: HTMLAnchorElement) {
clickedDownloads.push(this.download);
}
);
});
afterEach(() => {
@@ -147,4 +154,42 @@ describe("App project persistence controls", () => {
);
});
});
it("uses the project name rather than the active scene name for saved packages", async () => {
const store = createEditorStore();
render(<App store={store} />);
await waitFor(() => {
expect(viewportHostInstances.length).toBeGreaterThan(0);
});
fireEvent.change(screen.getByTestId("toolbar-scene-name"), {
target: { value: "Dungeon Scene" }
});
fireEvent.blur(screen.getByTestId("toolbar-scene-name"));
fireEvent.click(screen.getByRole("button", { name: "Save Project" }));
await waitFor(() => {
expect(clickedDownloads).toEqual(["untitled-project.we3d"]);
});
fireEvent.change(screen.getByTestId("toolbar-project-name"), {
target: { value: "Castle Layout" }
});
fireEvent.blur(screen.getByTestId("toolbar-project-name"));
fireEvent.click(screen.getByRole("button", { name: "Save Project" }));
await waitFor(() => {
expect(clickedDownloads).toEqual([
"untitled-project.we3d",
"castle-layout.we3d"
]);
});
expect(store.getState().document.name).toBe("Dungeon Scene");
expect(store.getState().projectDocument.name).toBe("Castle Layout");
});
});