Files

132 lines
4.4 KiB
TypeScript
Raw Permalink Normal View History

import { createNewDocument, drawOnCanvas, expect, selectTool, test } from "./helpers";
test.describe("Editor Layer Effects and Blend Modes", () => {
test.beforeEach(async ({ editorPage: page }) => {
await createNewDocument(page);
// Ensure layers tab is active
await page.locator("[data-testid='tab-layers']").click();
await page.waitForTimeout(300);
});
test("blend mode dropdown exists in layers panel", async ({ editorPage: page }) => {
const blendSelect = page.locator("[data-testid='blend-mode-select']");
await expect(blendSelect).toBeVisible();
// Should default to Normal (source-over)
await expect(blendSelect).toHaveValue("source-over");
});
test("blend mode can be changed", async ({ editorPage: page }) => {
const blendSelect = page.locator("[data-testid='blend-mode-select']");
await expect(blendSelect).toBeVisible();
// Change to Multiply
await blendSelect.selectOption("multiply");
await page.waitForTimeout(300);
await expect(blendSelect).toHaveValue("multiply");
// Change to Screen
await blendSelect.selectOption("screen");
await page.waitForTimeout(300);
await expect(blendSelect).toHaveValue("screen");
// Change to Overlay
await blendSelect.selectOption("overlay");
await page.waitForTimeout(300);
await expect(blendSelect).toHaveValue("overlay");
});
test("effects section exists (drop shadow, stroke)", async ({ editorPage: page }) => {
test.slow();
// We need a selected object for the effects section to appear.
// Draw something on the canvas to create an object.
await selectTool(page, "shape-rect");
await drawOnCanvas(page, 100, 100, 300, 250);
await page.waitForTimeout(500);
// Switch to move tool and click the shape to select it
await selectTool(page, "move");
const canvas = page.locator("canvas").first();
const box = await canvas.boundingBox();
if (!box) throw new Error("Canvas not found");
await page.mouse.click(box.x + 200, box.y + 175);
await page.waitForTimeout(300);
// Switch to layers tab to see effects
await page.locator("[data-testid='tab-layers']").click();
await page.waitForTimeout(300);
// The Layer Effects section should be visible
const effectsLabel = page.getByText("Layer Effects");
await expect(effectsLabel).toBeVisible();
// Drop Shadow and Stroke labels should exist
await expect(page.getByText("Drop Shadow").first()).toBeVisible();
await expect(page.getByText("Stroke").first()).toBeVisible();
});
test("drop shadow toggle enables shadow settings", async ({ editorPage: page }) => {
test.slow();
// Create and select a shape object
await selectTool(page, "shape-rect");
await drawOnCanvas(page, 100, 100, 300, 250);
await page.waitForTimeout(500);
await selectTool(page, "move");
const canvas = page.locator("canvas").first();
const box = await canvas.boundingBox();
if (!box) throw new Error("Canvas not found");
await page.mouse.click(box.x + 200, box.y + 175);
await page.waitForTimeout(300);
await page.locator("[data-testid='tab-layers']").click();
await page.waitForTimeout(300);
// Find the Drop Shadow checkbox
const dropShadowLabel = page.locator("label").filter({ hasText: "Drop Shadow" });
const dropShadowCheckbox = dropShadowLabel.locator("input[type='checkbox']");
await dropShadowCheckbox.scrollIntoViewIfNeeded();
// Initially unchecked
await expect(dropShadowCheckbox).not.toBeChecked();
// Enable drop shadow
await dropShadowCheckbox.check();
await page.waitForTimeout(300);
await expect(dropShadowCheckbox).toBeChecked();
// Expand the section to see controls by clicking the chevron
const expandBtn = dropShadowLabel.locator("..").locator("button[aria-label*='Expand']");
if (await expandBtn.isVisible()) {
await expandBtn.click();
await page.waitForTimeout(300);
}
});
test("layer opacity slider works", async ({ editorPage: page }) => {
const slider = page.locator("[data-testid='layer-opacity-slider']");
await expect(slider).toBeVisible();
// Default opacity should be 100 (full)
await expect(slider).toHaveValue("100");
// Change opacity to 50
await slider.fill("50");
await page.waitForTimeout(300);
await expect(slider).toHaveValue("50");
// Change back to 75
await slider.fill("75");
await page.waitForTimeout(300);
await expect(slider).toHaveValue("75");
});
});