159 lines
5.9 KiB
TypeScript
159 lines
5.9 KiB
TypeScript
import {Page} from '@playwright/test';
|
|
|
|
import {WizardVisualizationId} from '../../../page-objects/common/Visualization';
|
|
import {PlaceholderName} from '../../../page-objects/wizard/SectionVisualization';
|
|
import WizardPage from '../../../page-objects/wizard/WizardPage';
|
|
import {expectArraysEqualUnordered, openTestPage, waitForCondition} from '../../../utils';
|
|
import {RobotChartsWizardUrls} from '../../../utils/constants';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {
|
|
DialogFieldLabelModeValuesQa,
|
|
DialogFieldMainSectionQa,
|
|
} from '../../../../src/shared/constants';
|
|
|
|
const EXPECTED_INITIAL_LABELS = ['742 009,40', '719 057,20', '836 174,90'];
|
|
const EXPECTED_FORMATTED_LABELS = ['742 009,4021', '719 057,2004', '836 174,8998'];
|
|
const EXPECTED_LABELS_WITH_LABEL_MODE_PERCENT = ['51%', '42%', '6%'];
|
|
|
|
async function getChartLabelValues(page: Page, expectedLength: number) {
|
|
let values: string[] = [];
|
|
|
|
await waitForCondition(async () => {
|
|
values = await page.evaluate(() => {
|
|
const lineLabelsSelector = '.highcharts-series-0.highcharts-data-labels';
|
|
const labelsSelector = '.highcharts-data-label';
|
|
const hcDataLabelsSelector = `${lineLabelsSelector} ${labelsSelector}`;
|
|
|
|
const labels = document.querySelectorAll(
|
|
[hcDataLabelsSelector, '.gcharts-pie__label', '.gcharts-line__label'].join(','),
|
|
);
|
|
|
|
return (
|
|
Array.from(labels)
|
|
.map((l) => l.textContent)
|
|
.filter((l): l is string => l !== null)
|
|
// Replacement is in progress
|
|
.map((l) => l.replace(/\u00a0/g, ' '))
|
|
);
|
|
});
|
|
|
|
return values.length === expectedLength;
|
|
}).catch(() => {
|
|
throw new Error(
|
|
`Expected number of labels was ${expectedLength}, but result is ${values.length}`,
|
|
);
|
|
});
|
|
|
|
return values;
|
|
}
|
|
|
|
datalensTest.describe('Wizard - formatting signatures (line)', () => {
|
|
datalensTest.beforeEach(async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await openTestPage(page, RobotChartsWizardUrls.WizardForDatasetSampleCh);
|
|
|
|
await wizardPage.setVisualization(WizardVisualizationId.Line);
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.X, 'Category');
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.Y, 'Sales');
|
|
});
|
|
|
|
datalensTest(
|
|
'If the signatures contain Measure Values, then the settings are taken from the tooltip settings',
|
|
async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(
|
|
PlaceholderName.Labels,
|
|
'Measure Values',
|
|
);
|
|
|
|
const initialLabels = await getChartLabelValues(wizardPage.page, 3);
|
|
|
|
expectArraysEqualUnordered(initialLabels, EXPECTED_INITIAL_LABELS);
|
|
|
|
await wizardPage.visualizationItemDialog.open(PlaceholderName.Y, 'Sales');
|
|
|
|
await wizardPage.visualizationItemDialog.changeInputValue(
|
|
DialogFieldMainSectionQa.PrecisionInput,
|
|
'4',
|
|
);
|
|
|
|
const promise = wizardPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await wizardPage.visualizationItemDialog.clickOnApplyButton();
|
|
|
|
await promise;
|
|
|
|
let labelsAfterPrecisionChange: string[];
|
|
|
|
await waitForCondition(async () => {
|
|
labelsAfterPrecisionChange = await getChartLabelValues(wizardPage.page, 3);
|
|
return (
|
|
labelsAfterPrecisionChange.sort().join(',') ===
|
|
EXPECTED_FORMATTED_LABELS.sort().join(',')
|
|
);
|
|
}).catch(() => {
|
|
throw new Error(
|
|
`Formatting was not applied.
|
|
Expected: ${EXPECTED_FORMATTED_LABELS.join(', ')};
|
|
Result: ${labelsAfterPrecisionChange.join(', ')}`,
|
|
);
|
|
});
|
|
},
|
|
);
|
|
});
|
|
|
|
datalensTest.describe('Wizard - formatting signatures (pie, donut)', () => {
|
|
datalensTest(
|
|
'When changing the "Signature Value" setting, it is saved in the field',
|
|
async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await openTestPage(page, RobotChartsWizardUrls.WizardForDatasetSampleCh);
|
|
|
|
await wizardPage.setVisualization(WizardVisualizationId.Pie);
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(
|
|
PlaceholderName.Dimensions,
|
|
'Category',
|
|
);
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(
|
|
PlaceholderName.Measures,
|
|
'Profit',
|
|
);
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.Labels, 'Profit');
|
|
|
|
await wizardPage.visualizationItemDialog.open(PlaceholderName.Labels, 'Profit');
|
|
|
|
await wizardPage.visualizationItemDialog.changeSelectorValue(
|
|
DialogFieldMainSectionQa.LabelModeSelector,
|
|
DialogFieldLabelModeValuesQa.Percent,
|
|
);
|
|
|
|
const apiRunPromise = wizardPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await wizardPage.visualizationItemDialog.clickOnApplyButton();
|
|
|
|
await apiRunPromise;
|
|
await wizardPage.chartkit.waitUntilLoaderExists();
|
|
|
|
const labels = await getChartLabelValues(wizardPage.page, 3);
|
|
|
|
expectArraysEqualUnordered(labels, EXPECTED_LABELS_WITH_LABEL_MODE_PERCENT);
|
|
|
|
await wizardPage.visualizationItemDialog.open(PlaceholderName.Labels, 'Profit');
|
|
|
|
const value = await wizardPage.visualizationItemDialog.getSelectorCurrentValue(
|
|
DialogFieldMainSectionQa.LabelModeSelector,
|
|
);
|
|
|
|
expect(value).toEqual(DialogFieldLabelModeValuesQa.Percent);
|
|
},
|
|
);
|
|
});
|