Files
openobserve/tests/ui-testing/playwright-tests/GeneralTests/usersOrg.spec.js
T
Shrinath RaoandClaude Opus 4.6 d573d01a62 fix(test): eliminate bare networkidle timeouts across entire test suite (#10494)
## Summary

- Replaced every bare `waitForLoadState('networkidle')` with `{ timeout:
10000 }.catch(() => {})` across **56 files** (35 spec files, 21 page
objects)
- OpenObserve pages maintain persistent RUM/replay/WebSocket connections
that prevent `networkidle` from ever resolving, causing 90s timeout
crashes
- Added `fetchWithRetry` helper for transient 502/proxy errors in SDR
multi-pattern `beforeAll`
- Bumped SDR multi-pattern test timeout from 300s to 420s for CI

## Files changed

**Page objects (21 files):** alertsPage, alertManagement,
alertCreationWizard, alertTemplatesPage, alertBulkOperations, logsPage,
streamsPage, streamAssociationPage, sdrPatternsPage,
sdrVerificationPage, dashboardPage, functionsPage, pipelinesPage,
enrichmentPage, sanityPage, schemaPage, loginPage, commonActions, and
more

**Spec files (35 files):** All SDR specs, all Traces specs, all Logs
specs, all RegressionSet specs, Alerts specs, Pipelines specs,
Dashboards specs, Functions specs, GeneralTests specs, wait-helpers
utility

## Test plan

- [x] Verify zero bare `networkidle` calls remain in `tests/ui-testing/`
- [ ] CI passes for SDR, Streams, Logs Regression, and other test suites

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:42:32 +05:30

312 lines
14 KiB
JavaScript

const { test, expect, navigateToBase } = require('../utils/enhanced-baseFixtures.js');
const PageManager = require('../../pages/page-manager.js');
const testLogger = require('../utils/test-logger.js');
test.describe.configure({ mode: 'parallel' });
test.describe("Users and Organizations", () => {
let pageManager;
test("Error Message displayed if Email Blank", async ({ page }, testInfo) => {
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser("");
await pageManager.userPage.userCreate();
await pageManager.userPage.verifySuccessMessage('Please enter a valid email address');
testLogger.info('Test completed successfully');
});
test("Error Message displayed if Add user with missing role", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.userCreate();
await pageManager.userPage.verifySuccessMessage('Field is required');
testLogger.info('Test completed successfully');
});
test("User created with password and first name and last name", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.verifySuccessMessage('User added successfully.');
testLogger.info('Test completed successfully');
});
test("User not created if Email already exists", async ({ page }, testInfo) => {
const duplicateEmail = `duplicate${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(duplicateEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await pageManager.userPage.verifySuccessMessage('User added successfully.');
await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {});
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(duplicateEmail);
await pageManager.userPage.selectUserRole('Admin');
await pageManager.userPage.userCreate();
await pageManager.userPage.verifySuccessMessage('User is already part of the organization');
testLogger.info('Test completed successfully');
});
test("User not created if Cancel clicked on first Add User Page", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await page.locator('[data-test="cancel-user-button"]').click();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.searchUser(uniqueEmail);
await pageManager.userPage.verifyUserNotExists();
testLogger.info('Test completed successfully');
});
test("User not created if Cancel clicked on second Add User Page", async ({ page }, testInfo) => {
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await page.waitForLoadState('domcontentloaded');
await page.locator('[data-test="cancel-user-button"]').click();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.searchUser(uniqueEmail);
await pageManager.userPage.verifyUserNotExists();
testLogger.info('Test completed successfully');
});
test("User Created and deleted", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.verifySuccessMessage('User added successfully.');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.deleteUser(uniqueEmail);
await pageManager.userPage.verifySuccessMessage('User deleted successfully.');
testLogger.info('Test completed successfully');
});
test("User Created and not deleted if cancel clicked", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.verifySuccessMessage('User added successfully.');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.deleteUserCancel(uniqueEmail);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.searchUser(uniqueEmail);
await pageManager.userPage.verifyUserExists(uniqueEmail);
testLogger.info('Test completed successfully');
});
test("User Created and updated First Name and Last Name", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.verifySuccessMessage('User added successfully.');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.editUser(uniqueEmail);
await pageManager.userPage.addUserFirstLast('c', 'd');
await pageManager.userPage.userCreate();
await pageManager.userPage.verifySuccessMessage('User updated successfully.');
testLogger.info('Test completed successfully');
});
test("User Created and updated Password", async ({ page }, testInfo) => {
const uniqueEmail = `email${Date.now()}_${Math.floor(Math.random() * 10000)}@gmail.com`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.addUser(uniqueEmail);
await pageManager.userPage.selectUserRole('Admin');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.addUserPassword(process.env["ZO_ROOT_USER_PASSWORD"]);
await pageManager.userPage.addUserFirstLast('a', 'b');
await pageManager.userPage.userCreate();
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.verifySuccessMessage('User added successfully.');
await page.waitForLoadState('domcontentloaded');
await pageManager.userPage.gotoIamPage();
await pageManager.userPage.editUser(uniqueEmail);
await pageManager.userPage.addNewPassword('1234567890');
await pageManager.userPage.userCreate();
await pageManager.userPage.verifySuccessMessage('User updated successfully.');
testLogger.info('Test completed successfully');
});
test('Add Organization Successfully', async ({ page }, testInfo) => {
const uniqueOrgName = `Org${Date.now()}_${Math.floor(Math.random() * 10000)}`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.createOrgPage.navigateToOrg();
await pageManager.createOrgPage.clickAddOrg();
await pageManager.createOrgPage.fillOrgName(uniqueOrgName);
await pageManager.createOrgPage.clickSaveOrg();
await pageManager.userPage.verifySuccessMessage('Organization added successfully.');
testLogger.info('Test completed successfully');
});
test('Save button disabled if Add Organization with Empty Name', async ({ page }, testInfo) => {
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.createOrgPage.navigateToOrg();
await pageManager.createOrgPage.clickAddOrg();
await pageManager.createOrgPage.fillOrgName('');
await pageManager.createOrgPage.checkSaveEnabled();
testLogger.info('Test completed successfully');
});
test('Organization not added if Cancel clicked', async ({ page }, testInfo) => {
const uniqueOrgName = `Org${Date.now()}_${Math.floor(Math.random() * 10000)}`;
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.createOrgPage.navigateToOrg();
await pageManager.createOrgPage.clickAddOrg();
await pageManager.createOrgPage.fillOrgName(uniqueOrgName);
await pageManager.createOrgPage.clickCancelButton();
await pageManager.createOrgPage.navigateToOrg();
await pageManager.createOrgPage.searchOrg(uniqueOrgName);
await pageManager.createOrgPage.verifyOrgNotExists();
testLogger.info('Test completed successfully');
});
test('Error Message displayed if Add Organization is blank', async ({ page }, testInfo) => {
testLogger.testStart(testInfo.title, testInfo.file);
await navigateToBase(page);
pageManager = new PageManager(page);
await pageManager.createOrgPage.navigateToOrg();
await pageManager.createOrgPage.clickAddOrg();
await pageManager.createOrgPage.fillOrgName('');
await page.locator('.q-field__bottom').click();
await pageManager.userPage.verifySuccessMessage('Name is required');
testLogger.info('Test completed successfully');
});
});