From ff1c95b564bf48c2f0d9ee57d4ea4109bcc8dcba Mon Sep 17 00:00:00 2001 From: Neha P <144308844+neha00290@users.noreply.github.com> Date: Fri, 10 May 2024 16:53:45 +0530 Subject: [PATCH] test: multi-select variables-logs-testcases (#3468) Dashboard : Multi select variables - Should select 1 variable - should select multiple variable - should select All variables - Verify selection appears on UI. - Delete a panel and dashboard Logs: - Search around to work when only histogram enabled - Search around to work when SQL is enabled --- .../playwright-tests/logspage.spec.js | 24 ++- .../playwright-tests/variable.spec.js | 180 ++++++++++++++++++ 2 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 tests/ui-testing/playwright-tests/variable.spec.js diff --git a/tests/ui-testing/playwright-tests/logspage.spec.js b/tests/ui-testing/playwright-tests/logspage.spec.js index 35e719d208..35b2c93894 100644 --- a/tests/ui-testing/playwright-tests/logspage.spec.js +++ b/tests/ui-testing/playwright-tests/logspage.spec.js @@ -502,7 +502,7 @@ test.describe("Logs UI testcases", () => { }); - test('test', async ({ page }) => { + test('should display bar chart when histogram toggle is on', async ({ page }) => { await page.locator('[data-test="log-search-index-list-field-search-input"]').click(); await page.locator('[data-test="log-search-index-list-field-search-input"]').fill('code'); await page.waitForTimeout(4000); @@ -520,4 +520,26 @@ test.describe("Logs UI testcases", () => { }); await page.locator('[data-test="logs-search-bar-show-histogram-toggle-btn"] div').nth(2).click(); }); + + test('should display search around in histogram mode', async ({ page }) => { + await page.waitForTimeout(1000); + await page.locator('[data-test="log-table-column-2-\\@timestamp"]').click(); + await page.locator('[data-test="logs-detail-table-search-around-btn"]').click(); + const element = await page.locator('[data-test="log-table-column-2-\\@timestamp"]'); + const isVisible = await element.isVisible(); + expect(isVisible).toBeTruthy(); + + }); + + // test('should display search around in SQL mode', async ({ page }) => { + // await page.waitForTimeout(1000); + // await page.getByLabel('SQL Mode').locator('div').nth(2).click(); + // await page.locator('[data-test="log-table-column-2-\\@timestamp"]').click(); + // await page.locator('[data-test="logs-detail-table-search-around-btn"]').click(); + // // const element = await page.locator('[data-test="log-table-column-2-\\@timestamp"]'); + // // const isVisible = await element.isVisible(); + // // expect(isVisible).toBeTruthy(); + // await page.locator('[data-test="logs-search-error-message"]').click(); + + // }); }); diff --git a/tests/ui-testing/playwright-tests/variable.spec.js b/tests/ui-testing/playwright-tests/variable.spec.js new file mode 100644 index 0000000000..22b8af4aa4 --- /dev/null +++ b/tests/ui-testing/playwright-tests/variable.spec.js @@ -0,0 +1,180 @@ +import { test, expect } from "@playwright/test"; +import logData from "../cypress/fixtures/log.json"; +import { log } from "console"; +import logsdata from "../../test-data/logs_data.json"; + +test.describe.configure({ mode: 'parallel' }); +const folderName = `Folder ${Date.now()}` +const dashboardName = 'dashboard' + Math.random().toString(36).substring(7); + +async function login(page) { + await page.goto(process.env["ZO_BASE_URL"]); + // 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"]); + //Enter Password + await page.locator('label').filter({ hasText: 'Password *' }).click(); + await page + .locator('[data-cy="login-password"]') + .fill(process.env["ZO_ROOT_USER_PASSWORD"]); + await page.locator('[data-cy="login-sign-in"]').click(); + // await page.waitForTimeout(4000); + // await page.goto(process.env["ZO_BASE_URL"]); +} + + +const selectStreamAndStreamTypeForLogs = async (page,stream) => {await page.waitForTimeout( + 4000);await page.locator( + '[data-test="log-search-index-list-select-stream"]').click({ force: true });await page.locator( + "div.q-item").getByText(`${stream}`).first().click({ force: true }); +}; +test.describe("Variable 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 }) => { + await login(page); + await page.waitForTimeout(5000) + + // ("ingests logs via API", () => { + 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 logsdata = {}; // Fill this with your actual data + + // Making a POST request using fetch API + const response = await page.evaluate(async ({ url, headers, orgId, streamName, logsdata }) => { + const fetchResponse = await fetch(`${url}/api/${orgId}/${streamName}/_json`, { + method: 'POST', + headers: headers, + body: JSON.stringify(logsdata) + }); + return await fetchResponse.json(); + }, { + url: process.env.INGESTION_URL, + headers: headers, + orgId: orgId, + streamName: streamName, + logsdata: logsdata + }); + + console.log(response); + // }); + // const allorgs = page.waitForResponse("**/api/default/organizations**"); + // const functions = page.waitForResponse("**/api/default/functions**"); + await page.goto( + `${logData.logsUrl}?org_identifier=${process.env["ORGNAME"]}` + ); + const allsearch = page.waitForResponse("**/api/default/_search**"); + await selectStreamAndStreamTypeForLogs(page,logData.Stream); + await applyQueryButton(page); + // const streams = page.waitForResponse("**/api/default/streams**"); + }); + + + + test('should select 1, select all variable and delete panel delete dashboard', async ({ page }) => { + + await page.locator('[data-test="menu-link-\\/dashboards-item"]').click(); + await page.waitForTimeout(2000); + 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(dashboardName); + 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="index-dropdown-stream"]').click(); + await page.waitForTimeout(2000); + await page.getByRole('option', { name: 'e2e_automate' }).locator('div').nth(2).click(); + await page.waitForTimeout(2000); + 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_kubectl_kubernetes_io_default_container"] [data-test="dashboard-add-y-data"]').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('e2evariable'); + await page.locator('[data-test="dashboard-panel-save"]').click(); + await page.locator('[data-test="dashboard-setting-btn"]').click(); + await page.waitForTimeout(2000); + await page.getByRole('tab', { name: 'Variables' }).click(); + await page.getByRole('button', { name: 'Add Variable' }).click(); + await page.waitForTimeout(2000); + await page.getByLabel('Name *').click(); + await page.getByLabel('Name *').fill('e2evariable'); + await page.locator('.row > label > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native').first().click(); + await page.getByRole('option', { name: 'logs' }).click(); + await page.getByLabel('Stream *').click(); + await page.getByRole('option', { name: 'default', exact: true }).locator('div').nth(2).click(); + await page.getByLabel('Stream *').click(); + await page.getByRole('option', { name: 'e2e_automate' }).click(); + await page.getByLabel('Field *').click(); + await page.getByText('kubernetes_host').click(); + await page.locator('[data-test="dashboard-query_values-show_multiple_values"] div').nth(2).click(); + await page.getByLabel('Default max record size(').click(); + await page.getByRole('button', { name: 'Save' }).click(); + await page.getByText('ip-10-2-56-221.us-east-2.compute.internale2evariable').click(); + await page.waitForTimeout(200); + await page.getByText('ip-10-2-15-197.us-east-2.').click({force: true}); + + await page.getByRole('main').locator('div').filter({ hasText: /^arrow_drop_down$/ }).click(); + await page.getByText('Select All').click(); + await page.waitForTimeout(200) + await page.getByRole('main').locator('div').filter({ hasText: /^arrow_drop_down$/ }).click() + await page.waitForTimeout(200); + const items = await page.$$('div.q-virtual-scroll__content > div[role="option"]'); + for (const item of items) { + const label = await item.$('.q-item__label'); + const text = await (await label.getProperty('textContent')).jsonValue(); + const isSelected = await item.evaluate(item => item.getAttribute('aria-selected')); + console.log(`${text} is selected: ${isSelected === 'true'}`); + } + await page.locator('[data-test="dashboard-variable-adhoc-add-selector"]').click(); + await page.waitForTimeout(200); + await page.locator('[data-test="dashboard-edit-panel-e2evariable-dropdown"]').click(); + await page.locator('[data-test="dashboard-delete-panel"]').click(); + await page.locator('[data-test="confirm-button"]').click(); + await page.locator(2000) + await page.locator('[data-test="dashboard-back-btn"]').click(); + await page.locator(2000) + await page.getByRole('row', { name: `01 ${dashboardName}` }).locator('[data-test="dashboard-delete"]').click(); + // await page.getByRole('row', { name: '01 testvariable' }).locator('[data-test="dashboard-delete"]').click(); + await page.waitForTimeout(200); + await page.locator('[data-test="confirm-button"]').click(); + + }); + + }); + + + +