265 lines
9.9 KiB
TypeScript
265 lines
9.9 KiB
TypeScript
import {Page, expect, Request} from '@playwright/test';
|
|
|
|
import {DashEntryQa, DialogGroupControlQa, TabMenuQA} from '../../../../src/shared';
|
|
|
|
import DashboardPage from '../../../page-objects/dashboard/DashboardPage';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {openTestPage, slct} from '../../../utils';
|
|
import {CommonUrls} from '../../../page-objects/constants/common-urls';
|
|
import {TestParametrizationConfig} from '../../../types/config';
|
|
import {SelectorElementType} from '../../../page-objects/dashboard/controlActions/ControlActions';
|
|
|
|
const PARAMS = {
|
|
MANUAL_CONTROL: {
|
|
appearance: {
|
|
title: 'parent control',
|
|
},
|
|
fieldName: 'element to duplicate',
|
|
elementType: SelectorElementType.Input,
|
|
required: true,
|
|
defaultValue: 'default Value',
|
|
},
|
|
MANUAL_SECOND_CONTROL: {
|
|
appearance: {
|
|
title: 'copied control',
|
|
},
|
|
fieldName: 'duplicated',
|
|
elementType: SelectorElementType.Input,
|
|
required: false,
|
|
defaultValue: 'another default value',
|
|
},
|
|
MANUAL_THIRD_CONTROL: {
|
|
appearance: {
|
|
title: 'third control',
|
|
},
|
|
fieldName: 'third',
|
|
},
|
|
TEST_TEXT: 'test text',
|
|
OLD_SELECTOR_TAB: 'Tab 2',
|
|
ADDITIONAL_TAB: 'Additional tab',
|
|
};
|
|
|
|
datalensTest.describe('Dashboards - Manipulations with configs', () => {
|
|
datalensTest.afterEach(async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.deleteDash();
|
|
});
|
|
|
|
datalensTest(
|
|
'Selectors in the modal are duplicated and copied correctly',
|
|
async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelector(PARAMS.MANUAL_CONTROL);
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: [PARAMS.MANUAL_CONTROL.appearance.title],
|
|
},
|
|
});
|
|
await dashboardPage.enterEditMode();
|
|
await dashboardPage.clickFirstControlSettingsButton();
|
|
await dashboardPage.controlActions.waitForDialog();
|
|
|
|
// we need to hover item to show control menu
|
|
await page.locator(slct(TabMenuQA.Item)).nth(0).hover();
|
|
await page.locator(slct(DialogGroupControlQa.controlMenu)).click();
|
|
await page.locator(slct(DialogGroupControlQa.duplicateControlButton)).click();
|
|
|
|
const itemsCountAfterDuplicate = await page.locator(slct(TabMenuQA.Item)).count();
|
|
|
|
expect(itemsCountAfterDuplicate).toEqual(2);
|
|
|
|
await dashboardPage.controlActions.dialogControl.checkCurrentValues(
|
|
PARAMS.MANUAL_CONTROL,
|
|
);
|
|
|
|
await page.locator(slct(TabMenuQA.Item)).nth(1).hover();
|
|
await page.locator(slct(DialogGroupControlQa.controlMenu)).nth(1).click();
|
|
await page.locator(slct(DialogGroupControlQa.copyControlButton)).click();
|
|
|
|
await page.locator(slct(TabMenuQA.Paste)).click();
|
|
|
|
const itemsCountAfterCopy = await page.locator(slct(TabMenuQA.Item)).count();
|
|
|
|
expect(itemsCountAfterCopy).toEqual(3);
|
|
|
|
await dashboardPage.controlActions.dialogControl.checkCurrentValues(
|
|
PARAMS.MANUAL_CONTROL,
|
|
);
|
|
|
|
// try to save
|
|
// saving should fail due to duplicate fields
|
|
await dashboardPage.controlActions.applyControlSettings();
|
|
|
|
await dashboardPage.controlActions.editSelectorBySettings(PARAMS.MANUAL_THIRD_CONTROL);
|
|
|
|
await page.locator(slct(TabMenuQA.Item)).nth(1).click();
|
|
|
|
await dashboardPage.controlActions.editSelectorBySettings(PARAMS.MANUAL_SECOND_CONTROL);
|
|
|
|
await dashboardPage.controlActions.applyControlSettings();
|
|
|
|
await dashboardPage.saveChanges();
|
|
|
|
const changedLabels = await dashboardPage.getGroupSelectorLabels();
|
|
|
|
// required field add * to title
|
|
expect(changedLabels).toEqual([
|
|
`${PARAMS.MANUAL_CONTROL.appearance.title}*`,
|
|
PARAMS.MANUAL_SECOND_CONTROL.appearance.title,
|
|
`${PARAMS.MANUAL_THIRD_CONTROL.appearance.title}*`,
|
|
]);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'When resaving, the id of the selector is not lost',
|
|
async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelector(PARAMS.MANUAL_CONTROL);
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: [PARAMS.MANUAL_CONTROL.appearance.title],
|
|
},
|
|
});
|
|
|
|
const apiRequest = page.waitForRequest(CommonUrls.ApiRun);
|
|
|
|
const selectorLocator = dashboardPage.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_CONTROL.appearance.title,
|
|
type: 'input',
|
|
});
|
|
|
|
await selectorLocator.locator('input').fill(PARAMS.TEST_TEXT);
|
|
// click outside the selector to call blur and apply its value
|
|
await page.locator(slct(DashEntryQa.EntryName)).click();
|
|
|
|
const currentControlId = (await apiRequest).postDataJSON().config.data.shared.id;
|
|
|
|
await dashboardPage.enterEditMode();
|
|
await dashboardPage.clickFirstControlSettingsButton();
|
|
await dashboardPage.controlActions.waitForDialog();
|
|
|
|
await dashboardPage.controlActions.editSelectorBySettings({
|
|
appearance: {title: PARAMS.TEST_TEXT},
|
|
});
|
|
|
|
await dashboardPage.controlActions.applyControlSettings();
|
|
|
|
// check that a request with the same id is sent after the update
|
|
const requestPromise = page.waitForRequest((request: Request) => {
|
|
if (request.url().includes(CommonUrls.ApiRun)) {
|
|
expect(request.postDataJSON().config.data.shared.id).toEqual(currentControlId);
|
|
// waitForRequest is finished when callback returns true
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
await dashboardPage.saveChanges();
|
|
|
|
await requestPromise;
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'Old selector can be copied from the dash and inserted into a group of selectors',
|
|
async ({page, config}: {page: Page; config: TestParametrizationConfig}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
// open the dashboard with a selector on one of the tabs
|
|
await openTestPage(page, config.dash.urls.DashboardLoadPrioritySelectors);
|
|
await dashboardPage.duplicateDashboard({
|
|
dashId: config.dash.urls.DashboardLoadPrioritySelectors,
|
|
useUserFolder: true,
|
|
});
|
|
|
|
await dashboardPage.enterEditMode();
|
|
|
|
await dashboardPage.copyWidget(1);
|
|
|
|
await dashboardPage.controlActions.clickAddSelector();
|
|
await dashboardPage.controlActions.editSelectorBySettings(PARAMS.MANUAL_CONTROL);
|
|
|
|
await page.locator(slct(TabMenuQA.Paste)).click();
|
|
|
|
const itemsCount = await page.locator(slct(TabMenuQA.Item)).count();
|
|
|
|
expect(itemsCount).toEqual(2);
|
|
|
|
await dashboardPage.controlActions.applyControlSettings();
|
|
|
|
await dashboardPage.saveChanges();
|
|
|
|
const selectorsLabelsCount = (await dashboardPage.getGroupSelectorLabels()).length;
|
|
|
|
expect(selectorsLabelsCount).toEqual(3);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'Group of selector can be copied from the dash and inserted into a group of selectors',
|
|
async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup([
|
|
PARAMS.MANUAL_CONTROL,
|
|
PARAMS.MANUAL_SECOND_CONTROL,
|
|
]);
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: [
|
|
PARAMS.MANUAL_CONTROL.appearance.title,
|
|
PARAMS.MANUAL_SECOND_CONTROL.appearance.title,
|
|
],
|
|
},
|
|
});
|
|
|
|
await dashboardPage.enterEditMode();
|
|
await dashboardPage.copyWidget();
|
|
|
|
await dashboardPage.addTab(PARAMS.ADDITIONAL_TAB);
|
|
await dashboardPage.changeTab({tabName: PARAMS.ADDITIONAL_TAB});
|
|
|
|
await dashboardPage.controlActions.clickAddSelector();
|
|
await dashboardPage.controlActions.editSelectorBySettings(PARAMS.MANUAL_THIRD_CONTROL);
|
|
|
|
await page.locator(slct(TabMenuQA.Paste)).click();
|
|
|
|
const itemsCount = await page.locator(slct(TabMenuQA.Item)).count();
|
|
|
|
expect(itemsCount).toEqual(3);
|
|
|
|
await dashboardPage.controlActions.dialogControl.checkCurrentValues(
|
|
PARAMS.MANUAL_CONTROL,
|
|
);
|
|
|
|
await page.locator(slct(TabMenuQA.Item)).nth(2).click();
|
|
|
|
await dashboardPage.controlActions.dialogControl.checkCurrentValues(
|
|
PARAMS.MANUAL_SECOND_CONTROL,
|
|
);
|
|
|
|
await dashboardPage.controlActions.applyControlSettings();
|
|
await dashboardPage.saveChanges();
|
|
|
|
const selectorsLabels = await dashboardPage.getGroupSelectorLabels();
|
|
|
|
// required field add * to title
|
|
expect(selectorsLabels).toEqual([
|
|
PARAMS.MANUAL_THIRD_CONTROL.appearance.title,
|
|
`${PARAMS.MANUAL_CONTROL.appearance.title}*`,
|
|
PARAMS.MANUAL_SECOND_CONTROL.appearance.title,
|
|
]);
|
|
},
|
|
);
|
|
});
|