datalens-ui/tests/suites/wizard/parameters/urlParameters.test.ts
2026-06-24 20:31:05 +05:00

125 lines
4.4 KiB
TypeScript

import {Page} from '@playwright/test';
import {PlaceholderName} from '../../../page-objects/wizard/SectionVisualization';
import WizardPage from '../../../page-objects/wizard/WizardPage';
import {
getXAxisValues,
openTestPage,
waitForCondition,
waitForValidSearchParams,
} from '../../../utils';
import {RobotChartsWizardUrls} from '../../../utils/constants';
import datalensTest from '../../../utils/playwright/globalTestDefinition';
datalensTest.describe('Wizard - Parameters from URLParams', () => {
datalensTest(
'The field will be parsed as a parameter from URLParams, if such a field in the dataset is a parameter',
async ({page}) => {
const wizardPage = new WizardPage({page});
await openTestPage(page, RobotChartsWizardUrls.WizardWithParameterizedLocalField, {
local_parameter: 'Technology',
});
await waitForCondition(async () => {
const fields = await wizardPage.sectionVisualization.getPlaceholderItems(
PlaceholderName.DashboardParameters,
);
const textValues = await Promise.all(fields.map((field) => field.textContent()));
return fields.length === 1 && textValues[0] === 'local_parameter: Technology';
}).catch(() => {
throw new Error('The parameter from URLParams has not appeared in the chart');
});
},
);
datalensTest(
'The parameter from URLParams will overwrite the parameter value in the chart',
async ({page, context}) => {
const wizardPage = new WizardPage({page});
await openTestPage(page, RobotChartsWizardUrls.WizardWithParameterizedLocalField);
await wizardPage.sectionVisualization.replaceFieldByDragAndDrop(
PlaceholderName.X,
'Category',
'parameterized_field',
);
const parameterizedXAxisValues = ['Office Supplies', 'parameter_title', 'Technology'];
await waitForCondition(async () => {
const xAxisValues = await getXAxisValues(page);
return xAxisValues.join(',') === parameterizedXAxisValues.join(',');
});
const parameterizedXAxisValuesWithUrlParameter = [
'Furniture',
'Office Supplies',
'parameter_title',
];
const secondPage: Page = await context.newPage();
const secondWizardPage = new WizardPage({page: secondPage});
await openTestPage(
secondPage,
RobotChartsWizardUrls.WizardWithParameterizedLocalField,
{
local_parameter: 'Technology',
},
);
await secondWizardPage.sectionVisualization.replaceFieldByDragAndDrop(
PlaceholderName.X,
'Category',
'parameterized_field',
);
await waitForCondition(async () => {
const xAxisValues = await getXAxisValues(secondPage);
return xAxisValues.join(',') === parameterizedXAxisValuesWithUrlParameter.join(',');
}).catch(() => {
throw new Error(
'The parameter from URLParams has not appeared in the parameterized formula',
);
});
},
);
datalensTest(
'Removing a parameter from the Parameters section from the dashboard will remove the parameter from URLParams as well',
async ({page}) => {
const wizardPage = new WizardPage({page});
await openTestPage(page, RobotChartsWizardUrls.WizardWithParameterizedLocalField, {
local_parameter: 'Technology',
});
await waitForValidSearchParams({
page,
error: 'URLParams do not contain the parameter',
param: 'local_parameter',
shouldIncludeParam: true,
});
await wizardPage.sectionVisualization.removeFieldByClick(
PlaceholderName.DashboardParameters,
'local_parameter',
);
await waitForValidSearchParams({
page,
error: 'The parameter from the dashboard has not been removed from URLParams',
shouldIncludeParam: false,
param: 'local_parameter',
});
},
);
});