mirror of
https://github.com/penpot/penpot.git
synced 2026-02-12 14:42:56 +00:00
* 🐛 Display missing selected tokens set info (#8098)
* 🐛 Display missing selected tokens set info
* ✨ Add integration tests to verify current active set
* 🎉 Integration with nitrate platform
* 🐛 Fix nitrate get-teams returns deleted teams
* ✨ Add nitrate to tmux devenv
* ✨ Add retry and validation to nitrate module
* ✨ Add photoUrl to profile on nitrate authenticate
* ✨ Move nitrate url to an env variable
* ♻️ Change Nitrate organization-id schema to text
* ♻️ Cleanup unused imports
* 🔧 Add control-center to nginx
* ✨ Add create org link
* 🔧 Fix nginx entrypoint
* 🐛 Fix control-center proxy pass
* 🎉 Add nitrate licence check
* Revert "✨ Add nitrate to tmux devenv"
This reverts commit dc6f6c4589.
* ✨ Add feature flag check
* 🐛 Rename licences for licenses
* ✨ MR changes
* ✨ MR changes 2
* 📎 Add the ability to have local config on start backend
* 📎 Add FIXME comment
---------
Co-authored-by: Xaviju <xavier.julian@kaleidos.net>
Co-authored-by: Juanfran <juanfran.ag@gmail.com>
Co-authored-by: Yamila Moreno <yamila.moreno@kaleidos.net>
Co-authored-by: Marina López <marina.lopez.yap@gmail.com>
Co-authored-by: Andrey Antukh <niwi@niwi.nz>
248 lines
7.8 KiB
JavaScript
248 lines
7.8 KiB
JavaScript
import { test, expect } from "@playwright/test";
|
|
import { BaseWebSocketPage } from "../../pages/BaseWebSocketPage";
|
|
import { WorkspacePage } from "../../pages/WorkspacePage";
|
|
import { setupEmptyTokensFile, setupTokensFile } from "./helpers";
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await WorkspacePage.init(page);
|
|
await BaseWebSocketPage.mockRPC(page, "get-teams", "get-teams-tokens.json");
|
|
});
|
|
|
|
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") => {
|
|
const tokensTabButton = sidebar
|
|
.getByRole("button", { name: "Add set" })
|
|
.click();
|
|
|
|
await changeSetInput(sidebar, setName, (finalKey = "Enter"));
|
|
};
|
|
|
|
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 setupEmptyTokensFile(page);
|
|
|
|
const tokensTabButton = 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, tokenContextMenuForSet } =
|
|
await setupEmptyTokensFile(page);
|
|
|
|
const tokensTabButton = 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 setupTokensFile(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 setupTokensFile(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, tokenSetItems } =
|
|
await setupTokensFile(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();
|
|
});
|
|
});
|