177 lines
8.5 KiB
TypeScript
177 lines
8.5 KiB
TypeScript
import {expect} from '@playwright/test';
|
|
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {openTestPage, slct} from '../../../utils';
|
|
import {FieldEditorQa, SectionDatasetQA, VisualizationItemQa} from '../../../../src/shared';
|
|
import WizardPage from '../../../page-objects/wizard/WizardPage';
|
|
import {DialogParameterDataTypes} from '../../../page-objects/common/DialogParameter';
|
|
import {PlaceholderName} from '../../../page-objects/wizard/SectionVisualization';
|
|
|
|
datalensTest.describe('Wizard', () => {
|
|
datalensTest.describe('Fields', () => {
|
|
datalensTest.beforeEach(async ({page, config}) => {
|
|
await openTestPage(page, config.wizard.urls.WizardBasicDataset);
|
|
});
|
|
|
|
datalensTest('Create formula field', async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
const datasetFields = page.locator(slct(SectionDatasetQA.DatasetFields));
|
|
|
|
// 1. Write the formula in the text field
|
|
const newField1 = 'NewFormulaField1';
|
|
await expect(
|
|
datasetFields.locator(slct(SectionDatasetQA.ItemTitle), {hasText: newField1}),
|
|
).not.toBeVisible();
|
|
await wizardPage.createNewFieldWithFormula(newField1, '[City]');
|
|
const newField1Locator = datasetFields.locator(slct(newField1), {
|
|
hasText: newField1,
|
|
});
|
|
await expect(newField1Locator).toBeVisible();
|
|
await expect(newField1Locator).not.toHaveClass(/item-error/);
|
|
|
|
// 2. Selecting a field for a formula by click
|
|
const newField2 = 'NewFormulaField2';
|
|
await expect(
|
|
datasetFields.locator(slct(SectionDatasetQA.ItemTitle), {hasText: newField2}),
|
|
).not.toBeVisible();
|
|
await wizardPage.fieldEditor.open();
|
|
await wizardPage.fieldEditor.setName(newField2);
|
|
await wizardPage.fieldEditor.selectField('City');
|
|
await wizardPage.fieldEditor.clickToApplyButton();
|
|
const newField2Locator = datasetFields.locator(slct(newField2), {
|
|
hasText: newField2,
|
|
});
|
|
await expect(newField2Locator).toBeVisible();
|
|
await expect(newField2Locator).not.toHaveClass(/item-error/);
|
|
|
|
// 3. Create a field with an invalid formula
|
|
const invalidField = 'NewInvalidField';
|
|
await expect(
|
|
datasetFields.locator(slct(SectionDatasetQA.ItemTitle), {hasText: invalidField}),
|
|
).not.toBeVisible();
|
|
await wizardPage.fieldEditor.open();
|
|
await wizardPage.fieldEditor.setName(invalidField);
|
|
await wizardPage.fieldEditor.setFormula('invalid formula');
|
|
// An error icon should be displayed in the formula editor
|
|
await expect(page.locator('.dl-field-editor__formula-editor-glyph')).toBeVisible();
|
|
await wizardPage.fieldEditor.clickToApplyButton();
|
|
const invalidFieldLocator = datasetFields.locator(slct(invalidField), {
|
|
hasText: invalidField,
|
|
});
|
|
await expect(invalidFieldLocator).toBeVisible();
|
|
await expect(invalidFieldLocator).toHaveClass(/item-error/);
|
|
|
|
// 4. Create a formula field with a parameter
|
|
const parameter = 'p1';
|
|
const newField3 = 'NewFormulaFieldWithParameter';
|
|
await wizardPage.parameterEditor.openCreateParameter();
|
|
await wizardPage.parameterEditor.setName(parameter);
|
|
await wizardPage.parameterEditor.setDefaultValue('1');
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
await wizardPage.createNewFieldWithFormula(
|
|
newField3,
|
|
'case [City] when [p1] then "param" else [City] end',
|
|
);
|
|
const newField3Locator = datasetFields.locator(slct(newField3), {
|
|
hasText: newField3,
|
|
});
|
|
await expect(newField3Locator).toBeVisible();
|
|
await expect(newField3Locator).not.toHaveClass(/item-error/);
|
|
});
|
|
|
|
datalensTest('Create hierarchy field', async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
const datasetFields = page.locator(slct(SectionDatasetQA.DatasetFields));
|
|
|
|
const newHierarchyField = 'City -> Country';
|
|
await wizardPage.openHierarchyEditor();
|
|
await wizardPage.hierarchyEditor.setName(newHierarchyField);
|
|
await wizardPage.hierarchyEditor.selectFields(['City', 'country']);
|
|
await wizardPage.hierarchyEditor.clickSave();
|
|
|
|
const hierarchyLocator = datasetFields.locator(slct(newHierarchyField), {
|
|
hasText: newHierarchyField,
|
|
});
|
|
await expect(hierarchyLocator).toBeVisible();
|
|
await expect(hierarchyLocator).not.toHaveClass(/item-error/);
|
|
|
|
// You cannot create two hierarchies with the same name
|
|
await wizardPage.openHierarchyEditor();
|
|
await wizardPage.hierarchyEditor.selectFields(['City', 'country']);
|
|
await expect(wizardPage.hierarchyEditor.getApplyButton()).not.toBeDisabled();
|
|
await wizardPage.hierarchyEditor.setName(newHierarchyField);
|
|
await expect(wizardPage.hierarchyEditor.getHierarchyNameError()).toBeVisible();
|
|
await expect(wizardPage.hierarchyEditor.getApplyButton()).toBeDisabled();
|
|
});
|
|
|
|
datalensTest('Hierarchy default name', async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
const datasetFields = page.locator(slct(SectionDatasetQA.DatasetFields));
|
|
|
|
// Add first field with default name
|
|
let newHierarchyName = 'New hierarchy';
|
|
await wizardPage.openHierarchyEditor();
|
|
await wizardPage.hierarchyEditor.selectFields(['City', 'country']);
|
|
await wizardPage.hierarchyEditor.clickSave();
|
|
let hierarchyLocator = datasetFields.locator(slct(newHierarchyName), {
|
|
hasText: newHierarchyName,
|
|
});
|
|
await expect(hierarchyLocator).toBeVisible();
|
|
await expect(hierarchyLocator).not.toHaveClass(/item-error/);
|
|
|
|
// Add second field with default name
|
|
// The created hierarchies should be automatically named "New hierarchy (N)"
|
|
newHierarchyName = 'New hierarchy (1)';
|
|
await wizardPage.openHierarchyEditor();
|
|
await wizardPage.hierarchyEditor.selectFields(['City', 'country']);
|
|
await wizardPage.hierarchyEditor.clickSave();
|
|
hierarchyLocator = datasetFields.locator(slct(newHierarchyName), {
|
|
hasText: newHierarchyName,
|
|
});
|
|
await expect(hierarchyLocator).toBeVisible();
|
|
await expect(hierarchyLocator).not.toHaveClass(/item-error/);
|
|
});
|
|
|
|
datalensTest('Create parameter', async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
const datasetFields = page.locator(slct(SectionDatasetQA.DatasetFields));
|
|
|
|
const parameter = 'p1';
|
|
await wizardPage.parameterEditor.openCreateParameter();
|
|
await wizardPage.parameterEditor.setName(parameter);
|
|
await wizardPage.parameterEditor.selectType(DialogParameterDataTypes.Int);
|
|
await wizardPage.parameterEditor.setDefaultValue('1');
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
const newFieldLocator = datasetFields.locator(slct(parameter), {
|
|
hasText: parameter,
|
|
});
|
|
await expect(newFieldLocator).toBeVisible();
|
|
});
|
|
|
|
datalensTest(
|
|
'Auto-generation of a formula when adding a dimension to a section with measures',
|
|
async ({page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const fieldName = 'City';
|
|
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.Y, fieldName);
|
|
|
|
const sectionField = page
|
|
.locator(slct(PlaceholderName.Y))
|
|
.locator(slct(fieldName), {
|
|
hasText: fieldName,
|
|
});
|
|
await expect(sectionField).toBeVisible();
|
|
|
|
await sectionField.hover();
|
|
await sectionField.locator(slct(VisualizationItemQa.FormulaIcon)).click();
|
|
const fieldEditor = page.locator(slct(FieldEditorQa.Dialog));
|
|
await expect(fieldEditor).toBeVisible();
|
|
await wizardPage.fieldEditor.checkFormula('countd(str([City]))');
|
|
},
|
|
);
|
|
});
|
|
});
|