mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix(editor): apply layer effects + object flip, add Beta badge, repair e2e specs
While getting the editor e2e suite green, three "stale test" failures turned out to be real bugs (per the reporter's hunch that tests might be catching real issues): - Layer effects (drop shadow, glows) never applied. The panel wrote effects into `attrs.effects` through updateObject, but the panel and renderer both read the object's top-level `effects`, so the toggle never persisted. Add a dedicated `setObjectEffects` store action and route the panel through it. - Object flip (transform tool) did nothing. No object renderer applied `scaleX`/`scaleY`, and the flip negated scale without compensating position. Apply scale in the renderers and flip in place: mirror points for stroke objects, negate scale + shift position for sized objects. (The paint-bucket / pixel-tool coordinate bug and the broken-at-non-100%-zoom export were fixed in the preceding #259 change.) Also adds a small "Beta" badge to the editor (welcome heading + nav link) and repairs ~18 stale editor e2e specs whose selectors/assertions had drifted from the current UI: the options bar is `h-9` not `h-10` (added a stable `data-testid`), the menu bar is `h-8`/`bg-background`, the flip button aria-labels are lowercase, the welcome "Image Editor" heading collides with an sr-only `<h1>`, the color-picker tabs need a role-scoped selector, and the magic-wand / flip tests now use deterministic setup and assert the actual effect instead of fragile screenshot diffs.
This commit is contained in:
@@ -40,8 +40,8 @@ test.describe("Editor Options Bar", () => {
|
||||
await expect(page.locator("#transform-rotation")).toBeVisible();
|
||||
|
||||
// Flip buttons should be visible
|
||||
await expect(page.locator("button[aria-label='Flip Horizontal']")).toBeVisible();
|
||||
await expect(page.locator("button[aria-label='Flip Vertical']")).toBeVisible();
|
||||
await expect(page.locator("button[aria-label='Flip horizontal']")).toBeVisible();
|
||||
await expect(page.locator("button[aria-label='Flip vertical']")).toBeVisible();
|
||||
|
||||
// Aspect ratio lock button should be visible
|
||||
const lockBtn = page.locator("button[aria-label*='aspect ratio']");
|
||||
@@ -51,7 +51,7 @@ test.describe("Editor Options Bar", () => {
|
||||
test("brush options show size, opacity, hardness", async ({ editorPage: page }) => {
|
||||
await selectTool(page, "brush");
|
||||
|
||||
const optionsBar = page.locator(".flex.items-center.h-10");
|
||||
const optionsBar = page.locator('[data-testid="editor-options-bar"]');
|
||||
|
||||
// Size, Opacity, and Hardness labels should be in the options bar
|
||||
await expect(optionsBar.getByText("Size")).toBeVisible();
|
||||
|
||||
Reference in New Issue
Block a user