2026-06-24 21:10:34 +05:00

158 lines
6.7 KiB
TypeScript

import {expect} from '@playwright/test';
import {
ChartKitQa,
DialogFieldSubTotalsQa,
WizardPageQa,
WizardVisualizationId,
} from '../../../../../src/shared';
import {PlaceholderName} from '../../../../page-objects/wizard/SectionVisualization';
import WizardPage from '../../../../page-objects/wizard/WizardPage';
import {openTestPage, slct} from '../../../../utils';
import datalensTest from '../../../../utils/playwright/globalTestDefinition';
datalensTest.describe('Wizard', () => {
datalensTest.describe('Pivot table', () => {
datalensTest.beforeEach(async ({page, config}) => {
await openTestPage(page, config.wizard.urls.WizardBasicDataset);
const wizardPage = new WizardPage({page});
// Create measure field
const measureField = 'OrdersCount';
await wizardPage.createNewFieldWithFormula(measureField, 'count([order_id])');
await wizardPage.setVisualization(WizardVisualizationId.PivotTable);
});
datalensTest('Subtotals for NULL values', async ({page}) => {
const wizardPage = new WizardPage({page});
const chartContainer = page.locator(slct(WizardPageQa.SectionPreview));
// Setup filters
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.Filters, 'city');
await wizardPage.filterEditor.selectValues(['Aberdeen', 'Aurora']);
await wizardPage.filterEditor.apply();
// Create two nullable fields
await wizardPage.createNewFieldWithFormula(
'Nullable1',
'if ([region] = "West") then null else [region] end',
);
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Rows,
'Nullable1',
);
await wizardPage.createNewFieldWithFormula(
'Nullable2',
'if([City] = "Aberdeen") then null else [City] end',
);
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Rows,
'Nullable2',
);
// Add measure field
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Measures,
'Sales',
);
// Turn on subtotals
await wizardPage.visualizationItemDialog.open(PlaceholderName.Rows, 'Nullable2');
await wizardPage.page.locator(slct(DialogFieldSubTotalsQa.SubTotalsSwitch)).click();
await wizardPage.visualizationItemDialog.clickOnApplyButton();
// Each parent row must have subRow with totals
const subtotalsCell = chartContainer.locator('td', {hasText: 'Total'});
await expect(subtotalsCell).toHaveText(['Total null', 'Total Central']);
});
datalensTest('Subtotals for Rows @screenshot', async ({page}) => {
const wizardPage = new WizardPage({page});
const chartContainer = page.locator(slct(WizardPageQa.SectionPreview));
const previewLoader = chartContainer.locator(slct(ChartKitQa.Loader));
// Setup filters
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Filters,
'Category',
);
await wizardPage.filterEditor.selectValues(['Furniture']);
await wizardPage.filterEditor.apply();
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.PivotTableColumns,
'Category',
);
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.PivotTableColumns,
'segment',
);
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Rows,
'sub_category',
);
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Measures,
'Sales',
);
// Set the width of the columns so that the screenshots are not flapping due to the auto width
await wizardPage.columnSettings.open(PlaceholderName.Rows);
await wizardPage.columnSettings.switchUnit('segment', 'pixel');
await wizardPage.columnSettings.fillWidthValueInput('segment', '100');
await wizardPage.columnSettings.apply();
// Turn on subtotals
await wizardPage.visualizationItemDialog.open(PlaceholderName.Rows, 'sub_category');
await wizardPage.page.locator(slct(DialogFieldSubTotalsQa.SubTotalsSwitch)).click();
await wizardPage.visualizationItemDialog.clickOnApplyButton();
await expect(previewLoader).not.toBeVisible();
await expect(chartContainer).toHaveScreenshot();
});
datalensTest('Subtotals for Columns @screenshot', async ({page}) => {
const wizardPage = new WizardPage({page});
const chartContainer = page.locator(slct(WizardPageQa.SectionPreview));
const previewLoader = chartContainer.locator(slct(ChartKitQa.Loader));
// Setup filters
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Filters,
'Category',
);
await wizardPage.filterEditor.selectValues(['Furniture']);
await wizardPage.filterEditor.apply();
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.Rows, 'segment');
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.PivotTableColumns,
'sub_category',
);
await wizardPage.sectionVisualization.addFieldByClick(
PlaceholderName.Measures,
'Sales',
);
// Set the width of the columns so that the screenshots are not flapping due to the auto width
await wizardPage.columnSettings.open(PlaceholderName.Rows);
await wizardPage.columnSettings.switchUnit('segment', 'pixel');
await wizardPage.columnSettings.fillWidthValueInput('segment', '100');
await wizardPage.columnSettings.apply();
// Turn on subtotals
await wizardPage.visualizationItemDialog.open(
PlaceholderName.PivotTableColumns,
'sub_category',
);
await wizardPage.page.locator(slct(DialogFieldSubTotalsQa.SubTotalsSwitch)).click();
await wizardPage.visualizationItemDialog.clickOnApplyButton();
await expect(previewLoader).not.toBeVisible();
await expect(chartContainer).toHaveScreenshot();
});
});
});