274 lines
11 KiB
TypeScript
274 lines
11 KiB
TypeScript
import {Page, expect} from '@playwright/test';
|
|
|
|
import {DashCommonQa, DashRelationTypes} from '../../../../src/shared';
|
|
|
|
import DashboardPage from '../../../page-objects/dashboard/DashboardPage';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {slct} from '../../../utils';
|
|
import {CommonUrls} from '../../../page-objects/constants/common-urls';
|
|
import {SelectorElementType} from '../../../page-objects/dashboard/controlActions/ControlActions';
|
|
|
|
const PARAMS = {
|
|
MANUAL_OUTSIDE_SELECTOR: {
|
|
appearance: {
|
|
title: 'outside-control',
|
|
},
|
|
fieldName: 'outside-control-1',
|
|
elementType: SelectorElementType.Input,
|
|
},
|
|
MANUAL_FIRST_SELECTOR: {
|
|
appearance: {
|
|
title: 'test-control-1',
|
|
},
|
|
fieldName: 'test-control-field-1',
|
|
elementType: SelectorElementType.Input,
|
|
},
|
|
MANUAL_SECOND_SELECTOR: {
|
|
appearance: {
|
|
title: 'test-control-2',
|
|
},
|
|
fieldName: 'test-control-field-2',
|
|
elementType: SelectorElementType.Input,
|
|
},
|
|
INPUT_TEXT_VALUE: 'text for autoupdate',
|
|
SIDE_TEXT_VALUE: 'side text value',
|
|
};
|
|
|
|
const SELECTORS_TITLES = {
|
|
ALL_SELECTORS: [
|
|
PARAMS.MANUAL_FIRST_SELECTOR.appearance.title,
|
|
PARAMS.MANUAL_OUTSIDE_SELECTOR.appearance.title,
|
|
PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
],
|
|
};
|
|
|
|
const getUrlWithoutState = (page: Page) => {
|
|
const url = new URL(page.url());
|
|
|
|
url.search = '';
|
|
|
|
return url.toString();
|
|
};
|
|
|
|
datalensTest.describe(
|
|
'Dashboards - The influence of the selector outside the group on the group',
|
|
() => {
|
|
datalensTest.afterEach(async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.deleteDash();
|
|
});
|
|
|
|
datalensTest(
|
|
'A selector outside the group correctly affects one of the selectors associated with another selector by an alias inside the group',
|
|
async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup(
|
|
[PARAMS.MANUAL_FIRST_SELECTOR, PARAMS.MANUAL_SECOND_SELECTOR],
|
|
{buttonApply: true, updateControlOnChange: true},
|
|
);
|
|
|
|
// set alias between selectors in group
|
|
const selectorElem =
|
|
await dashboardPage.controlActions.getDashControlLinksIconElem();
|
|
|
|
await dashboardPage.setupNewLinks({
|
|
linkType: DashRelationTypes.both,
|
|
firstParamName: PARAMS.MANUAL_FIRST_SELECTOR.fieldName,
|
|
secondParamName: PARAMS.MANUAL_SECOND_SELECTOR.fieldName,
|
|
widgetElem: selectorElem,
|
|
});
|
|
|
|
await dashboardPage.controlActions.addSelector(
|
|
PARAMS.MANUAL_OUTSIDE_SELECTOR,
|
|
);
|
|
|
|
// set alias between single selector and group
|
|
const singleSelectorElem =
|
|
await dashboardPage.controlActions.getDashControlLinksIconElem(1);
|
|
|
|
await dashboardPage.setupNewLinks({
|
|
linkType: DashRelationTypes.both,
|
|
firstParamName: PARAMS.MANUAL_OUTSIDE_SELECTOR.fieldName,
|
|
secondParamName: PARAMS.MANUAL_FIRST_SELECTOR.fieldName,
|
|
widgetElem: singleSelectorElem,
|
|
});
|
|
|
|
await singleSelectorElem.click();
|
|
|
|
// set ignore with second selector
|
|
await page.locator(slct(DashCommonQa.RelationTypeButton)).nth(1).click();
|
|
await page.click(slct(DashRelationTypes.ignore));
|
|
|
|
await dashboardPage.applyRelationsChanges();
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.ALL_SELECTORS,
|
|
},
|
|
});
|
|
|
|
const singleControl = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_OUTSIDE_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
await singleControl.fill(PARAMS.INPUT_TEXT_VALUE);
|
|
await singleControl.blur();
|
|
|
|
const firstControlLocator = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_FIRST_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
const secondControlLocator = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
const firstControlValue = await firstControlLocator.inputValue();
|
|
|
|
const secondControlValue = await secondControlLocator.inputValue();
|
|
|
|
await expect(firstControlValue).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
await expect(secondControlValue).toEqual(firstControlValue);
|
|
|
|
await page.waitForResponse(CommonUrls.CreateDashState);
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.ALL_SELECTORS,
|
|
|
|
action: async () => {
|
|
// check that state is correctly applied after reload
|
|
await page.reload();
|
|
},
|
|
});
|
|
|
|
const firstControlValueAfterReload = await firstControlLocator.inputValue();
|
|
const secondControlValueAfterReload = await secondControlLocator.inputValue();
|
|
|
|
await expect(firstControlValueAfterReload).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
await expect(secondControlValueAfterReload).toEqual(firstControlValue);
|
|
|
|
// disable autoupdate in group
|
|
await dashboardPage.disableAutoupdateInFirstControl();
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.ALL_SELECTORS,
|
|
|
|
action: async () => {
|
|
// reload page without state
|
|
await page.goto(getUrlWithoutState(page));
|
|
},
|
|
});
|
|
|
|
await singleControl.fill(PARAMS.INPUT_TEXT_VALUE);
|
|
await singleControl.blur();
|
|
|
|
const firstControlValueWithoutAutoupdate = await firstControlLocator.inputValue();
|
|
const secondControlValueWithoutAutoupdate = await secondControlLocator.inputValue();
|
|
|
|
await expect(firstControlValueWithoutAutoupdate).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
await expect(secondControlValueWithoutAutoupdate).toEqual('');
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'A selector outside the group does not reset the selector state values in group when influenced',
|
|
async ({page}: {page: Page}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup(
|
|
[PARAMS.MANUAL_FIRST_SELECTOR, PARAMS.MANUAL_SECOND_SELECTOR],
|
|
{buttonApply: true, updateControlOnChange: true},
|
|
);
|
|
await dashboardPage.controlActions.addSelector(
|
|
PARAMS.MANUAL_OUTSIDE_SELECTOR,
|
|
);
|
|
|
|
// set alias between single selector and one of group selector
|
|
const singleSelectorElem =
|
|
await dashboardPage.controlActions.getDashControlLinksIconElem();
|
|
|
|
await dashboardPage.setupNewLinks({
|
|
linkType: DashRelationTypes.both,
|
|
firstParamName: PARAMS.MANUAL_FIRST_SELECTOR.fieldName,
|
|
secondParamName: PARAMS.MANUAL_OUTSIDE_SELECTOR.fieldName,
|
|
widgetElem: singleSelectorElem,
|
|
});
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.ALL_SELECTORS,
|
|
},
|
|
});
|
|
|
|
const firstControlLocator = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_FIRST_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
const secondControlLocator = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
await secondControlLocator.fill(PARAMS.SIDE_TEXT_VALUE);
|
|
|
|
const singleControl = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_OUTSIDE_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
await singleControl.fill(PARAMS.INPUT_TEXT_VALUE);
|
|
await singleControl.blur();
|
|
|
|
const firstControlValue = await firstControlLocator.inputValue();
|
|
const secondControlValue = await secondControlLocator.inputValue();
|
|
|
|
await expect(firstControlValue).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
await expect(secondControlValue).toEqual(PARAMS.SIDE_TEXT_VALUE);
|
|
|
|
await page.waitForResponse(CommonUrls.CreateDashState);
|
|
|
|
// disable autoupdate in group
|
|
await dashboardPage.disableAutoupdateInFirstControl();
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.ALL_SELECTORS,
|
|
action: async () => {
|
|
// reload page without state
|
|
await page.goto(getUrlWithoutState(page));
|
|
},
|
|
});
|
|
|
|
await secondControlLocator.fill(PARAMS.SIDE_TEXT_VALUE);
|
|
|
|
await singleControl.fill(PARAMS.INPUT_TEXT_VALUE);
|
|
await singleControl.blur();
|
|
|
|
const firstControlValueWithoutAutoupdate = await firstControlLocator.inputValue();
|
|
const secondControlValueWithoutAutoupdate = await secondControlLocator.inputValue();
|
|
|
|
await expect(firstControlValueWithoutAutoupdate).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
await expect(secondControlValueWithoutAutoupdate).toEqual(PARAMS.SIDE_TEXT_VALUE);
|
|
},
|
|
);
|
|
},
|
|
);
|