Files
openobserve/tests/ui-testing/playwright-tests/schema.spec.js
T
Sai Nikhil 064d029939 fix: schema page tab improvements (#6524)
1. This PR adds 
**previous approach** 
1. we were showing both All Fields and UDS tabs even user doesnot have
UDS enabled
2. UDS is shown as second tab


**current approach**
1. only show UDS if enabled otherwise show only All fields 
3. if UDS enabled show it as first tab and instead of All Fields(when
UDS enabled) renamed it to Other Fields and also added tooltip with some
explanatory text after Other Fields with a info icon as
**_

> Other fields show only the schema fields that existed before the
stream was configured to use a user-defined schema.

_**
2025-04-12 18:05:36 +05:30

231 lines
13 KiB
JavaScript

import { test, expect } from "./baseFixtures";
import logData from "../../ui-testing/cypress/fixtures/log.json";
import logsdata from "../../test-data/logs_data.json";
import { LogsPage } from '../pages/logsPage.js';
test.describe.configure({ mode: 'parallel' });
const streamName = `stream${Date.now()}`;
async function login(page) {
await page.goto(process.env["ZO_BASE_URL"]);
if (await page.getByText('Login as internal user').isVisible()) {
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();
}
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 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);
}
test.describe("Schema testcases", () => {
let logsPage;
// 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);
}
test.beforeEach(async ({ page }) => {
await login(page);
logsPage = new LogsPage(page);
await page.waitForTimeout(1000)
await ingestion(page);
await page.waitForTimeout(2000)
await page.goto(
`${logData.logsUrl}?org_identifier=${process.env["ORGNAME"]}`
);
const allsearch = page.waitForResponse("**/api/default/_search**");
await logsPage.selectStreamAndStreamTypeForLogs("e2e_automate");
await applyQueryButton(page);
});
test('stream schema settings updated to be displayed under logs', async ({ page }) => {
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').fill('e2e_automate');
await page.waitForTimeout(1000);
await page.getByRole('button', { name: 'Stream Detail' }).first().click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubectl_kubernetes_io_default_container-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubernetes_io_psp-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-add-field-button"]').click();
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.locator('[data-test="tab-schemaFields"]').click();
await page.getByRole('cell', { name: 'kubernetes_annotations_kubectl_kubernetes_io_default_container' }).click();
await page.getByRole('cell', { name: 'kubernetes_annotations_kubernetes_io_psp' }).click();
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000);
await page.locator('button').filter({ hasText: 'close' }).click();
await page.getByRole('button', { name: 'Explore' }).first().click();
await page.waitForTimeout(1000);
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-15-m-btn"]').click();
await page.waitForTimeout(2000);
// await page.locator('[data-test="logs-search-bar-refresh-btn"]').click();
await page.locator('[data-test="log-table-column-1-_timestamp"] [data-test="table-row-expand-menu"]').click();
await page.waitForTimeout(1000);
await page.getByText(/^arrow_drop_down_all:.*$/).click();
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('_timestamp');
await page.locator('[data-test="log-search-index-list-fields-table"]').getByTitle('_timestamp').click();
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('_all');
await page.locator('[data-test="log-search-index-list-fields-table"]').getByTitle('_all')
await page.locator('[data-test="logs-all-fields-btn"]').click();
await page.locator('[data-test="log-search-index-list-field-search-input"]').click();
await page.locator('[data-test="log-search-index-list-fields-table"]').getByTitle('_all')
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('_timestamp');
await page.locator('[data-test="log-search-index-list-fields-table"]').getByTitle('_timestamp').click();
await page.waitForSelector('[data-test="log-expand-detail-key-_all"]', { state: 'visible' });
await page.locator('[data-test="logs-search-bar-query-editor"] > .monaco-editor').click();
await page.keyboard.type("str_match(_all, \'test\')");
await page.waitForTimeout(2000);
await page.locator('[data-test="logs-search-bar-refresh-btn"]').click();
const errorMessage = page.locator('[data-test="logs-search-error-message"]');
await expect(errorMessage).not.toBeVisible();
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').fill('e2e_automate');
await page.waitForTimeout(1000);
await page.getByRole('button', { name: 'Stream Detail' }).first().click();
await page.locator('[data-test="tab-schemaFields"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubectl_kubernetes_io_default_container-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubernetes_io_psp-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-add-field-button"]').click();
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.locator('button').filter({ hasText: 'close' }).click();
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000);
await page.getByRole('button', { name: 'Explore' }).first().click();
await page.waitForTimeout(3000);
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-15-m-btn"]').click();
// await page.locator('[data-test="logs-search-bar-refresh-btn"]').click();
await page.waitForTimeout(2000);
await page.locator('[data-test="log-table-column-1-_timestamp"] [data-test="table-row-expand-menu"]').click();
await page.getByText('arrow_drop_down_timestamp:').click();
});
test('should display stream details on navigating from blank stream to stream with details', async ({ page }) => {
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.locator('[data-test="log-stream-add-stream-btn"]').click();
await page.getByLabel('Name *').click();
await page.getByLabel('Name *').fill(streamName);
await page.locator('.q-form > div:nth-child(2) > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native').click();
await page.getByRole('option', { name: 'Logs' }).locator('div').nth(2).click();
await page.locator('[data-test="save-stream-btn"]').click();
await page.waitForTimeout(1000);
await page.locator('[data-test="menu-link-\\/-item"]').click();
await page.locator('[data-test="menu-link-\\/logs-item"]').click();
await page.locator('#fnEditor > .monaco-editor > .overflow-guard > .monaco-scrollable-element > .lines-content > .view-lines > .view-line').click()
await page.locator('[data-test="log-search-index-list-select-stream"]').click();
await page.locator('[data-test="log-search-index-list-select-stream"]').fill(streamName);
await page.getByText(streamName).click();
// await page.getByRole('option', { name: streamName }).locator('div').nth(2).click();
await page.waitForTimeout(1000);
await page.locator('[data-test="log-search-index-list-select-stream"]').click();
await page.locator('[data-test="log-search-index-list-select-stream"]').fill('e2e_automate');
// await page.getByRole('option', { name: 'e2e_automate' }).locator('div').nth(2).click();
await page.getByText('e2e_automate').click();
await page.waitForTimeout(4000);
await page.waitForSelector('text=Loading...', { state: 'hidden' });
await page.locator('[data-test="log-search-index-list-fields-table"]').getByTitle('_timestamp').click()
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').fill(streamName);
await page.waitForTimeout(1000);
await page.locator('[data-test="log-stream-refresh-stats-btn"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByRole('button', { name: 'Delete' }).click();
await page.getByRole('button', { name: 'Ok' }).click();
});
test('should add a new field and delete it from schema', async ({ page }) => {
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').fill('e2e_automate');
await page.waitForTimeout(1000);
await page.getByRole('button', { name: 'Stream Detail' }).first().click();
await page.locator('[data-test="tab-allFields"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubectl_kubernetes_io_default_container-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubernetes_io_psp-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-add-field-button"]').click();
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.locator('[data-test="schema-add-fields-title"]').click();
await page.getByPlaceholder('Name *').click();
await page.getByPlaceholder('Name *').fill('newtest');
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.locator('[data-test="schema-field-search-input"]').fill('newtest')
await page.waitForTimeout(1000);
await page.locator('[data-test="schema-stream-delete-newtest-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-add-field-button"]').click();
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.getByRole('cell', { name: 'newtest' }).first().click();
await page.locator('[data-test="schema-stream-delete-newtest-field-fts-key-checkbox"]').first().click();
await page.locator('[data-test="schema-delete-button"]').click();
await page.locator('[data-test="confirm-button"]').click();
await page.waitForTimeout(2000);
await page.locator('button').filter({ hasText: 'close' }).click()
await page.waitForTimeout(1000);
await page.getByRole('button', { name: 'Stream Detail' }).first().click();
await page.locator('[data-test="tab-schemaFields"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubectl_kubernetes_io_default_container-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-stream-delete-kubernetes_annotations_kubernetes_io_psp-field-fts-key-checkbox"]').click();
await page.locator('[data-test="schema-add-field-button"]').click();
await page.locator('[data-test="schema-update-settings-button"]').click();
});
})