Files
openobserve/tests/ui-testing/playwright-tests/websocket.spec.js
T
Shyam Panjiyar 5ddfe5d81a test: pagination for streaming in match all and limit playwright (#7268)
### **PR Type**
Tests


___

### **Description**
- Add Playwright pagination streaming tests
  - match_all, count, limit queries
  - various join types

- Validate interesting fields toggles and queries

- Test histogram toggle behaviors and no-data cases


___



### **Changes walkthrough** 📝
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>pagination.spec.js</strong><dd><code>Add streaming
pagination and behavior tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/playwright-tests/pagination.spec.js

<li>Imported base fixtures and page objects<br> <li> Setup login,
ingestion, management before tests<br> <li> Added tests for streaming
pagination queries<br> <li> Added join, interesting-fields, histogram
behavior tests


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7268/files#diff-5e44451149ef320c6c78668ff2a42a152fdc7b0565838c8d7f7385f5d4809cb5">+199/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

___

> <details> <summary> Need help?</summary><li>Type <code>/help how to
...</code> in the comments thread for any questions about PR-Agent
usage.</li><li>Check out the <a
href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a>
for more information.</li></details>
2025-06-25 16:56:36 +05:30

224 lines
8.3 KiB
JavaScript

import { test, expect } from "./baseFixtures";
import { LoginPage } from '../pages/loginPage';
import { LogsPage } from '../pages/logsPage.js';
import { IngestionPage } from '../pages/ingestionPage';
import { ManagementPage } from '../pages/managementPage';
test.describe.configure({ mode: 'parallel' });
test.describe("Websocket for logs", () => {
let loginPage, logsPage, ingestionPage, managementPage;
test.beforeEach(async ({ page }) => {
loginPage = new LoginPage(page);
ingestionPage = new IngestionPage(page);
logsPage = new LogsPage(page);
managementPage = new ManagementPage(page);
await loginPage.gotoLoginPage();
await loginPage.loginAsInternalUser();
await loginPage.login(); // Login as root user
await ingestionPage.ingestion();
await ingestionPage.ingestionJoin();
await managementPage.goToManagement();
await page.waitForTimeout(5000);
await managementPage.checkAndEnableWebSocket();
});
test.skip("Run query after selecting two streams after enabling websocket", async ({ page }) => {
// If using CommonJS
// const managementPage = require('../pages/managementPage');
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.displayTwoStreams();
await logsPage.selectRunQuery();
});
test.skip("Enable Websocket for running query after selecting two streams and SQL Mode On", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.displayTwoStreams();
});
test.skip("Enable Websocket for running query after selecting two streams, selecting field and SQL Mode On", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerName();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.validateResult();
});
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering join queries", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerNameJoin();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.displayCountQuery();
await logsPage.validateResult();
});
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering join limit", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerNameJoinLimit();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.validateResult();
});
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering join like", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerNameJoinLike();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
});
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering Left join queries", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerNameLeftJoin();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.validateResult();
});
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering Right join queries", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerNameRightJoin();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.validateResult();
});
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering Full join queries", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.kubernetesContainerNameFullJoin();
await logsPage.enableSQLMode();
await logsPage.selectRunQuery();
await logsPage.validateResult();
});
test.skip("Enable Websocket for clicking on interesting field icon and display field in editor", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.enableSQLMode();
await logsPage.clickQuickModeToggle();
await logsPage.selectRunQuery();
await logsPage.clickInterestingFields();
await logsPage.validateInterestingFields();
});
test.skip("Enable Websocket for clicking on interesting field icon and display query in editor", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.enableSQLMode();
await logsPage.clickQuickModeToggle();
await logsPage.selectRunQuery();
await logsPage.clickInterestingFields();
await logsPage.validateInterestingFieldsQuery();
});
test.skip("Enable Websocket for Adding or removing interesting field removes it from editor and results too", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexAndStreamJoin();
await logsPage.enableSQLMode();
await logsPage.clickQuickModeToggle();
await logsPage.selectRunQuery();
await logsPage.clickInterestingFields();
await logsPage.addRemoveInteresting();
});
test.skip("Websocket enabled histogram is disabled and run query, results appear and then user switches on Historgram, getting error", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexStreamDefault();
await logsPage.selectRunQuery();
await logsPage.toggleHistogram();
await logsPage.selectRunQuery();
await logsPage.toggleHistogram();
// Check that the error message is not visible
const errorHeading = page.getByRole('heading', { name: 'Error while fetching' });
await expect(errorHeading).not.toBeVisible();
// Ensure that the error details button is also not visible or disabled
const errorDetailsButton = page.locator('[data-test="logs-page-histogram-error-details-btn"]');
await expect(errorDetailsButton).not.toBeVisible();
});
test.skip("No Histogram should be displayed if Data is not available", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexStreamDefault();
await logsPage.enableSQLMode();
await logsPage.clearAndFillQueryEditor('SELECT count(_timestamp) FROM "default" where code = 201');
await page.waitForTimeout(1000);
await logsPage.selectRunQuery();
await logsPage.waitForSearchResultAndCheckText('warning No data found for histogram.');
});
test.skip("Histogram should be displayed if it is enabled again and data is available", async ({ page }) => {
await logsPage.navigateToLogs();
await logsPage.selectIndexStreamDefault();
await logsPage.enableSQLMode();
await logsPage.clearAndFillQueryEditor('SELECT count(_timestamp) FROM "default" where code = 200');
await page.waitForTimeout(1000);
await logsPage.selectRunQuery();
await expect(page.locator('[data-test="logs-search-result-bar-chart"] canvas')).toBeVisible();
await logsPage.toggleHistogram();
await logsPage.selectRunQuery();
await expect(page.locator('[data-test="logs-search-result-bar-chart"] canvas')).not.toBeVisible();
await logsPage.toggleHistogram();
await logsPage.selectRunQuery();
await expect(page.locator('[data-test="logs-search-result-bar-chart"] canvas')).toBeVisible();
});
});