datalens-ui/tests/opensource-suites/dash/revisions/revisionsSwitching.test.ts
2026-06-24 20:31:05 +05:00

108 lines
4.7 KiB
TypeScript

import {Browser, Page} from '@playwright/test';
import {Workbook} from '../../../page-objects/workbook/Workbook';
import {ControlQA} from '../../../../src/shared/constants/qa/control';
import {DashKitOverlayMenuQa} from '../../../../src/shared/constants/qa/dash';
import Revisions from '../../../page-objects/common/Revisions';
import DashboardPage from '../../../page-objects/dashboard/DashboardPage';
import {slct} from '../../../utils';
import {COMMON_SELECTORS} from '../../../utils/constants';
import datalensTest from '../../../utils/playwright/globalTestDefinition';
import {arbitraryText} from '../constants';
import {RevisionsPanelQa} from '../../../../src/shared/constants/qa';
const revTexts = ['Revision 1', 'Revision 2', 'Revision 3'];
let page: Page;
datalensTest.describe('Dashboards - Versioning', () => {
datalensTest.beforeAll(async ({browser}: {browser: Browser}) => {
page = await browser.newPage();
const workbookPO = new Workbook(page);
const dashboardPage = new DashboardPage({page});
await dashboardPage.createDashboard({
editDash: async () => {
await dashboardPage.addText({text: arbitraryText.first});
},
});
for (const text of revTexts) {
await dashboardPage.enterEditMode();
const controlSwitcher = page.locator(slct(ControlQA.controlMenu));
expect(controlSwitcher).toBeVisible();
await controlSwitcher.click();
await page.click(slct(DashKitOverlayMenuQa.RemoveButton));
await dashboardPage.addText({text});
await dashboardPage.clickSaveButton();
await workbookPO.editEntityButton.waitForVisible();
}
});
datalensTest.afterAll(async () => {
const dashboardPage = new DashboardPage({page});
await dashboardPage.deleteDash();
await page.close();
});
datalensTest.beforeEach(async () => {
await page.reload();
});
datalensTest('Dashboard with multiple revisions, checking revision switching', async () => {
const dashboardPage = new DashboardPage({page});
// opening the revision list
await dashboardPage.revisions.openList();
//click on the dashboard version
const revIdFromList = await dashboardPage.revisions.getRevisionIdByIdx(2);
await dashboardPage.revisions.getRevisionByIdx(2).click();
// we are waiting for the drawing of the blue upper panel with the author and the revision date
await page.waitForSelector(slct(COMMON_SELECTORS.REVISIONS_TOP_PANEL));
// Check that the revision has changed, because there is a header and the corresponding get parameter
await page.waitForSelector(DashboardPage.selectors.text);
const selector = await page.$(DashboardPage.selectors.text);
const selectorText = await selector?.innerText();
expect(selectorText).toMatch(revTexts[0]);
const revId = Revisions.getUrlRevIdParam(page);
expect(revId).toEqual(revIdFromList);
});
datalensTest(
'Dashboard with several revisions, check the correctness of the selected items and reset to the current version',
async () => {
const dashboardPage = new DashboardPage({page});
// opening the revision list
await dashboardPage.waitForOpeningRevisionsList();
await page.waitForSelector(slct(COMMON_SELECTORS.REVISIONS_LIST_ROW));
// click on the dashboard version
await dashboardPage.revisions.getRevisionByIdx(2).click();
// we are waiting for the drawing of the blue upper panel with the author and the revision date
await page.waitForSelector(slct(COMMON_SELECTORS.REVISIONS_TOP_PANEL));
// waiting for the loader to appear and disappear (for the case of a slow network)
await dashboardPage.waitForLoaderDisappear();
//click on the "open current" button
await page.click(
`${slct(COMMON_SELECTORS.REVISIONS_TOP_PANEL)} ${slct(
RevisionsPanelQa.ButtonOpenActual,
)}`,
);
// waiting for the loader to appear and disappear (for the case of a slow network)
await dashboardPage.waitForLoaderDisappear();
// Check that the revision has changed, because there is a new header and there is no get parameter
await page.waitForSelector(DashboardPage.selectors.text);
const selector = await page.$(DashboardPage.selectors.text);
const selectorText = await selector?.innerText();
expect(selectorText).toMatch(revTexts[2]);
const revId = Revisions.getUrlRevIdParam(page);
expect(revId).toBeNull();
},
);
});