418 lines
16 KiB
TypeScript
418 lines
16 KiB
TypeScript
import {Page, expect} from '@playwright/test';
|
|
|
|
import {
|
|
ControlQA,
|
|
DashCommonQa,
|
|
DashRelationTypes,
|
|
DashTabItemControlSourceType,
|
|
} from '../../../../src/shared';
|
|
|
|
import DashboardPage from '../../../page-objects/dashboard/DashboardPage';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {getStringFullUrl, slct} from '../../../utils';
|
|
import {TestParametrizationConfig} from '../../../types/config';
|
|
import {CommonUrls} from '../../../page-objects/constants/common-urls';
|
|
import {SelectorElementType} from '../../../page-objects/dashboard/controlActions/ControlActions';
|
|
|
|
const PARAMS = {
|
|
DATASET_FIRST_CONTROL: {
|
|
appearance: {
|
|
title: 'state',
|
|
},
|
|
sourceType: DashTabItemControlSourceType.Dataset,
|
|
datasetField: {
|
|
innerText: 'state',
|
|
},
|
|
},
|
|
DATASET_SECOND_CONTROL: {
|
|
appearance: {
|
|
title: 'city',
|
|
},
|
|
sourceType: DashTabItemControlSourceType.Dataset,
|
|
datasetField: {
|
|
innerText: 'city',
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
STATE_VALUE: 'Vermont',
|
|
CITY_VALUE: 'Burlington',
|
|
INPUT_TEXT_VALUE: 'text for autoupdate',
|
|
};
|
|
|
|
const SELECTORS_TITLES = {
|
|
DATASET_SELECTORS: [
|
|
PARAMS.DATASET_FIRST_CONTROL.appearance.title,
|
|
PARAMS.DATASET_SECOND_CONTROL.appearance.title,
|
|
],
|
|
MANUAL_SELECTORS: [
|
|
PARAMS.MANUAL_FIRST_SELECTOR.appearance.title,
|
|
PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
],
|
|
FIRST_DATASET_SELECTOR: [PARAMS.DATASET_FIRST_CONTROL.appearance.title],
|
|
SECOND_DATASET_SELECTOR: [PARAMS.DATASET_SECOND_CONTROL.appearance.title],
|
|
SECOND_MANUAL_SELECTOR: [PARAMS.MANUAL_SECOND_SELECTOR.appearance.title],
|
|
};
|
|
|
|
const getSecondSelectItemsCount = async (dashboardPage: DashboardPage) => {
|
|
const cityItemsLocator = await dashboardPage.controlActions.getSelectItemsLocatorByTitle(
|
|
PARAMS.DATASET_SECOND_CONTROL.appearance.title,
|
|
);
|
|
|
|
return await cityItemsLocator.count();
|
|
};
|
|
|
|
datalensTest.describe('Dashboards - Autoupdate options of group selectors', () => {
|
|
datalensTest.afterEach(async ({page, config}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.deleteDash({workbookId: config.workbookId});
|
|
});
|
|
|
|
datalensTest(
|
|
'Dataset selectors affect each other before applying when auto-update is enabled',
|
|
async ({page, config}: {page: Page; config: TestParametrizationConfig}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup(
|
|
[
|
|
{
|
|
...PARAMS.DATASET_FIRST_CONTROL,
|
|
dataset: {
|
|
link: getStringFullUrl(config.datasets.entities.Basic.url),
|
|
},
|
|
},
|
|
{
|
|
...PARAMS.DATASET_SECOND_CONTROL,
|
|
dataset: {
|
|
link: getStringFullUrl(config.datasets.entities.Basic.url),
|
|
},
|
|
},
|
|
],
|
|
{buttonApply: true, updateControlOnChange: true},
|
|
);
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.DATASET_SELECTORS,
|
|
waitForLoader: true,
|
|
},
|
|
workbookId: config.workbookId,
|
|
});
|
|
|
|
await expect(await getSecondSelectItemsCount(dashboardPage)).toBeGreaterThan(1);
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.DATASET_SELECTORS,
|
|
action: async () => {
|
|
// select influencing value
|
|
await dashboardPage.controlActions.selectControlValueByTitle(
|
|
PARAMS.DATASET_FIRST_CONTROL.appearance.title,
|
|
PARAMS.STATE_VALUE,
|
|
);
|
|
},
|
|
waitForLoader: true,
|
|
});
|
|
|
|
const cityItemsLocator =
|
|
await dashboardPage.controlActions.getSelectItemsLocatorByTitle(
|
|
PARAMS.DATASET_SECOND_CONTROL.appearance.title,
|
|
);
|
|
|
|
await expect(cityItemsLocator.first()).toHaveText(PARAMS.CITY_VALUE);
|
|
const cityResultItemsCount = await cityItemsLocator.count();
|
|
|
|
await expect(cityResultItemsCount).toEqual(1);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
"Dataset selectors don't affect each other before applying when auto-update is disabled",
|
|
async ({page, config}: {page: Page; config: TestParametrizationConfig}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup(
|
|
[
|
|
{
|
|
...PARAMS.DATASET_FIRST_CONTROL,
|
|
dataset: {
|
|
link: getStringFullUrl(config.datasets.entities.Basic.url),
|
|
},
|
|
},
|
|
{
|
|
...PARAMS.DATASET_SECOND_CONTROL,
|
|
dataset: {
|
|
link: getStringFullUrl(config.datasets.entities.Basic.url),
|
|
},
|
|
},
|
|
],
|
|
{buttonApply: true},
|
|
);
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.DATASET_SELECTORS,
|
|
waitForLoader: true,
|
|
},
|
|
workbookId: config.workbookId,
|
|
});
|
|
// check that initial count of items
|
|
const cityItemsCount = await getSecondSelectItemsCount(dashboardPage);
|
|
await expect(cityItemsCount).toBeGreaterThan(1);
|
|
|
|
// select influencing value
|
|
await dashboardPage.controlActions.selectControlValueByTitle(
|
|
PARAMS.DATASET_FIRST_CONTROL.appearance.title,
|
|
PARAMS.STATE_VALUE,
|
|
);
|
|
|
|
await expect(await getSecondSelectItemsCount(dashboardPage)).toEqual(cityItemsCount);
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.SECOND_DATASET_SELECTOR,
|
|
action: async () => {
|
|
await page.locator(slct(ControlQA.controlButtonApply)).click();
|
|
},
|
|
waitForLoader: true,
|
|
});
|
|
|
|
// after apply the range of values should decrease due to the influence of first selector
|
|
await expect(await getSecondSelectItemsCount(dashboardPage)).toEqual(1);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'Manual selectors with aliases affect each other before applying when auto-update is enabled',
|
|
async ({page, config}) => {
|
|
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},
|
|
);
|
|
|
|
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,
|
|
});
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.MANUAL_SELECTORS,
|
|
waitForLoader: true,
|
|
},
|
|
workbookId: config.workbookId,
|
|
});
|
|
|
|
const firstControl = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_FIRST_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.MANUAL_SELECTORS,
|
|
action: async () => {
|
|
await firstControl.fill(PARAMS.INPUT_TEXT_VALUE);
|
|
await firstControl.blur();
|
|
},
|
|
waitForLoader: true,
|
|
});
|
|
|
|
const secondSelectorValue = await dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input')
|
|
.inputValue();
|
|
|
|
await expect(secondSelectorValue).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
},
|
|
);
|
|
|
|
datalensTest.skip(
|
|
"Manual selectors with aliases don't affect each other before applying when auto-update is disabled",
|
|
async ({page, config}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup(
|
|
[PARAMS.MANUAL_FIRST_SELECTOR, PARAMS.MANUAL_SECOND_SELECTOR],
|
|
{buttonApply: true},
|
|
);
|
|
|
|
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,
|
|
});
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.MANUAL_SELECTORS,
|
|
waitForLoader: false,
|
|
},
|
|
workbookId: config.workbookId,
|
|
});
|
|
const firstControl = dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_FIRST_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input');
|
|
|
|
await firstControl.fill(PARAMS.INPUT_TEXT_VALUE);
|
|
await firstControl.blur();
|
|
|
|
const secondSelectorValue = await dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input')
|
|
.inputValue();
|
|
|
|
await expect(secondSelectorValue).toEqual('');
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.SECOND_MANUAL_SELECTOR,
|
|
waitForLoader: true,
|
|
action: async () => {
|
|
await page.locator(slct(ControlQA.controlButtonApply)).click();
|
|
},
|
|
});
|
|
|
|
// last changed param will be applied to both selectors
|
|
const firstSelectorValueAfterApply = await dashboardPage
|
|
.getSelectorLocatorByTitle({
|
|
title: PARAMS.MANUAL_SECOND_SELECTOR.appearance.title,
|
|
type: 'input',
|
|
})
|
|
.locator('input')
|
|
.inputValue();
|
|
|
|
await expect(firstSelectorValueAfterApply).toEqual(PARAMS.INPUT_TEXT_VALUE);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
"Dataset selectors with ignore don't affect each other with any auto-update setting",
|
|
async ({page, config}: {page: Page; config: TestParametrizationConfig}) => {
|
|
const dashboardPage = new DashboardPage({page});
|
|
|
|
await dashboardPage.createDashboard({
|
|
editDash: async () => {
|
|
await dashboardPage.controlActions.addSelectorsGroup(
|
|
[
|
|
{
|
|
...PARAMS.DATASET_FIRST_CONTROL,
|
|
dataset: {
|
|
link: getStringFullUrl(config.datasets.entities.Basic.url),
|
|
},
|
|
},
|
|
{
|
|
...PARAMS.DATASET_SECOND_CONTROL,
|
|
dataset: {
|
|
link: getStringFullUrl(config.datasets.entities.Basic.url),
|
|
},
|
|
},
|
|
],
|
|
{buttonApply: true, updateControlOnChange: true},
|
|
);
|
|
|
|
const selectorElem =
|
|
await dashboardPage.controlActions.getDashControlLinksIconElem();
|
|
|
|
await selectorElem.click();
|
|
|
|
// choose new link
|
|
await page.click(slct(DashCommonQa.RelationTypeButton));
|
|
await page.click(slct(DashRelationTypes.ignore));
|
|
|
|
await dashboardPage.applyRelationsChanges();
|
|
},
|
|
waitingRequestOptions: {
|
|
controlTitles: SELECTORS_TITLES.DATASET_SELECTORS,
|
|
waitForLoader: true,
|
|
},
|
|
workbookId: config.workbookId,
|
|
});
|
|
|
|
// check that initial count of items more than 1
|
|
const initialItemsCount = await getSecondSelectItemsCount(dashboardPage);
|
|
|
|
await expect(initialItemsCount).toBeGreaterThan(1);
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.FIRST_DATASET_SELECTOR,
|
|
action: async () => {
|
|
// select influencing value
|
|
await dashboardPage.controlActions.selectControlValueByTitle(
|
|
PARAMS.DATASET_FIRST_CONTROL.appearance.title,
|
|
PARAMS.STATE_VALUE,
|
|
);
|
|
},
|
|
waitForLoader: true,
|
|
});
|
|
|
|
await expect(await getSecondSelectItemsCount(dashboardPage)).toEqual(initialItemsCount);
|
|
|
|
// disable autoupdate
|
|
await dashboardPage.disableAutoupdateInFirstControl();
|
|
|
|
await page.reload();
|
|
|
|
// Check that there is no state
|
|
const pageURL = new URL(page.url());
|
|
await expect(pageURL.searchParams.get('state')).toEqual(null);
|
|
|
|
await dashboardPage.expectControlsRequests({
|
|
controlTitles: SELECTORS_TITLES.FIRST_DATASET_SELECTOR,
|
|
action: async () => {
|
|
// select influencing value
|
|
await dashboardPage.controlActions.selectControlValueByTitle(
|
|
PARAMS.DATASET_FIRST_CONTROL.appearance.title,
|
|
PARAMS.STATE_VALUE,
|
|
);
|
|
},
|
|
});
|
|
|
|
// check that count of items doesn't change
|
|
await expect(await getSecondSelectItemsCount(dashboardPage)).toEqual(initialItemsCount);
|
|
|
|
await page.locator(slct(ControlQA.controlButtonApply)).click();
|
|
|
|
await page.waitForResponse(CommonUrls.CreateDashState);
|
|
|
|
// check that count of items still doesn't change
|
|
await expect(await getSecondSelectItemsCount(dashboardPage)).toEqual(initialItemsCount);
|
|
},
|
|
);
|
|
});
|