Files
keycloak/js/apps/admin-ui/test/utils/table.ts
Erik Jan de Wit 095a194ec3 playwright rewrite (#36276)
* initial version playwright rewrite

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* small refactor cancel button

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added policies ciba to playwright

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added policies spec

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added flow tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added axe tests for flows

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added more tests for authentication flows

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client advanced test to playwright

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client authorization tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added axe check

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added test for initial access token

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added registration policies test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client scope test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client scope tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* updated dependency

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client role test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fix running playwright tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client saml

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added saml test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added events test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* more groups tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added group role test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added realm settings i18n tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added oidc and saml test for identity provider

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fix tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* update ci to run playwright instead of cypress

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* add masthead test and use component instead

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added organizations test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added export realm test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added partial import

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added realm roles

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* add realm client policies test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added client profile tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* merge errors

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* realm settings

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added realm settings general test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* add login tab and localization

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* realm settings accessibility test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added user profile test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added realm create test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added realm user registration spec

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added sessions test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added kerberos test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added ldap mapper test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added ldap test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* removed cypress tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added user tab test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* run playwright tests instead of jest tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fixed some tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fixed tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fixed some more tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fix test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fixed tests

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fix test

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* removed cypress

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* remove cyperss

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* Remove some more workflow remanants from Cypress

Signed-off-by: Jon Koops <jonkoops@gmail.com>
Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* lock file

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* pr review

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

---------

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Signed-off-by: Jon Koops <jonkoops@gmail.com>
Co-authored-by: Jon Koops <jonkoops@gmail.com>
2025-03-12 07:35:22 -04:00

120 lines
3.0 KiB
TypeScript

import { Locator, Page, expect } from "@playwright/test";
export async function searchItem(
page: Page,
placeHolder: string,
itemName: string,
) {
await page.locator("table tbody").waitFor();
await page.getByPlaceholder(placeHolder).fill(itemName);
await page.keyboard.press("Enter");
}
export async function clearAllFilters(page: Page) {
await page.getByTestId("clear-all-filters-empty-action").click();
}
export async function clickTableRowItem(page: Page, itemName: string) {
await page.getByRole("link", { name: itemName }).first().click();
}
export function getRowByCellText(page: Page, cellText: string): Locator {
return page.getByText(cellText, { exact: true });
}
export async function clickRowKebabItem(
page: Page,
itemName: string,
action: string,
) {
await page
.getByRole("row", { name: itemName })
.getByLabel("Kebab toggle")
.click();
await page.getByRole("menuitem", { name: action }).click();
}
export async function assertRowExists(
page: Page,
itemName: string,
exist = true,
) {
if (exist) {
await expect(page.getByRole("row", { name: itemName })).toBeVisible();
} else {
await expect(page.getByRole("row", { name: itemName })).not.toBeVisible();
}
}
export async function assertNoResults(page: Page) {
await expect(
page.getByRole("heading", { name: "No search results" }),
).toBeVisible();
}
export async function clickTableToolbarItem(
page: Page,
itemName: string,
kebab = false,
) {
if (kebab) {
await page.getByTestId("kebab").click();
}
return page
.locator(`[data-testid="table-toolbar"]`)
.getByText(itemName)
.click();
}
export async function getTableData(page: Page, name: string) {
const table = page.getByLabel(name, { exact: true });
await table.locator("tbody").waitFor();
const rows = await table.locator("tbody tr").elementHandles();
const tableData = await Promise.all(
rows.map(async (row) => {
const cells = await row.$$("td");
return await Promise.all(cells.map((cell) => cell.innerText()));
}),
);
return tableData;
}
export async function clickNextPageButton(page: Page) {
await page
.getByLabel("Pagination bottom")
.getByLabel("Go to next page")
.click();
}
export async function assertEmptyTable(page: Page) {
await expect(page.getByTestId("empty-state")).toBeVisible();
}
export async function clickSelectRow(
page: Page,
tableName: string,
row: number | string,
) {
if (typeof row === "string") {
const rows = await getTableData(page, tableName);
const rowIndex = rows.findIndex((r) => r.includes(row as string));
if (rowIndex === -1) {
throw new Error(`Row ${row} not found: ${rows}`);
}
row = rowIndex;
}
await page.getByLabel(tableName).getByLabel(`Select row ${row}`).click();
}
export async function expandRow(page: Page, tableName: string, row: number) {
await page
.getByLabel(tableName)
.locator(`button[id="expandable-row-${row}"]`)
.click();
}
export async function refreshTable(page: Page) {
await page.getByTestId("refresh").click();
}