Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions tests/suites/memoryViewer/MemoryViewer.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import type {Locator, Page} from '@playwright/test';

import {VISIBILITY_TIMEOUT} from '../tenant/TenantPage';

export class MemoryViewer {
readonly container: Locator;
readonly progressContainer: Locator;
Expand All @@ -24,6 +26,14 @@ export class MemoryViewer {
this.definitionList = this.popup.locator('.g-definition-list');
}

async isVisible() {
return this.container.isVisible();
}

async waitForVisible() {
await this.container.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT});
}

async getStatus() {
const classList = await this.container.getAttribute('class');
if (classList?.includes('memory-viewer_status_good')) {
Expand Down
14 changes: 11 additions & 3 deletions tests/suites/memoryViewer/memoryViewer.test.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
import {expect, test} from '@playwright/test';

import {NodesPage} from '../nodes/NodesPage';
import {PaginatedTable} from '../paginatedTable/paginatedTable';

import {MemoryViewer} from './MemoryViewer';

test.describe('Memory Viewer Widget', () => {
test.beforeEach(async ({page}) => {
const nodesPage = new NodesPage(page);
const memoryViewer = new MemoryViewer(page);
await nodesPage.goto();

// Get the first row's memory viewer
const paginatedTable = await page.locator('.ydb-paginated-table__table');
await paginatedTable.waitFor();
const paginatedTable = new PaginatedTable(page);
await paginatedTable.waitForTableVisible();
await paginatedTable.waitForTableData();
if (!(await memoryViewer.isVisible())) {
await paginatedTable.openColumnSetup();
await paginatedTable.setColumnChecked('Memory');
await paginatedTable.applyColumnVisibility();
}
await memoryViewer.waitForVisible();
});

test('Memory viewer is visible and has correct status', async ({page}) => {
Expand Down
54 changes: 54 additions & 0 deletions tests/suites/paginatedTable/paginatedTable.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import type {Locator, Page} from '@playwright/test';

import {VISIBILITY_TIMEOUT} from '../tenant/TenantPage';

export class PaginatedTable {
private page: Page;
private tableSelector: Locator;
Expand All @@ -11,6 +13,8 @@ export class PaginatedTable {
private refreshButton: Locator;
private refreshIntervalSelect: Locator;
private headCells: Locator;
private columnSetupButton: Locator;
private columnSetupPopup: Locator;

constructor(page: Page) {
this.page = page;
Expand All @@ -23,6 +27,14 @@ export class PaginatedTable {
this.emptyTableRows = this.tableSelector.locator('.ydb-paginated-table__row_empty');
this.refreshButton = page.locator('.auto-refresh-control button[aria-label="Refresh"]');
this.refreshIntervalSelect = page.getByTestId('ydb-autorefresh-select');
this.columnSetupButton = this.tableSelector.locator(
'.g-tree-select.g-table-column-setup button',
);
this.columnSetupPopup = page.locator('.g-popup .g-select-popup.g-tree-select__popup');
}

async waitForTableVisible() {
await this.tableSelector.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT});
}

async search(searchTerm: string) {
Expand Down Expand Up @@ -119,6 +131,48 @@ export class PaginatedTable {
await this.waitForTableData();
}

async openColumnSetup() {
await this.columnSetupButton.click();
await this.columnSetupPopup.waitFor({state: 'visible'});
}

async setColumnChecked(columnName: string) {
const columnOption = this.columnSetupPopup.locator(`[data-list-item="${columnName}"]`);
const checkIcon = columnOption.locator('.g-icon.g-color-text_color_info');
const isVisible = await checkIcon.isVisible();
if (!isVisible) {
await columnOption.click();
}
}

async setColumnUnchecked(columnName: string) {
const columnOption = this.columnSetupPopup.locator(`[data-list-item="${columnName}"]`);
const checkIcon = columnOption.locator('.g-icon.g-color-text_color_info');
const isVisible = await checkIcon.isVisible();
if (isVisible) {
await columnOption.click();
}
}

async applyColumnVisibility() {
const applyButton = this.columnSetupPopup.locator('button:has-text("Apply")');
await applyButton.click();
await this.columnSetupPopup.waitFor({state: 'hidden'});
}

async getVisibleColumnsCount(): Promise<string> {
const statusText = await this.columnSetupButton
.locator('.g-table-column-setup__status')
.innerText();
return statusText;
}

async isColumnVisible(columnName: string): Promise<boolean> {
const columnOption = this.columnSetupPopup.locator(`[data-list-item="${columnName}"]`);
const checkIcon = columnOption.locator('.g-icon.g-color-text_color_info');
return await checkIcon.isVisible();
}

private async getColumnIndex(columnName: string): Promise<number> {
const count = await this.headCells.count();
for (let i = 0; i < count; i++) {
Expand Down
Loading