mirror of
https://github.com/penpot/penpot.git
synced 2026-04-25 11:18:36 +00:00
* ✨ Add aria role to token pill * ✨ Clean up unused vars, imports and unneeded intercepts in tokens tests * ✨ Add regression test for bug 13302 (highlight token)
249 lines
7.7 KiB
JavaScript
249 lines
7.7 KiB
JavaScript
import { test, expect } from "@playwright/test";
|
|
import { WasmWorkspacePage } from "../../pages/WasmWorkspacePage";
|
|
import { setupEmptyTokensFileRender, setupTokensFileRender } from "./helpers";
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await WasmWorkspacePage.init(page);
|
|
await WasmWorkspacePage.mockConfigFlags(page, [
|
|
"enable-feature-design-tokens-v1",
|
|
]);
|
|
});
|
|
|
|
test.describe("Tokens: Sets Tab", () => {
|
|
const changeSetInput = async (sidebar, setName, finalKey = "Enter") => {
|
|
const setInput = sidebar.locator("input:focus");
|
|
await expect(setInput).toBeVisible();
|
|
await setInput.fill(setName);
|
|
await setInput.press(finalKey);
|
|
};
|
|
|
|
const createSet = async (sidebar, setName, finalKey = "Enter") => {
|
|
sidebar
|
|
.getByRole("button", { name: "Add set" })
|
|
.click();
|
|
|
|
await changeSetInput(sidebar, setName, finalKey);
|
|
};
|
|
|
|
const assertEmptySetsList = async (el) => {
|
|
const buttons = await el.getByRole("button").allTextContents();
|
|
const filteredButtons = buttons.filter((text) => text === "Create one.");
|
|
await expect(filteredButtons.length).toEqual(2); // We assume there are no themes, so we have two "Create one" buttons.
|
|
};
|
|
|
|
const assertSetsList = async (el, sets) => {
|
|
const buttons = await el.getByRole("button").allTextContents();
|
|
const filteredButtons = buttons.filter(
|
|
(text) => text && text !== "Create one.",
|
|
);
|
|
await expect(filteredButtons).toEqual(sets);
|
|
};
|
|
|
|
test("User creates sets tree structure by entering a set path", async ({
|
|
page,
|
|
}) => {
|
|
const { tokenThemesSetsSidebar, tokenContextMenuForSet } =
|
|
await setupEmptyTokensFileRender(page);
|
|
|
|
tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "Add set" })
|
|
.click();
|
|
|
|
await createSet(tokenThemesSetsSidebar, "core/colors/light");
|
|
await createSet(tokenThemesSetsSidebar, "core/colors/dark");
|
|
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core",
|
|
"colors",
|
|
"light",
|
|
"dark",
|
|
]);
|
|
|
|
// User renames set
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "light" })
|
|
.click({ button: "right" });
|
|
await expect(tokenContextMenuForSet).toBeVisible();
|
|
await tokenContextMenuForSet.getByText("Rename").click();
|
|
await changeSetInput(tokenThemesSetsSidebar, "light-renamed");
|
|
|
|
// User cancels during editing
|
|
await createSet(tokenThemesSetsSidebar, "core/colors/dark", "Escape");
|
|
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core",
|
|
"colors",
|
|
"light-renamed",
|
|
"dark",
|
|
]);
|
|
|
|
// Creates nesting by renaming set with double click
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "light-renamed" })
|
|
.click({ button: "right" });
|
|
await expect(tokenContextMenuForSet).toBeVisible();
|
|
await tokenContextMenuForSet.getByText("Rename").click();
|
|
await changeSetInput(tokenThemesSetsSidebar, "nested/light");
|
|
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core",
|
|
"colors",
|
|
"nested",
|
|
"light",
|
|
"dark",
|
|
]);
|
|
|
|
// Create set in group
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "core" })
|
|
.click({ button: "right" });
|
|
await expect(tokenContextMenuForSet).toBeVisible();
|
|
await tokenContextMenuForSet.getByText("Add set to this group").click();
|
|
await changeSetInput(tokenThemesSetsSidebar, "sizes/small");
|
|
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core",
|
|
"colors",
|
|
"nested",
|
|
"light",
|
|
"dark",
|
|
"sizes",
|
|
"small",
|
|
]);
|
|
|
|
// User deletes set
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "nested" })
|
|
.click({ button: "right" });
|
|
await expect(tokenContextMenuForSet).toBeVisible();
|
|
await tokenContextMenuForSet.getByText("Delete").click();
|
|
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core",
|
|
"colors",
|
|
"dark",
|
|
"sizes",
|
|
"small",
|
|
]);
|
|
|
|
// User deletes all sets
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "core" })
|
|
.click({ button: "right" });
|
|
await expect(tokenContextMenuForSet).toBeVisible();
|
|
await tokenContextMenuForSet.getByText("Delete").click();
|
|
|
|
await assertEmptySetsList(tokenThemesSetsSidebar);
|
|
});
|
|
|
|
test("User can create & edit sets and set groups with an identical name", async ({
|
|
page,
|
|
}) => {
|
|
const { tokenThemesSetsSidebar } =
|
|
await setupEmptyTokensFileRender(page);
|
|
|
|
tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "Add set" })
|
|
.click();
|
|
|
|
await createSet(tokenThemesSetsSidebar, "core/colors");
|
|
await createSet(tokenThemesSetsSidebar, "core");
|
|
await assertSetsList(tokenThemesSetsSidebar, ["core", "colors", "core"]);
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "core" })
|
|
.nth(0)
|
|
.dblclick();
|
|
await changeSetInput(tokenThemesSetsSidebar, "core-group-renamed");
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core-group-renamed",
|
|
"colors",
|
|
"core",
|
|
]);
|
|
|
|
await page.keyboard.press(`ControlOrMeta+z`);
|
|
await assertSetsList(tokenThemesSetsSidebar, ["core", "colors", "core"]);
|
|
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "core" })
|
|
.nth(1)
|
|
.dblclick();
|
|
await changeSetInput(tokenThemesSetsSidebar, "core-set-renamed");
|
|
await assertSetsList(tokenThemesSetsSidebar, [
|
|
"core",
|
|
"colors",
|
|
"core-set-renamed",
|
|
]);
|
|
});
|
|
|
|
test("Fold/Unfold set", async ({ page }) => {
|
|
const { tokenThemesSetsSidebar, tokenSetGroupItems } =
|
|
await setupTokensFileRender(page);
|
|
|
|
await expect(tokenThemesSetsSidebar).toBeVisible();
|
|
|
|
const darkSet = tokenThemesSetsSidebar.getByRole("button", {
|
|
name: "dark",
|
|
exact: true,
|
|
});
|
|
|
|
await expect(darkSet).toBeVisible();
|
|
|
|
const setGroup = await tokenSetGroupItems
|
|
.filter({ hasText: "LightDark" })
|
|
.first();
|
|
|
|
const setCollapsable = await setGroup
|
|
.getByTestId("tokens-set-group-collapse")
|
|
.first();
|
|
|
|
await setCollapsable.click();
|
|
|
|
await expect(darkSet).toHaveCount(0);
|
|
});
|
|
|
|
test("Change current theme", async ({ page }) => {
|
|
const { tokenThemesSetsSidebar, tokenSetItems } =
|
|
await setupTokensFileRender(page);
|
|
|
|
await expect(tokenSetItems.nth(1)).toHaveAttribute("aria-checked", "true");
|
|
await expect(tokenSetItems.nth(2)).toHaveAttribute("aria-checked", "false");
|
|
|
|
await tokenThemesSetsSidebar.getByTestId("theme-select").click();
|
|
await page
|
|
.getByTestId("theme-select-dropdown")
|
|
.getByRole("option", { name: "Dark", exact: true })
|
|
.click();
|
|
|
|
await expect(tokenSetItems.nth(1)).toHaveAttribute("aria-checked", "false");
|
|
await expect(tokenSetItems.nth(2)).toHaveAttribute("aria-checked", "true");
|
|
});
|
|
|
|
test("Display active set and verify if is enabled", async ({ page }) => {
|
|
const { tokenThemesSetsSidebar, tokensSidebar } =
|
|
await setupTokensFileRender(page);
|
|
|
|
// Create set
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "Add set" })
|
|
.click();
|
|
await changeSetInput(tokenThemesSetsSidebar, "Inactive set");
|
|
await tokenThemesSetsSidebar
|
|
.getByRole("button", { name: "Inactive set" })
|
|
.click();
|
|
let activeSetTitle = await tokensSidebar.getByTestId(
|
|
"active-token-set-title",
|
|
);
|
|
await expect(activeSetTitle).toHaveText("TOKENS - Inactive set");
|
|
const inactiveSetInfo = await tokensSidebar.getByTitle(
|
|
"This set is not active.",
|
|
);
|
|
await expect(inactiveSetInfo).toBeVisible();
|
|
|
|
// Switch active set
|
|
|
|
await tokenThemesSetsSidebar.getByRole("button", { name: "theme" }).click();
|
|
await expect(activeSetTitle).toHaveText("TOKENS - theme");
|
|
await expect(inactiveSetInfo).not.toBeVisible();
|
|
});
|
|
});
|