Skip to content

Commit 321e475

Browse files
committed
Migration IV
* Prettified files
1 parent 68868fb commit 321e475

File tree

13 files changed

+225
-226
lines changed

13 files changed

+225
-226
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,13 @@ jobs:
124124
- name: run the e2e tests
125125
run: |
126126
docker compose rm -f
127-
docker compose up --exit-code-from=cypress --pull always
127+
docker compose up --exit-code-from=playwright --pull always
128128
working-directory: tests/
129129

130-
- name: upload cypress artifacts
130+
- name: upload playwright artifacts
131131
uses: actions/upload-artifact@v3
132132
if: always()
133133
with:
134-
name: cypress
134+
name: playwright
135135
retention-days: 1
136-
path: |
137-
tests/cypress/videos
138-
tests/cypress/screenshots
136+
path: tests/results

.prettierrc.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
module.exports = {
22
// Prettier configuration provided by Grafana scaffolding
33
...require('./.config/.prettierrc.js'),
4-
importOrder: ['^components/(.*)$', '^[./]'],
5-
importOrderSeparation: true,
6-
importOrderSortSpecifiers: true,
74
};

playwright.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export default defineConfig<PluginOptions>({
1414
trace: 'on-first-retry',
1515
video: 'on',
1616
viewport: { width: 1920, height: 1080 },
17-
1817
},
1918
projects: [
2019
{

tests/e2e/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export const GRAFANA_SELECTORS = {
5959

6060
APPLY_CHANGES_AND_SAVE_BUTTON: 'button[title="Apply changes and save dashboard"]',
6161
SAVE_DASHBOARD_TITLE: 'input[aria-label="Save dashboard title field"]',
62-
SAVE_BUTTON: 'button[aria-label="Save dashboard button"]',
62+
SAVE_BUTTON: 'button[aria-label="Save dashboard button"]',
6363
},
6464
};
6565

tests/e2e/lib/checkmk_rest_api.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ let counter = 0;
88
const animation = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
99
const getAnimation = () => animation[counter++ % animation.length];
1010

11-
1211
(async () => {
1312
requestContext = await request.newContext({
1413
baseURL: config.playwrightToCheckmkUrl,
@@ -183,11 +182,9 @@ const waitUntilCheckmkIsReady = async () => {
183182
maxRedirects: 0,
184183
failOnStatusCode: false,
185184
});
186-
185+
187186
ready = response.ok();
188-
} catch (error) {
189-
190-
}
187+
} catch (error) {}
191188

192189
if (ready) {
193190
console.log('🎉 Checkmk is ready');
@@ -196,7 +193,7 @@ const waitUntilCheckmkIsReady = async () => {
196193

197194
await wait(5000);
198195
await waitUntilCheckmkIsReady();
199-
}
196+
};
200197

201198
export default {
202199
deleteCmkAutomationUser,

tests/e2e/models/DashboardPage.ts

Lines changed: 139 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -3,141 +3,144 @@ import current_config from '../config';
33
import { FilterTypes, GRAFANA_SELECTORS, GRAFANA_TEXT, GraphTypes } from '../constants';
44

55
export class DashboardPage {
6-
readonly page: Page;
7-
8-
constructor(page: Page) {
9-
this.page = page;
10-
}
11-
12-
async goto() {
13-
await this.page.goto(current_config.grafanaUrl + 'dashboards');
14-
}
15-
16-
async addNewPanel () {
17-
await this.page.goto(current_config.grafanaUrl + 'dashboard/new');
18-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.ADD_NEW_DASHBOARD_BUTTON).click();
19-
}
20-
21-
async saveDashboard () {
22-
const randInt = Math.floor(Math.random() * 1000).toString();
23-
24-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.APPLY_CHANGES_AND_SAVE_BUTTON).click();
25-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.SAVE_DASHBOARD_TITLE).fill('Test Dashboard ' + randInt);
26-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.SAVE_BUTTON).click();
27-
28-
await expect(this.page.getByText(GRAFANA_TEXT.DASHBOARD_SAVED)).toBeVisible();
29-
}
30-
31-
async selectDatasource (edition: string) {
32-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.DATASOURCES_LIST)
33-
.locator('button')
34-
.filter({hasText: edition, })
35-
.click();
36-
37-
await expect(this.page.getByText(edition)).toBeVisible();
38-
}
39-
40-
async removeFilter (filter: FilterTypes) {
41-
const selector = GRAFANA_SELECTORS.DASHBOARD.REMOVE_FILTER(filter);
42-
await this.page.locator(selector).click();
43-
await expect(this.page.locator('label', {hasText: filter})).not.toBeVisible();
44-
}
45-
46-
async addFilter (filter: FilterTypes) {
47-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.FILTER_FIELD).click();
48-
await this.page.keyboard.type(filter);
49-
await this.page.keyboard.press('Enter');
50-
51-
await expect(this.page.locator('label', {hasText: filter})).toBeVisible();
52-
}
53-
54-
async expectSpinners (visible = true) {
55-
const cmp = this.page.locator(GRAFANA_SELECTORS.SPINNER).first();
56-
if (visible) {
57-
await expect(cmp).toBeVisible();
58-
} else {
59-
await expect(cmp).not.toBeVisible();
60-
}
61-
}
62-
63-
async _addFilterBy (fieldSelector: string, value: string, findByInputValue = false) {
64-
await this.page.locator(fieldSelector).fill(value);
65-
await this.expectSpinners(false);
66-
await this.page.keyboard.press('Enter');
67-
await this.expectSpinners(false);
68-
69-
await this.page.locator(fieldSelector).blur();
70-
71-
if (findByInputValue) {
72-
await expect (this.page.locator(fieldSelector).first()).toHaveValue(value);
73-
} else {
74-
await expect(this.page.locator(`text="${value}"`).first()).toBeVisible();
75-
}
76-
}
77-
78-
async filterBySite (site: string) {
79-
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.SITE_FILTER_FIELD_ID}"]`, site);
80-
}
81-
82-
async filterByHostname (hostname: string) {
83-
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.HOST_NAME_FILTER_FIELD_ID}"]`, hostname);
84-
}
85-
86-
async filterByHostnameRegex (hostnameRegex: string) {
87-
await this._addFilterBy(GRAFANA_SELECTORS.DASHBOARD.HOSTNAME_REGEX_FILTER_FIELD, hostnameRegex, true);
88-
}
89-
90-
async filterByServiceRegex (serviceRegex: string) {
91-
await this._addFilterBy(GRAFANA_SELECTORS.DASHBOARD.SERVICE_REGEX_FILTER_FIELD, serviceRegex, true);
92-
}
93-
94-
async filterByService (service: string) {
95-
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.SERVICE_FILTER_FIELD_ID}"]`, service);
96-
}
97-
98-
async filterByHostLabel (hostLabel: string) {
99-
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.HOST_LABEL_FILTER_FIELD_ID}"]`, hostLabel);
100-
}
101-
102-
async selectPredefinedGraphType (graphType: GraphTypes) {
103-
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.PREDEFINED_GRAPH_FIELD_ID}"]`, graphType);
104-
}
105-
106-
async selectSingleGraphType () {
107-
await this.page.locator(`input[id="${GRAFANA_SELECTORS.DASHBOARD.GRAPH_TYPE_ID}"]`).click()
108-
await this.page.locator("span", {hasText: "Single metric"}).click()
109-
await expect(this.page.locator(`input[id="${GRAFANA_SELECTORS.DASHBOARD.PREDEFINED_GRAPH_FIELD_ID}"]`)).not.toBeVisible();
110-
}
111-
112-
async selectSingleMetricGraphType (graphType: string) {
113-
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.SINGLE_METRIC_GRAPH_FIELD_ID}"]`, graphType);
114-
}
115-
116-
async assertLegendElement (legendElement: string | RegExp) {
117-
await expect(this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PANEL_CONTENT_SELECTOR).filter({hasText: legendElement})).toBeVisible();
118-
}
119-
120-
async assertHoverSelectorsOn (nSelectors: number) {
121-
const locator = this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PANEL_HOVER)
122-
const box = await locator.boundingBox();
123-
await this.page.mouse.click(box!.x + box!.width - 20, box!.y + box!.height / 6);
124-
125-
await expect(this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PLOTTED_HOVER_ON)).toHaveCount(nSelectors);
126-
await this.assertHoverSelectorsOff(0);
127-
}
128-
129-
async assertHoverSelectorsOff (nSelectors: number) {
130-
await expect(this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PLOTTED_HOVER_OFF)).toHaveCount(nSelectors);
131-
}
132-
133-
async setCustomLabel (label: string) {
134-
await this._addFilterBy(GRAFANA_SELECTORS.DASHBOARD.CUSTOM_LABEL_FIELD, label, true);
135-
}
136-
137-
async refresGraph () {
138-
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.REFRESH_GRAPH_BUTTON).click();
139-
}
140-
6+
readonly page: Page;
1417

