datalens-ui/tests/suites/dash/tabs/tabsWidgetOrder.test.ts
2026-06-24 20:31:05 +05:00

123 lines
4.9 KiB
TypeScript

import {Page} from '@playwright/test';
import DashboardPage from '../../../page-objects/dashboard/DashboardPage';
import {RobotChartsDashboardUrls} from '../../../utils/constants';
import datalensTest from '../../../utils/playwright/globalTestDefinition';
import {getUniqueTimestamp, openTestPage, slct} from '../../../utils';
import {dragAndDropListItem, openTabPopupWidgetOrder} from '../helpers';
import {DashkitQa, DialogTabsQA, EntryDialogQA} from '../../../../src/shared/constants';
import {ActionPanelDashSaveControlsQa} from '../../../../src/shared/constants/qa/action-panel';
const SELECTORS = {
SELECTOR_LIST_ITEMS: '.g-list__item',
};
datalensTest.describe(`Dashboards - Change widgets order on tab`, () => {
datalensTest.beforeEach(async ({page}: {page: Page}) => {
const dashName = `e2e-test-dash-tabs-widget-order-copy-${getUniqueTimestamp()}`;
const dashboardPage = new DashboardPage({page});
await openTestPage(page, RobotChartsDashboardUrls.DashboardWithTabsAndSelectors);
await dashboardPage.copyDashboard(dashName);
await dashboardPage.enterEditMode();
});
datalensTest.afterEach(async ({page}: {page: Page}) => {
const dashboardPage = new DashboardPage({page});
await dashboardPage.deleteDashFromEditMode();
});
datalensTest(
'Widget order is successfully reset when order changes are undone',
async ({page}: {page: Page}) => {
const dashboardPage = new DashboardPage({page});
// When there are changes while client migration saving changes before tabs order check
if (await dashboardPage.hasChanges()) {
await dashboardPage.clickSaveButton();
await dashboardPage.enterEditMode();
}
const popupWidgetOrderList = await openTabPopupWidgetOrder(dashboardPage, 0);
const widgetOrderListItems = await popupWidgetOrderList.$$(
SELECTORS.SELECTOR_LIST_ITEMS,
);
const factWidgetOrder = await Promise.all(
widgetOrderListItems.map((widget) => widget.textContent()),
);
await dragAndDropListItem(page, {
listSelector: slct(DialogTabsQA.PopupWidgetOrderList),
sourceIndex: 0,
targetIndex: 1,
});
const actualWidgetOrderListItems = await popupWidgetOrderList.$$(
SELECTORS.SELECTOR_LIST_ITEMS,
);
const actualWidgetOrder = await Promise.all(
actualWidgetOrderListItems.map((widget) => widget.textContent()),
);
expect(factWidgetOrder.reverse()).toEqual(actualWidgetOrder);
await page.click(slct(EntryDialogQA.Apply));
await page.click(slct(DialogTabsQA.Cancel));
await dashboardPage.waitForSelector(
`${slct(ActionPanelDashSaveControlsQa.Save)}[disabled]`,
);
},
);
datalensTest(
'Widget order is successfully reset when exiting dashboard editing mode',
async ({page}: {page: Page}) => {
const dashboardPage = new DashboardPage({page});
let popupWidgetOrderList = await openTabPopupWidgetOrder(dashboardPage, 0);
const widgetOrderListItems = await popupWidgetOrderList.$$(
SELECTORS.SELECTOR_LIST_ITEMS,
);
const factWidgetOrder = await Promise.all(
widgetOrderListItems.map((widget) => widget.textContent()),
);
expect(factWidgetOrder.length).toBeGreaterThan(0);
await dragAndDropListItem(page, {
listSelector: slct(DialogTabsQA.PopupWidgetOrderList),
sourceIndex: 0,
targetIndex: 1,
});
await page.click(slct(EntryDialogQA.Apply));
await page.click(slct(DialogTabsQA.Save));
await dashboardPage.waitForSelector(
`${slct(ActionPanelDashSaveControlsQa.Save)}:not([disabled])`,
);
await dashboardPage.exitEditMode();
const dashGridItems = await page.$$(slct(DashkitQa.GRID_ITEM));
const dashWidgetsCount = dashGridItems.length;
expect(dashWidgetsCount).toEqual(factWidgetOrder.length);
await dashboardPage.enterEditMode();
// open popup widget order again
popupWidgetOrderList = await openTabPopupWidgetOrder(dashboardPage, 0);
const actualWidgetOrderListItems = await popupWidgetOrderList.$$(
SELECTORS.SELECTOR_LIST_ITEMS,
);
const actualWidgetOrder = await Promise.all(
actualWidgetOrderListItems.map((widget) => widget.textContent()),
);
expect(factWidgetOrder).toEqual(actualWidgetOrder);
await page.click(slct(EntryDialogQA.Cancel));
await page.click(slct(DialogTabsQA.Cancel));
},
);
});