Skip to content

Commit 01b9728

Browse files
authored
Add marketplace e2e tests to rhdh (#2606)
1 parent a067d4f commit 01b9728

File tree

3 files changed

+104
-4
lines changed

3 files changed

+104
-4
lines changed
+76-4
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,95 @@
1-
import { test as base } from "@playwright/test";
1+
import { test as base, expect } from "@playwright/test";
22
import { Common } from "../utils/common";
33
import { UIhelper } from "../utils/ui-helper";
4+
import { Extensions } from "../support/pages/extensions";
45

5-
const test = base.extend<{ uiHelper: UIhelper }>({
6+
const test = base.extend<{ uiHelper: UIhelper; extensions: Extensions }>({
67
uiHelper: async ({ page }, use) => {
78
use(new UIhelper(page));
89
},
910
});
1011

1112
test.describe("Admin > Extensions > Catalog", () => {
13+
let extensions: Extensions;
1214
test.beforeEach(async ({ page, uiHelper }) => {
1315
await new Common(page).loginAsKeycloakUser();
16+
extensions = new Extensions(page);
1417
await uiHelper.openSidebarButton("Administration");
1518
await uiHelper.openSidebar("Extensions");
1619
await uiHelper.verifyHeading("Extensions");
1720
});
1821

19-
test("Tabs includes a tab for extensions", async ({ uiHelper }) => {
22+
test("Verify search bar in extensions", async ({ page, uiHelper }) => {
23+
await uiHelper.searchInputPlaceholder("Dynatrace");
24+
await uiHelper.verifyHeading("DynaTrace");
25+
await page.getByRole("button", { name: "Clear Search" }).click();
26+
});
27+
28+
test("Verify filters in extensions", async ({ page, uiHelper }) => {
2029
await uiHelper.clickTab("Catalog");
21-
// TODO: check plugins grid when we initialized some test data
30+
await uiHelper.clickButton("CI/CD");
31+
await extensions.selectDropdown("Category");
32+
await page
33+
.getByRole("option", { name: "CI/CD" })
34+
.getByRole("checkbox")
35+
.isChecked();
36+
await extensions.clickAway();
37+
await extensions.selectDropdown("Author");
38+
await extensions.toggleOption("Red Hat");
39+
await extensions.clickAway();
40+
await uiHelper.verifyHeading("Red Hat Argo CD");
41+
await uiHelper.verifyText("by Red Hat");
42+
await page.getByRole("heading", { name: "Red Hat Argo CD" }).click();
43+
await uiHelper.verifyTableHeadingAndRows([
44+
"Package name",
45+
"Version",
46+
"Role",
47+
"Supported version",
48+
"Status",
49+
]);
50+
await uiHelper.verifyHeading("Versions");
51+
await page.getByRole("button", { name: "close" }).click();
52+
await uiHelper.clickLink("Read more");
53+
await page.getByRole("button", { name: "close" }).click();
54+
await extensions.selectDropdown("Author");
55+
await extensions.toggleOption("Red Hat");
56+
await extensions.clickAway();
57+
await extensions.selectDropdown("Category");
58+
await extensions.toggleOption("CI/CD");
59+
await extensions.clickAway();
60+
});
61+
62+
test("Verify certified badge in extensions", async ({ page, uiHelper }) => {
63+
await extensions.selectDropdown("Support type");
64+
await extensions.toggleOption("Certified by Red Hat");
65+
await extensions.clickAway();
66+
await uiHelper.verifyHeading("DynaTrace");
67+
await expect(page.getByLabel("Certified by Red Hat").first()).toBeVisible();
68+
await expect(extensions.badge.first()).toBeVisible();
69+
await extensions.badge.first().hover();
70+
await uiHelper.verifyTextInTooltip("Certified by Red Hat");
71+
await uiHelper.verifyHeading("DynaTrace");
72+
await page.getByRole("heading", { name: "DynaTrace" }).first().click();
73+
await page.getByRole("button", { name: "close" }).click();
74+
await uiHelper.clickLink("Read more");
75+
await uiHelper.verifyDivHasText(/^Certified$/);
76+
await uiHelper.verifyText("About");
77+
await uiHelper.verifyHeading("Versions");
78+
await uiHelper.verifyTableHeadingAndRows([
79+
"Package name",
80+
"Version",
81+
"Role",
82+
"Supported version",
83+
"Status",
84+
]);
85+
await page.getByRole("button", { name: "close" }).click();
86+
await extensions.selectDropdown("Support type");
87+
await extensions.toggleOption("Certified by Red Hat");
88+
await extensions.toggleOption("Verified by Red Hat");
89+
await extensions.clickAway();
90+
await expect(page.getByLabel("Verified by Red Hat").first()).toBeVisible();
91+
await expect(extensions.badge.first()).toBeVisible();
92+
await extensions.badge.first().hover();
93+
await uiHelper.verifyTextInTooltip("Verified by Red Hat");
2294
});
2395
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Page, Locator } from "@playwright/test";
2+
3+
export class Extensions {
4+
private page: Page;
5+
public badge: Locator;
6+
7+
constructor(page: Page) {
8+
this.page = page;
9+
this.badge = this.page.getByTestId("TaskAltIcon");
10+
}
11+
12+
async selectDropdown(name: string) {
13+
await this.page.getByLabel(name).getByRole("button").first().click();
14+
}
15+
16+
async toggleOption(name: string) {
17+
await this.page
18+
.getByRole("option", { name: name })
19+
.getByRole("checkbox")
20+
.click();
21+
}
22+
23+
async clickAway() {
24+
this.page.locator("#menu- div").first().click();
25+
}
26+
}

e2e-tests/playwright/utils/ui-helper.ts

+2
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,8 @@ export class UIhelper {
508508
}
509509

510510
async verifyTableHeadingAndRows(texts: string[]) {
511+
// Wait for the table to load by checking for the presence of table rows
512+
await this.page.waitForSelector("table tbody tr", { state: "visible" });
511513
for (const column of texts) {
512514
const columnSelector = `table th:has-text("${column}")`;
513515
//check if columnSelector has at least one element or more

0 commit comments

Comments
 (0)