Files
openobserve/tests/ui-testing/playwright-tests/dashboard.spec.js
T

1876 lines
70 KiB
JavaScript

import { test, expect } from "@playwright/test";
import logData from "../../ui-testing/cypress/fixtures/log.json";
import logsdata from "../../test-data/logs_data.json";
const randomDashboardName =
"Dashboard_" + Math.random().toString(36).substr(2, 9);
test.describe.configure({ mode: "parallel" });
async function login(page) {
await page.goto(process.env["ZO_BASE_URL"], { waitUntil: "networkidle" });
// await page.getByText('Login as internal user').click();
await page.waitForTimeout(1000);
await page
.locator('[data-cy="login-user-id"]')
.fill(process.env["ZO_ROOT_USER_EMAIL"]);
// wait for login api response
const waitForLogin = page.waitForResponse(
(response) =>
response.url().includes("/auth/login") && response.status() === 200
);
await page
.locator('[data-cy="login-password"]')
.fill(process.env["ZO_ROOT_USER_PASSWORD"]);
await page.locator('[data-cy="login-sign-in"]').click();
await waitForLogin;
await page.waitForURL(process.env["ZO_BASE_URL"] + "/web/", {
waitUntil: "networkidle",
});
await page
.locator('[data-test="navbar-organizations-select"]')
.getByText("arrow_drop_down")
.click();
await page.getByRole("option", { name: "default", exact: true }).click();
}
async function ingestion(page) {
const orgId = process.env["ORGNAME"];
const streamName = "e2e_automate";
const basicAuthCredentials = Buffer.from(
`${process.env["ZO_ROOT_USER_EMAIL"]}:${process.env["ZO_ROOT_USER_PASSWORD"]}`
).toString('base64');
const headers = {
"Authorization": `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
};
const fetchResponse = await fetch(
`${process.env.INGESTION_URL}/api/${orgId}/${streamName}/_json`,
{
method: "POST",
headers: headers,
body: JSON.stringify(logsdata),
}
);
const response = await fetchResponse.json();
console.log(response);
}
async function waitForDashboardPage(page) {
const dashboardListApi = page.waitForResponse(
(response) =>
/\/api\/.+\/dashboards/.test(response.url()) && response.status() === 200
);
await page.waitForURL(process.env["ZO_BASE_URL"] + "/web/dashboards**");
await page.waitForSelector(`text="Please wait while loading dashboards..."`, {
state: "hidden",
});
await dashboardListApi;
await page.waitForTimeout(500);
}
test.describe("dashboard UI testcases", () => {
// let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
async function applyQueryButton(page) {
// click on the run query button
// Type the value of a variable into an input field
const search = page.waitForResponse(logData.applyQuery);
await page.waitForTimeout(3000);
await page.locator("[data-test='logs-search-bar-refresh-btn']").click({
force: true,
});
// get the data from the search variable
await expect.poll(async () => (await search).status()).toBe(200);
// await search.hits.FIXME_should("be.an", "array");
}
// tebefore(async function () {
// // logData("log");
// // const data = page;
// // logData = data;
// console.log("--logData--", logData);
// });
test.beforeEach(async ({ page }) => {
console.log("running before each");
await login(page);
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000);
// just to make sure org is set
const orgNavigation = page.goto(
`${logData.logsUrl}?org_identifier=${process.env["ORGNAME"]}`
);
await orgNavigation;
});
test("should create a new dashboard", async ({ page }) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await expect(page.getByText("Dashboard added successfully.")).toBeVisible({
timeout: 30000,
});
});
test("should delete the dashboard", async ({ page }) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page.locator('[data-test="dashboard-back-btn"]').click();
await expect(
page
.getByRole("row", { name: `01 ${randomDashboardName}` })
.locator('[data-test="dashboard-delete"]')
).toBeVisible({ timeout: 30000 });
await page
.getByRole("row", { name: `01 ${randomDashboardName}` })
.locator('[data-test="dashboard-delete"]')
.click();
await page.locator('[data-test="confirm-button"]').click();
});
test("should create a duplicate of the dashboard", async ({ page }) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await expect(page.getByText("Dashboard added successfully.")).toBeVisible({
timeout: 30000,
});
await page.locator('[data-test="dashboard-back-btn"]').click();
await expect(
page
.getByRole("row", { name: `01 ${randomDashboardName}` })
.locator('[data-test="dashboard-duplicate"]')
).toBeVisible();
await page
.getByRole("row", { name: `01 ${randomDashboardName}` })
.locator('[data-test="dashboard-duplicate"]')
.click();
});
test("should create a dashboard and add the breakdown", async ({ page }) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await expect(page.getByText("Dashboard added successfully.")).toBeVisible({
timeout: 3000,
});
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
// Refine the locator for 'e2e_automate'
await page
.locator("span")
.filter({ hasText: /^e2e_automate$/ })
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-b-data"]'
)
.click();
await expect(page.locator('[data-test="dashboard-apply"]')).toBeVisible();
await page.locator('[data-test="dashboard-apply"]').click();
});
test("should update the data when changing the time between both absolute and relative time using the Kolkata time zone.", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-3-h-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page.locator('[data-test="datetime-timezone-select"]').click();
await page.locator('[data-test="datetime-timezone-select"]').press("Enter");
await page
.locator('[data-test="datetime-timezone-select"]')
.fill("calcutta");
await page.getByText("Asia/Calcutta", { exact: true }).click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(300);
await expect(page.locator('[data-test="date-time-btn"]')).toBeVisible();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-absolute-tab"]').click();
await page
.locator("button")
.filter({ hasText: "chevron_left" })
.first()
.click();
await page.getByRole("button", { name: "7" }).last().click();
await page.getByRole("button", { name: "8" }).last().click();
await page.locator('[data-test="dashboard-apply"]').click();
});
test("should update the chart with the results of a custom SQL query", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator('[data-test="dashboard-x-item-_timestamp-remove"]')
.click();
await page.locator('[data-test="dashboard-customSql"]').click();
// Focus on the first line of the editor
await page.locator(".view-line").first().click();
await page
.locator('[data-test="dashboard-panel-query-editor"]')
.getByLabel("Editor content;Press Alt+F1")
.fill(
'SELECT histogram(_timestamp) as "x_axis_1", count(_timestamp) as "y_axis_1", kubernetes_container_name as "breakdown_1" FROM "e2e_automate" GROUP BY x_axis_1, breakdown_1'
);
// Fill the custom SQL query
await page.keyboard.type(
'SELECT histogram(_timestamp) as "x_axis_1", count(_timestamp) as "y_axis_1", kubernetes_container_name as "breakdown_1" FROM "e2e_automate" GROUP BY x_axis_1, breakdown_1'
);
await page.waitForTimeout(400);
await page.locator('[data-test="dashboard-apply"]').click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-x_axis_1"] [data-test="dashboard-add-x-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-y_axis_1"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-breakdown_1"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.waitForTimeout(200);
await page.locator('[data-test="dashboard-apply"]'); //.toBeVisible();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-30-m-btn"]').click();
await page.locator('[data-test="date-time-relative-3-h-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(400);
await expect(
page.locator('[data-test="dashboard-panel-name"]')
).toBeVisible();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page
.locator('[data-test="dashboard-panel-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-panel-save"]').click();
});
test("should display the correct and updated chart when changing the chart type", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-b-data"]'
)
.click();
// await page.locator('[data-test="field-list-item-logs-e2e_automate-kubernetes_docker_id"] [data-test="dashboard-add-y-data"]').click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-3-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(200);
await page.locator('[data-test="selected-chart-area-item"]').click();
await expect(
page.locator('[data-test="selected-chart-area-stacked-item"]')
).toBeVisible();
await page.locator('[data-test="selected-chart-h-bar-item"] img').click();
await expect(
page.locator('[data-test="selected-chart-scatter-item"] img')
).toBeVisible();
await page.locator('[data-test="selected-chart-scatter-item"] img').click();
await expect(
page.locator('[data-test="selected-chart-gauge-item"] img')
).toBeVisible();
await page.locator('[data-test="selected-chart-gauge-item"] img').click();
await expect(
page.locator('[data-test="dashboard-panel-name"]')
).toBeVisible();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dash_01");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(200);
await page
.locator('[data-test="dashboard-edit-panel-Dash_01-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await page.locator('[data-test="confirm-button"]').click();
});
test("should navigate to another dashboard using the DrillDown feature.", async ({
page,
}) => {
// Folder select as a " Default"vfrom this test cases
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_labels_app_kubernetes_io_component"] [data-test="dashboard-add-b-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_labels_app_kubernetes_io_instance"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_labels_app_kubernetes_io_managed_by"] [data-test="dashboard-add-y-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-5-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(200);
await page.locator('[data-test="dashboard-sidebar"]').click();
await page
.locator('[data-test="dashboard-addpanel-config-drilldown-add-btn"]')
.click();
await page
.locator('[data-test="dashboard-config-panel-drilldown-name"]')
.click();
await page
.locator('[data-test="dashboard-config-panel-drilldown-name"]')
.fill("Dashboard1");
await page
.locator('[data-test="dashboard-drilldown-folder-select"]')
.click();
await page
.getByRole("option", { name: "default" })
.locator("div")
.nth(2)
.click();
await page.getByPlaceholder("Name").nth(1).click();
await page.getByPlaceholder("Name").nth(1).fill("Dash");
await page.locator('[data-test="confirm-button"]').click();
await expect(
page.locator('[data-test="dashboard-addpanel-config-drilldown-name-0"]')
).toBeVisible();
await page.locator('[data-test="dashboard-apply"]').click();
// await expect(page.locator('[data-test="chart-renderer"] canvas')).toBeVisible();
// await page.locator('[data-test="chart-renderer"] canvas').click({
// position: {
// x: 371,
// y: 109
// }
// });
// page.once('dialog', dialog => {
// console.log(`Dialog message: ${dialog.message()}`);
// dialog.dismiss().catch(() => { });
// });
// await page.getByText('Dashboard1').click(); //getByText
// await page.waitForTimeout(3000);
// await page.locator('[data-test="dashboard-back-btn"]').click();
// await page.getByRole('cell', { name: 'hjkhjk' }).click();
});
test.skip("should create the specified URL using the DrillDown feature", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page.waitForTimeout(200);
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "e2e_automate" })
.locator("div")
.nth(2)
.click();
``;
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubectl_kubernetes_io_default_container"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-4-w-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "Asia/Gaza" })
.locator("div")
.nth(2)
.click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(200);
await expect(
page.locator('[data-test="chart-renderer"] canvas')
).toBeVisible();
await page.locator('[data-test="dashboard-sidebar"]').click();
await page
.locator("label")
.filter({ hasText: "DefaultUnitarrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "Bytes", exact: true })
.locator("div")
.nth(2)
.click();
await page
.locator('[data-test="dashboard-addpanel-config-drilldown-add-btn"]')
.click();
await page.locator('[data-test="dashboard-drilldown-by-url-btn"]').click();
await page
.locator('[data-test="dashboard-config-panel-drilldown-name"]')
.click();
await page
.locator('[data-test="dashboard-config-panel-drilldown-name"]')
.fill("Test");
await page
.locator('[data-test="dashboard-drilldown-url-textarea"]')
.click();
await page
.locator('[data-test="dashboard-drilldown-url-textarea"]')
.fill(
`${ZO_BASE_URL}/web/dashboards/add_panel?dashboard=7208792649849905562&panelId=Panel_ID4468610&folder=7206186521999716065&tab=default`
);
await page
.locator('[data-test="dashboard-drilldown-open-in-new-tab"] div')
.nth(2)
.click();
await page.locator('[data-test="confirm-button"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await page.locator('[data-test="dashboard-sidebar-collapse-btn"]').click();
await page.locator('[data-test="chart-renderer"] canvas').click({
position: {
x: 486,
y: 88,
},
});
const page1Promise = page.waitForEvent("popup");
await page.getByText("Test").click(); //Testttt
const page1 = await page1Promise;
await expect(
page1.locator('[data-test="chart-renderer"] canvas')
).toBeVisible();
});
test.skip("should display a confirmation popup message for unsaved changes when clicking the Discard button", async ({
page,
}) => {
//Excepted : popup massge appear and redirect to the All Dasboarrd page.
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
// await page.locator('[data-test="field-list-item-logs-e2e_automate-_timestamp"] [data-test="dashboard-add-x-data"]').click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-5-w-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page.locator('[data-test="datetime-timezone-select"]').click();
await page
.locator('[data-test="datetime-timezone-select"]')
.fill("calcutta");
await page.waitForTimeout(100);
await page.getByText("Asia/Calcutta", { exact: true }).click();
await page.locator('[data-test="dashboard-apply"]').click();
await expect(
page.locator('[data-test="chart-renderer"] canvas')
).toBeVisible({ timeout: 30000 });
await page.goto(
`${ZO_BASE_URL}/web/dashboards/add_panel?dashboard=7216685250963839834&folder=default&tab=default`
);
await page.goto(
`${ZO_BASE_URL}/web/dashboards/view?org_identifier=default&dashboard=7216685250963839834&folder=default&tab=default`
);
await page.goto(
`${ZO_BASE_URL}/web/dashboards/view?org_identifier=default&dashboard=7216685250963839834&folder=default&tab=default&refresh=Off&period=15m&var-Dynamic+filters=%255B%255D&print=false`
);
// await expect(page.getByText('Defaultchevron_leftchevron_rightadd')).toBeVisible({ timeout: 30000 });
});
test("should dynamically update the filtered data when applying the dynamic filter on the dashboard", async ({
page,
}) => {
// Excepted : The dynamic filter should work correctly and display the appropriate data on the dashboard.
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await page
.locator('[data-test="dashboard-variable-adhoc-add-selector"]')
.click();
await page
.locator('[data-test="dashboard-variable-adhoc-name-selector"]')
.click();
await page
.locator('[data-test="dashboard-variable-adhoc-name-selector"]')
.fill("kubernetes_container_hash");
await page
.locator('[data-test="dashboard-variable-adhoc-value-selector"]')
.click();
await page
.locator('[data-test="dashboard-variable-adhoc-value-selector"]')
.fill(
"058694856476.dkr.ecr.us-west-2.amazonaws.com/zinc-cp@sha256:56e216b3d61bd282846e3f6d1bd9cb82f83b90b7e401ad0afc0052aa3f15715c"
);
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(2000);
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.locator('[data-test="dashboard-edit-panel"]').click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-save"]').click();
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.waitForTimeout(2000);
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(
page.getByText("Are you sure you want to delete this Panel?")
).toBeVisible();
await page.locator('[data-test="confirm-button"]').click();
});
test.skip("should create and save the dashboard with different relative times and timezones on both the Gauge and Table charts", async ({
page,
}) => {
// Expected Result: The Dashboard is successfully created and saved with accurate data reflecting the specified relative times and timezones on both the Gauge and Table charts.
// Navigate to dashboards
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
// Add a new panel
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
// Select gauge chart
await page.locator('[data-test="selected-chart-gauge-item"] img').click();
// Select a stream
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
// Use more specific locator to click on 'e2e_automate'
await page.locator('span:has-text("e2e_automate")').click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
// Set date-time and timezone
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page.getByText("Asia/Karachi").click();
await page.locator('[data-test="dashboard-apply"]').click();
// Verify the gauge chart is visible
await expect(
page.locator('[data-test="chart-renderer"] canvas')
).toBeVisible();
// Switch to table chart
await page.locator('[data-test="selected-chart-table-item"] img').click();
// Set timezone for the table chart
await page.locator('[data-test="date-time-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page.getByText("Asia/Gaza").click();
await page.locator('[data-test="dashboard-apply"]').click();
// Edit the panel name
await page.locator('[data-test="dashboard-panel-name"]').click();
await page
.locator('[data-test="dashboard-panel-name"]')
.fill("Dashboard_01");
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel
await page
.locator('[data-test="dashboard-edit-panel-Dashboard_01-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await page.locator('[data-test="confirm-button"]').click();
});
test("should have the Date and Time filter, Page Refresh, and Share Link features working correctly on the Dashboard panel page", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="add-dashboard-description"]').click();
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-5-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(200);
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(200);
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-5-w-btn"]').click();
await page.locator('[data-test="dashboard-share-btn"]').click();
await expect(page.getByText("Link copied successfully")).toBeHidden();
await page.locator('[data-test="dashboard-fullscreen-btn"]').click();
await expect(
page.locator('[data-test="dashboard-fullscreen-btn"]')
).toBeVisible();
await page.locator('[data-test="dashboard-fullscreen-btn"]').click();
});
test.skip("should display an error message when some fields are missing or incorrect", async ({
page,
}) => {
// Expected Result: An appropriate error message is displayed if any fields are missing or incorrect.
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "e2e_automate" })
.locator("div")
.nth(2)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page.locator('[data-test="datetime-timezone-select"]').click();
await page.waitForTimeout(1000);
await page.getByRole("option", { name: "Asia/Gaza" }).click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(200);
await page.locator('[data-test="dashboard-panel-save"]').click();
await expect(
page.getByText("There are some errors, please fix them and try again")
).toBeVisible();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dash_Error");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(200);
// Delete the panel
await page
.locator('[data-test="dashboard-edit-panel-Dash_Error-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await page.locator('[data-test="confirm-button"]').click();
});
test("should apply various filter operators to the dashboard field and display the correct results", async ({
page,
}) => {
// Navigate to dashboards section
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
// Add a new dashboard
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await expect(page.getByText("Dashboard added successfully.")).toHaveText(
"Dashboard added successfully."
);
// Add a new panel and configure it
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
// Add panel fields
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-absolute-tab"]').click();
await page
.locator("button")
.filter({ hasText: "chevron_left" })
.first()
.click();
await page.getByRole("button", { name: "7" }).last().click();
await page.waitForTimeout(100);
await page.getByRole("button", { name: "10" }).last().click();
await page.locator('[data-test="datetime-timezone-select"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
// Apply "Is Null" filter
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_host"] [data-test="dashboard-add-filter-data"]'
)
.click();
await page.locator('[data-test="dashboard-add-condition-label-0-kubernetes_host"]').click();
await page.locator('[data-test="dashboard-add-condition-condition-0"]').click();
await page.locator('label').filter({ hasText: 'Operatorarrow_drop_down' }).locator('i').click();
await page.getByRole("option", { name: "Is Null" }).click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(200);
await page.locator('[data-test="dashboard-add-condition-label-0-kubernetes_host"]').click();
await page.locator('[data-test="dashboard-add-condition-condition-0"]').click();
await page.locator('label').filter({ hasText: 'Operatorarrow_drop_down' }).locator('i').click();
await page.getByRole("option", { name: "=", exact: true }).click();
await page.getByLabel("Value").click();
await page.getByLabel("Value").fill("kubernetes_docker_id");
await page.locator('[data-test="dashboard-apply"]').click();
// Apply "Is Not Null" filter
await page.locator('[data-test="no-data"]').click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-tab"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await page.locator('[data-test="dashboard-add-condition-label-0-kubernetes_host"]').click();
await page.locator('[data-test="dashboard-add-condition-condition-0"]').click();
await page.locator('label').filter({ hasText: 'Operatorarrow_drop_down' }).locator('i').click();
await page.getByText("Is Not Null").click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
// Apply "<>" filter
// await page.locator('[data-test="chart-renderer"] canvas').click({ position: { x: 445, y: 15 } });
// await page.getByText('Kubernetes Container Hash :').click();
// await page.locator('[data-test="dashboard-y-item-kubernetes_container_hash"]').click();
// await page.locator('.layout-panel-container > .flex').click();
// await page.locator('[data-test="dashboard-filter-item-kubernetes_host"]').click();
// await page.locator('[data-test="dashboard-filter-condition-panel"]').getByText('arrow_drop_down').click();
// await page.getByRole('option', { name: '<>' }).click();
// await page.locator('[data-test="dashboard-apply"]').click();
// Save and delete the panel
// await page.locator('[data-test="chart-renderer"] canvas').click({ position: { x: 445, y: 16 } });
// await page.getByText('Kubernetes Container Hash :').click();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page
.locator('[data-test="dashboard-panel-name"]')
.fill("Dash1_Filter");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page
.locator('[data-test="dashboard-edit-panel-Dash1_Filter-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await page.locator('[data-test="confirm-button"]').click();
});
test("should display an error message when a required field is missing", async ({
page,
}) => {
// Navigate to dashboards section
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
// Add a new dashboard
await page.locator('[data-test="dashboard-add"]').click();
// Enter dashboard name and submit
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
// Add a new panel and configure it
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "e2e_automate" })
.locator("div")
.nth(2)
.click();
// await page.locator('[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-x-data"]').click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_name"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_host"] [data-test="dashboard-add-b-data"]'
)
.click();
// Remove X-Axis field and apply changes
await page
.locator('[data-test="dashboard-x-item-_timestamp-remove"]')
.click();
await page.locator('[data-test="dashboard-apply"]').click();
// Update assertion to check error messages
await expect(page.getByText("There are some errors, please")).toHaveText(
"There are some errors, please fix them and try again"
);
await expect(page.getByText("Add one fields for the X-Axis")).toHaveText(
"Add one fields for the X-Axis"
);
// Complete panel configuration
await page.locator('[data-test="selected-chart-table-item"] img').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="selected-chart-area-item"] img').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(100);
// Add X-Axis field and save the panel
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-x-data"]'
)
.click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
// Breakdown test cases
test("should add the breakdown field to the dashboard using Drag and Drop and +B, and allow the user to cancel the action", async ({
page,
}) => {
// Navigate to dashboards
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
// Add a new dashboard
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
// Add a panel to the dashboard
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
// Add fields to the chart
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.getByText("drag_indicatortext_fields kubernetes_container_image")
.click();
await page
.getByText("drag_indicatortext_fields kubernetes_container_image")
.click();
await page
.getByText("drag_indicatortext_fields kubernetes_container_image")
.click();
// Set the date-time range and apply changes
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-4-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
// Verify the breakdown field removal
await page.locator(
'[data-test="dashboard-b-item-kubernetes_labels_app_kubernetes_io_component-remove"]'
);
// Verify adding a new breakdown field
await expect(
page.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_labels_operator_prometheus_io_name"] [data-test="dashboard-add-b-data"]'
)
).toBeVisible();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_labels_operator_prometheus_io_name"] [data-test="dashboard-add-b-data"]'
)
.click();
// await page.locator('[data-test="dashboard-apply"]');
await page.locator('[data-test="dashboard-apply"]').click();
// Save the panel with a new name
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dash_01");
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dash_01-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
test("should add and cancel the breakdown field with different times and timezones and ensure it displays the correct output", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "e2e_automate" })
.locator("div")
.nth(2)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_name"] [data-test="dashboard-add-y-data"]'
)
.click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await page
.locator(
'[data-test="dashboard-b-item-kubernetes_container_hash-remove"]'
)
.click();
await expect(
page.getByText("Chart Configuration / Variables has been updated")
).toBeVisible();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await page.locator('[data-test="dashboard-panel-name"]').click();
await page
.locator('[data-test="dashboard-panel-name"]')
.fill("Dash_Breakdown");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(1000);
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dash_Breakdown-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
test("should update the breakdown field correctly to match the existing one according to the chart type when changing the chart type.", async ({
page,
}) => {
// The existing added fields in the dropdown should adjust correctly according to the new chart type select
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
// Add a new dashboard
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
// Add a panel to the dashboard
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page
.getByRole("option", { name: "e2e_automate" })
.locator("div")
.nth(2)
.click();
// Add fields to the chart
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-y-data"]'
)
.click();
// Set the date-time range and apply changes
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
// Verify the initial chart rendering
// await expect(page.locator('[data-test="chart-renderer"] canvas')).toBeVisible();
await page
.locator('[data-test="dashboard-b-item-kubernetes_container_hash"]')
.click();
await expect(
page.locator('[data-test="dashboard-b-item-kubernetes_container_hash"]')
).toBeVisible();
// Area chart
await page.locator('[data-test="selected-chart-area-item"] img').click();
await expect(
page.locator('[data-test="dashboard-b-item-kubernetes_container_hash"]')
).toBeVisible();
// Area stacked
const graphLocatorAreaStacked = page.locator(
'[data-test="selected-chart-area-stacked-item"]'
);
await expect(graphLocatorAreaStacked).toBeVisible();
// H-bar chart
const graphLocatorHBar = page.locator(
'[data-test="selected-chart-h-bar-item"]'
);
await expect(graphLocatorHBar).toBeVisible();
// Scatter chart
await page.locator('[data-test="selected-chart-scatter-item"] img').click();
const graphLocatorScatter = page.locator(
'[data-test="selected-chart-scatter-item"]'
); // Replace with the actual selector for the graph
await expect(graphLocatorScatter).toBeVisible();
// H-stacked chart
await page
.locator('[data-test="selected-chart-h-stacked-item"] img')
.click();
const graphLocatorHStacked = page.locator(
'[data-test="selected-chart-h-stacked-item"]'
); // Replace with the actual selector for the graph
await expect(graphLocatorHStacked).toBeVisible();
// Stacked chart
await page.locator('[data-test="selected-chart-stacked-item"] img').click();
const graphLocatorStacked = page.locator(
'[data-test="selected-chart-stacked-item"]'
); // Replace with the actual selector for the graph
await expect(graphLocatorStacked).toBeVisible();
// Save the dashboard panel
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
// Switch to Bar chart and apply changes
await page.locator('[data-test="selected-chart-bar-item"] img').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-save"]').click();
await page.waitForTimeout(200);
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
test("should create the panel successfully after adding a breakdown", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubernetes_io_psp"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dash1");
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dash1-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
test("should clear the selections after adding a breakdown and refreshing the page.", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_name"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_host"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-absolute-tab"]').click();
await page
.locator("button")
.filter({ hasText: "chevron_left" })
.first()
.click();
await page.getByRole("button", { name: "9" }).last().click();
await page.getByRole("button", { name: "16" }).last().click();
await page.locator('[data-test="chart-renderer"] div').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.reload();
await page.waitForTimeout(1000);
page.once("dialog", (dialog) => {
console.log(`Dialog message: ${dialog.message()}`);
dialog.dismiss().catch(() => { });
});
// await expect(page.locator('[data-test="chart-renderer"] canvas')).toBeVisible();
// await page.waitForTimeout(1000);
await expect(page.locator('[data-test="no-data"]')).toBeVisible();
});
test("should display the correct output when changing relative and absolute times with different timezones after adding a breakdown", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_name"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page
.locator('[data-test="datetime-timezone-select"]')
.fill("Asia/Dhaka");
await page.getByText("Asia/Dhaka").click();
await page.locator('[data-test="no-data"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-absolute-tab"]').click();
await page
.locator("button")
.filter({ hasText: "chevron_left" })
.first()
.click();
await page.getByRole("button", { name: "8" }).last().click();
await page.getByRole("button", { name: "16" }).last().click();
await page.locator("#date-time-menu").getByText("arrow_drop_down").click();
await page.locator('[data-test="datetime-timezone-select"]').click();
await page.locator('[data-test="datetime-timezone-select"]').fill("Asia/c");
await page.getByText("Asia/Calcutta", { exact: true }).click();
// await page.locator('.layout-panel-container > .flex').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
test("should redirect to the list of dashboard pages when discarding changes", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_image"] [data-test="dashboard-add-b-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_docker_id"] [data-test="dashboard-add-y-data"]'
)
.click();
await page.locator('[data-test="dashboard-apply"]').click();
page.once("dialog", (dialog) => {
console.log(`Dialog message: ${dialog.message()}`);
dialog.dismiss().catch(() => { });
});
await page.locator('[data-test="dashboard-panel-discard"]').click();
// await expect(page.getByText('Start by adding your first')).toBeVisible();
});
test('should plot the data when adding a "Sort by" filter, a breakdown, and other required fields', async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_name"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-6-w-btn"]').click();
await page
.locator("label")
.filter({ hasText: "Timezonearrow_drop_down" })
.locator("i")
.click();
await page.locator('[data-test="datetime-timezone-select"]').fill("Asia/c");
await page.getByText("Asia/Calcutta", { exact: true }).click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.waitForTimeout(100);
await expect(
page.locator('[data-test="dashboard-b-item-kubernetes_container_name"]')
).toBeVisible();
await page
.locator('[data-test="dashboard-b-item-kubernetes_container_name"]')
.click();
await page.locator('[data-test="dashboard-sort-by-item-asc"]').click(); //Filter A to C
await page.locator('[data-test="chart-renderer"] canvas').click({
position: {
x: 829,
y: 31,
},
});
await page.locator('[data-test="dashboard-apply"]').click();
await page
.locator('[data-test="dashboard-b-item-kubernetes_container_name"]')
.click();
await page.locator('[data-test="dashboard-sort-by-item-desc"]').click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
test("should correctly handle and display string and numeric values when no value replacement occurs", async ({
page,
}) => {
await page.locator('[data-test="menu-link-\\/dashboards-item"]').click();
await waitForDashboardPage(page);
await page.locator('[data-test="dashboard-add"]').click();
await page.locator('[data-test="add-dashboard-name"]').click();
await page
.locator('[data-test="add-dashboard-name"]')
.fill(randomDashboardName);
await page.locator('[data-test="dashboard-add-submit"]').click();
await page
.locator('[data-test="dashboard-if-no-panel-add-panel-btn"]')
.click();
await page
.locator("label")
.filter({ hasText: "Streamarrow_drop_down" })
.locator("i")
.click();
await page.getByRole("option", { name: "e2e_automate" }).click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_annotations_kubectl_kubernetes_io_default_container"] [data-test="dashboard-add-y-data"]'
)
.click();
await page
.locator(
'[data-test="field-list-item-logs-e2e_automate-kubernetes_container_hash"] [data-test="dashboard-add-b-data"]'
)
.click();
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-45-m-btn"]').click();
await page.locator(".layout-panel-container > .flex").click();
await page.getByText("expand_allConfig").click();
await page.locator(".q-pa-none > .q-list > div").first().click();
await page
.locator('[data-test="dashboard-config-no-value-replacement"]')
.click();
await page
.locator('[data-test="dashboard-config-no-value-replacement"]')
.fill("NA");
await page.locator('[data-test="dashboard-apply"]').click();
await page.locator('[data-test="dashboard-panel-name"]').click();
await page.locator('[data-test="dashboard-panel-name"]').fill("Dashboard");
await page.locator('[data-test="dashboard-panel-save"]').click();
// Delete the panel and confirm
await page
.locator('[data-test="dashboard-edit-panel-Dashboard-dropdown"]')
.click();
await page.locator('[data-test="dashboard-delete-panel"]').click();
await expect(page.getByText("Are you sure you want to")).toHaveText(
"Are you sure you want to delete this Panel?"
);
await page.locator('[data-test="confirm-button"]').click();
});
});