mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
91 lines
3.0 KiB
TypeScript
91 lines
3.0 KiB
TypeScript
import { createNewDocument, expect, selectTool, test } from "./helpers";
|
|
|
|
test.describe("Editor Selection Tools", () => {
|
|
test.beforeEach(async ({ editorPage: page }) => {
|
|
await createNewDocument(page);
|
|
});
|
|
|
|
test("move tool activates via V shortcut", async ({ editorPage: page }) => {
|
|
// Start with a different tool
|
|
await selectTool(page, "brush");
|
|
|
|
await page.keyboard.press("v");
|
|
await page.waitForTimeout(300);
|
|
|
|
await expect(page.locator("[data-tool='move']")).toHaveAttribute("data-tool-active", "true");
|
|
});
|
|
|
|
test("move tool shows options bar label", async ({ editorPage: page }) => {
|
|
await selectTool(page, "move");
|
|
|
|
// Options bar should show "move" label
|
|
const optionsBar = page.locator(".flex.items-center.h-10");
|
|
await expect(optionsBar.getByText("move", { exact: false })).toBeVisible();
|
|
});
|
|
|
|
test("marquee activates via M shortcut", async ({ editorPage: page }) => {
|
|
await page.keyboard.press("m");
|
|
await page.waitForTimeout(300);
|
|
|
|
await expect(page.locator("[data-tool='marquee-rect']")).toHaveAttribute(
|
|
"data-tool-active",
|
|
"true",
|
|
);
|
|
});
|
|
|
|
test("marquee cycles subtypes on repeated M press", async ({ editorPage: page }) => {
|
|
await page.keyboard.press("m");
|
|
await page.waitForTimeout(300);
|
|
|
|
await expect(page.locator("[data-tool='marquee-rect']")).toHaveAttribute(
|
|
"data-tool-active",
|
|
"true",
|
|
);
|
|
|
|
// Press M again to cycle to ellipse marquee
|
|
await page.keyboard.press("m");
|
|
await page.waitForTimeout(300);
|
|
|
|
await expect(page.locator("[data-tool='marquee-rect']")).toHaveAttribute(
|
|
"data-tool-active",
|
|
"false",
|
|
);
|
|
});
|
|
|
|
test("crop activates via C shortcut", async ({ editorPage: page }) => {
|
|
await page.keyboard.press("c");
|
|
await page.waitForTimeout(300);
|
|
|
|
await expect(page.locator("[data-tool='crop']")).toHaveAttribute("data-tool-active", "true");
|
|
});
|
|
|
|
test("crop options show aspect ratio dropdown", async ({ editorPage: page }) => {
|
|
await selectTool(page, "crop");
|
|
|
|
// Crop options bar should have aspect ratio dropdown
|
|
const ratioLabel = page.getByText("Ratio:");
|
|
await expect(ratioLabel).toBeVisible();
|
|
|
|
const ratioSelect = page.locator("#crop-aspect");
|
|
await expect(ratioSelect).toBeVisible();
|
|
|
|
// The dropdown should have a "Free" option
|
|
const freeOption = ratioSelect.locator("option", { hasText: "Free" });
|
|
await expect(freeOption).toBeAttached();
|
|
});
|
|
|
|
test("crop options show width and height inputs", async ({ editorPage: page }) => {
|
|
await selectTool(page, "crop");
|
|
|
|
await expect(page.locator("#crop-width")).toBeVisible();
|
|
await expect(page.locator("#crop-height")).toBeVisible();
|
|
});
|
|
|
|
test("crop options show apply and cancel buttons", async ({ editorPage: page }) => {
|
|
await selectTool(page, "crop");
|
|
|
|
await expect(page.locator("button[aria-label='Apply Crop']")).toBeVisible();
|
|
await expect(page.locator("button[aria-label='Cancel Crop']")).toBeVisible();
|
|
});
|
|
});
|