8+
constructor(page: Page) {
9+
this.page = page;
10+
}
11+
12+
async goto() {
13+
await this.page.goto(current_config.grafanaUrl + 'dashboards');
14+
}
15+
16+
async addNewPanel() {
17+
await this.page.goto(current_config.grafanaUrl + 'dashboard/new');
18+
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.ADD_NEW_DASHBOARD_BUTTON).click();
19+
}
20+
21+
async saveDashboard() {
22+
const randInt = Math.floor(Math.random() * 1000).toString();
23+
24+
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.APPLY_CHANGES_AND_SAVE_BUTTON).click();
25+
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.SAVE_DASHBOARD_TITLE).fill('Test Dashboard ' + randInt);
26+
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.SAVE_BUTTON).click();
27+
28+
await expect(this.page.getByText(GRAFANA_TEXT.DASHBOARD_SAVED)).toBeVisible();
29+
}
30+
31+
async selectDatasource(edition: string) {
32+
await this.page
33+
.locator(GRAFANA_SELECTORS.DASHBOARD.DATASOURCES_LIST)
34+
.locator('button')
35+
.filter({ hasText: edition })
36+
.click();
37+
38+
await expect(this.page.getByText(edition)).toBeVisible();
39+
}
40+
41+
async removeFilter(filter: FilterTypes) {
42+
const selector = GRAFANA_SELECTORS.DASHBOARD.REMOVE_FILTER(filter);
43+
await this.page.locator(selector).click();
44+
await expect(this.page.locator('label', { hasText: filter })).not.toBeVisible();
45+
}
46+
47+
async addFilter(filter: FilterTypes) {
48+
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.FILTER_FIELD).click();
49+
await this.page.keyboard.type(filter);
50+
await this.page.keyboard.press('Enter');
51+
52+
await expect(this.page.locator('label', { hasText: filter })).toBeVisible();
53+
}
54+
55+
async expectSpinners(visible = true) {
56+
const cmp = this.page.locator(GRAFANA_SELECTORS.SPINNER).first();
57+
if (visible) {
58+
await expect(cmp).toBeVisible();
59+
} else {
60+
await expect(cmp).not.toBeVisible();
61+
}
62+
}
63+
64+
async _addFilterBy(fieldSelector: string, value: string, findByInputValue = false) {
65+
await this.page.locator(fieldSelector).fill(value);
66+
await this.expectSpinners(false);
67+
await this.page.keyboard.press('Enter');
68+
await this.expectSpinners(false);
69+
70+
await this.page.locator(fieldSelector).blur();
71+
72+
if (findByInputValue) {
73+
await expect(this.page.locator(fieldSelector).first()).toHaveValue(value);
74+
} else {
75+
await expect(this.page.locator(`text="${value}"`).first()).toBeVisible();
76+
}
77+
}
78+
79+
async filterBySite(site: string) {
80+
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.SITE_FILTER_FIELD_ID}"]`, site);
81+
}
82+
83+
async filterByHostname(hostname: string) {
84+
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.HOST_NAME_FILTER_FIELD_ID}"]`, hostname);
85+
}
86+
87+
async filterByHostnameRegex(hostnameRegex: string) {
88+
await this._addFilterBy(GRAFANA_SELECTORS.DASHBOARD.HOSTNAME_REGEX_FILTER_FIELD, hostnameRegex, true);
89+
}
90+
91+
async filterByServiceRegex(serviceRegex: string) {
92+
await this._addFilterBy(GRAFANA_SELECTORS.DASHBOARD.SERVICE_REGEX_FILTER_FIELD, serviceRegex, true);
93+
}
94+
95+
async filterByService(service: string) {
96+
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.SERVICE_FILTER_FIELD_ID}"]`, service);
97+
}
98+
99+
async filterByHostLabel(hostLabel: string) {
100+
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.HOST_LABEL_FILTER_FIELD_ID}"]`, hostLabel);
101+
}
102+
103+
async selectPredefinedGraphType(graphType: GraphTypes) {
104+
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.PREDEFINED_GRAPH_FIELD_ID}"]`, graphType);
105+
}
106+
107+
async selectSingleGraphType() {
108+
await this.page.locator(`input[id="${GRAFANA_SELECTORS.DASHBOARD.GRAPH_TYPE_ID}"]`).click();
109+
await this.page.locator('span', { hasText: 'Single metric' }).click();
110+
await expect(
111+
this.page.locator(`input[id="${GRAFANA_SELECTORS.DASHBOARD.PREDEFINED_GRAPH_FIELD_ID}"]`)
112+
).not.toBeVisible();
113+
}
114+
115+
async selectSingleMetricGraphType(graphType: string) {
116+
await this._addFilterBy(`input[id="${GRAFANA_SELECTORS.DASHBOARD.SINGLE_METRIC_GRAPH_FIELD_ID}"]`, graphType);
117+
}
118+
119+
async assertLegendElement(legendElement: string | RegExp) {
120+
await expect(
121+
this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PANEL_CONTENT_SELECTOR).filter({ hasText: legendElement })
122+
).toBeVisible();
123+
}
124+
125+
async assertHoverSelectorsOn(nSelectors: number) {
126+
const locator = this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PANEL_HOVER);
127+
const box = await locator.boundingBox();
128+
await this.page.mouse.click(box!.x + box!.width - 20, box!.y + box!.height / 6);
129+
130+
await expect(this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PLOTTED_HOVER_ON)).toHaveCount(nSelectors);
131+
await this.assertHoverSelectorsOff(0);
132+
}
133+
134+
async assertHoverSelectorsOff(nSelectors: number) {
135+
await expect(this.page.locator(GRAFANA_SELECTORS.DASHBOARD.PLOTTED_HOVER_OFF)).toHaveCount(nSelectors);
136+
}
137+
138+
async setCustomLabel(label: string) {
139+
await this._addFilterBy(GRAFANA_SELECTORS.DASHBOARD.CUSTOM_LABEL_FIELD, label, true);
140+
}
141+
142+
async refresGraph() {
143+
await this.page.locator(GRAFANA_SELECTORS.DASHBOARD.REFRESH_GRAPH_BUTTON).click();
144+
}
142145
}
143-
export default DashboardPage
146+
export default DashboardPage;

tests/e2e/models/DatasourceConfigPage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export class DatasourceConfigPage {
3030
await this.page.locator(CMK_SELECTORS.SETUP_FORM.VERSION).press('>');
3131
await this.page.keyboard.press('Enter');
3232

33-
await this.page.click(GRAFANA_SELECTORS.DATASOURCE.SAVE_AND_TEST_BUTTON);
33+
await this.page.click(GRAFANA_SELECTORS.DATASOURCE.SAVE_AND_TEST_BUTTON);
3434
};
3535
}
3636

tests/e2e/models/LoginPage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class LoginPage {
2121
await this.page.locator(GRAFANA_SELECTORS.LOGIN.USERNAME_FIELD).fill(username);
2222
await this.page.locator(GRAFANA_SELECTORS.LOGIN.PASSWORD_FIELD).fill(password);
2323
await this.page.locator(GRAFANA_SELECTORS.LOGIN.LOGIN_BUTTON).click();
24-
await wait (1000)
24+
await wait(1000);
2525
}
2626

2727
async logout() {

0 commit comments

Comments
 (0)