158 lines
6.7 KiB
TypeScript
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();
|
|
});
|
|
});
|
|
});
|