test: cover map object editing flow
This commit is contained in:
parent
6f57b485d8
commit
2a7fa1871f
@ -138,6 +138,7 @@ export default function LocationMapBottomSheet({
|
||||
<label>
|
||||
Type
|
||||
<select
|
||||
aria-label="Object type"
|
||||
value={selectedObject.type}
|
||||
onChange={(event) => onObjectField("type", event.target.value)}
|
||||
>
|
||||
@ -149,6 +150,7 @@ export default function LocationMapBottomSheet({
|
||||
<label>
|
||||
Zone
|
||||
<select
|
||||
aria-label="Linked zone"
|
||||
value={objectZoneId(selectedObject)}
|
||||
onChange={(event) => onZoneLinkChange(event.target.value)}
|
||||
>
|
||||
|
||||
@ -210,6 +210,7 @@ export default function LocationMapCanvas({
|
||||
height="38"
|
||||
rx="10"
|
||||
onPointerDown={(event) => startDrag(event, object, "resize")}
|
||||
onClick={(event) => event.stopPropagation()}
|
||||
/>
|
||||
) : null}
|
||||
</g>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { expect, test, type Page } from "@playwright/test";
|
||||
import { mockConfig, seedAuthStorage } from "./helpers/e2e";
|
||||
import { confirmSlide, mockConfig, seedAuthStorage } from "./helpers/e2e";
|
||||
|
||||
const adminHousehold = { id: 1, name: "Map House", role: "admin", invite_code: "ABCD1234" };
|
||||
const memberHousehold = { ...adminHousehold, role: "member" };
|
||||
@ -253,7 +253,37 @@ test("admin creates a map from zones, saves a draft, and publishes it", async ({
|
||||
await page.getByRole("button", { name: "Edit Objects" }).click();
|
||||
const bakeryObject = page.locator(".location-map-object", { hasText: "Bakery" }).locator("rect").first();
|
||||
await bakeryObject.click();
|
||||
const moveBox = await bakeryObject.boundingBox();
|
||||
expect(moveBox).not.toBeNull();
|
||||
if (!moveBox) throw new Error("Bakery map object could not be moved");
|
||||
await page.mouse.move(moveBox.x + moveBox.width / 2, moveBox.y + moveBox.height / 2);
|
||||
await page.mouse.down();
|
||||
await page.mouse.move(moveBox.x + moveBox.width / 2 + 60, moveBox.y + moveBox.height / 2 + 40, {
|
||||
steps: 8,
|
||||
});
|
||||
await page.mouse.up();
|
||||
|
||||
const resizeHandle = page.locator(".location-map-resize-handle");
|
||||
await expect(resizeHandle).toBeVisible();
|
||||
const resizeBox = await resizeHandle.boundingBox();
|
||||
expect(resizeBox).not.toBeNull();
|
||||
if (!resizeBox) throw new Error("Resize handle was not measurable");
|
||||
await page.mouse.move(resizeBox.x + resizeBox.width / 2, resizeBox.y + resizeBox.height / 2);
|
||||
await page.mouse.down();
|
||||
await page.mouse.move(resizeBox.x + resizeBox.width / 2 + 45, resizeBox.y + resizeBox.height / 2 + 35, {
|
||||
steps: 8,
|
||||
});
|
||||
await page.mouse.up();
|
||||
|
||||
await page.getByRole("textbox", { name: "Label" }).fill("Bread Wall");
|
||||
await page.getByRole("button", { name: "Duplicate" }).click();
|
||||
await expect(page.getByRole("textbox", { name: "Label" })).toHaveValue("Bread Wall Copy");
|
||||
await page.getByLabel("Linked zone").selectOption("502");
|
||||
await page.getByRole("textbox", { name: "Label" }).fill("Temporary Freezer");
|
||||
await page.getByRole("button", { name: "Delete" }).click();
|
||||
await confirmSlide(page);
|
||||
await expect(page.locator(".location-map-object", { hasText: "Temporary Freezer" })).toHaveCount(0);
|
||||
|
||||
await expect(page.locator(".location-map-status")).toHaveText("Unsaved Draft");
|
||||
await page.getByRole("button", { name: "Preview Draft" }).click();
|
||||
await expect(page.locator(".location-map-object", { hasText: "Bread Wall" })).toBeVisible();
|
||||
@ -266,11 +296,14 @@ test("admin creates a map from zones, saves a draft, and publishes it", async ({
|
||||
await expect(page.locator(".location-map-status")).toHaveText("Draft");
|
||||
|
||||
expect(savedPayload).not.toBeNull();
|
||||
expect(savedPayload?.objects).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ label: "Bread Wall", zone_id: 501, x: 28, y: 28 }),
|
||||
])
|
||||
);
|
||||
const savedObjects = savedPayload?.objects as Array<Record<string, unknown>>;
|
||||
const savedBreadWall = savedObjects.find((object) => object.label === "Bread Wall");
|
||||
expect(savedBreadWall).toEqual(expect.objectContaining({ zone_id: 501 }));
|
||||
expect(Number(savedBreadWall?.x)).toBeGreaterThan(28);
|
||||
expect(Number(savedBreadWall?.y)).toBeGreaterThan(28);
|
||||
expect(Number(savedBreadWall?.width)).toBeGreaterThan(300);
|
||||
expect(Number(savedBreadWall?.height)).toBeGreaterThan(180);
|
||||
expect(savedObjects.some((object) => object.label === "Temporary Freezer")).toBe(false);
|
||||
|
||||
await page.getByRole("button", { name: "Publish" }).click();
|
||||
await expect(page.locator(".location-map-status")).toHaveText("Published");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user