235 lines
8.4 KiB
TypeScript
235 lines
8.4 KiB
TypeScript
import {Page, expect} from '@playwright/test';
|
|
import {DialogParameterQA, SectionDatasetQA} from '../../../../src/shared/constants';
|
|
|
|
import {DialogParameterDataTypes} from '../../../page-objects/common/DialogParameter';
|
|
import WizardPage from '../../../page-objects/wizard/WizardPage';
|
|
import {openTestPage, slct, waitForCondition} from '../../../utils';
|
|
import {RobotChartsWizardUrls} from '../../../utils/constants';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
|
|
// Subscribe to the validateDataset request and to errors in the console.
|
|
// To be sure that the request passed and validation did not fall. That is, the field was updated correctly.
|
|
function subscribeOnParameterUpdate(page: Page) {
|
|
const consoleErrors: string[] = [];
|
|
|
|
page.on('console', (msg) => {
|
|
if (msg.type() === 'error') {
|
|
consoleErrors.push(msg.text());
|
|
}
|
|
});
|
|
|
|
const waitForResponsePromise = page.waitForResponse((response) => {
|
|
return response.finished().then(() => response.url().endsWith('/validateDataset'));
|
|
});
|
|
|
|
return {
|
|
consoleErrors,
|
|
waitForResponsePromise,
|
|
};
|
|
}
|
|
|
|
async function validateEditedDatasetParameter(parameterName: string, wizardPage: WizardPage) {
|
|
try {
|
|
const section = slct(SectionDatasetQA.SectionParameters);
|
|
const field = slct(parameterName);
|
|
|
|
await waitForCondition(async () => {
|
|
return await wizardPage.page.$(`${section} ${field}`);
|
|
}).catch(() => {
|
|
throw new Error(`Field ${field} not found`);
|
|
});
|
|
|
|
const parameterItem = await wizardPage.page.locator(`${section} ${field}`);
|
|
|
|
const classNames = await parameterItem.getAttribute('class');
|
|
|
|
expect(classNames).toBeTruthy();
|
|
expect(classNames).not.toContain('local-item');
|
|
|
|
const iconsContainerSelector = '.wizard-dataset-item__item-right-icons-container';
|
|
const iconEditedDatasetParameterSelector = '.wizard-dataset-item__item-formula-icon';
|
|
|
|
const icon = await wizardPage.page.$(
|
|
`${section} ${field} ${iconsContainerSelector} ${iconEditedDatasetParameterSelector}`,
|
|
);
|
|
|
|
expect(icon).not.toEqual(null);
|
|
} catch (err) {
|
|
await wizardPage.deleteEntry();
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
datalensTest.describe('Wizard - Parameter Editing', () => {
|
|
datalensTest.beforeEach(async ({page}: {page: Page}) => {
|
|
await openTestPage(page, RobotChartsWizardUrls.WizardWithLocalParameterChart);
|
|
});
|
|
|
|
datalensTest('Editing a local parameter', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const LOCAL_PARAMETER_NAME = 'local_parameter';
|
|
const UPDATED_PARAMETER_NAME = 'updated_local_parameter';
|
|
const UPDATED_PARAMETER_TYPE = DialogParameterDataTypes.Int;
|
|
const UPDATED_PARAMETER_VALUE = '123';
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(LOCAL_PARAMETER_NAME);
|
|
|
|
await wizardPage.parameterEditor.setName(UPDATED_PARAMETER_NAME);
|
|
|
|
await wizardPage.parameterEditor.selectType(UPDATED_PARAMETER_TYPE);
|
|
|
|
await wizardPage.parameterEditor.setDefaultValue(UPDATED_PARAMETER_VALUE);
|
|
|
|
const {consoleErrors, waitForResponsePromise} = subscribeOnParameterUpdate(page);
|
|
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
await waitForResponsePromise;
|
|
|
|
expect(consoleErrors).toHaveLength(0);
|
|
|
|
const fields = await wizardPage.getFields('parameter');
|
|
const fieldNames = await Promise.all(fields.map((field) => field.textContent()));
|
|
|
|
expect(fieldNames).not.toContain(LOCAL_PARAMETER_NAME);
|
|
expect(fieldNames).toContain(UPDATED_PARAMETER_NAME);
|
|
});
|
|
|
|
datalensTest('Editing a parameter from a dataset', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const DATASET_PARAMETER_NAME = 'test_parameter';
|
|
const NEW_DEFAULT_VALUE = 'default_value_2';
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(DATASET_PARAMETER_NAME);
|
|
|
|
const nameInput = await wizardPage.parameterEditor.getEditorInput(
|
|
DialogParameterQA.NameInput,
|
|
);
|
|
|
|
const selectInput = await wizardPage.parameterEditor.getEditorInput(
|
|
DialogParameterQA.TypeSelector,
|
|
);
|
|
|
|
const defaultValueInput = await wizardPage.parameterEditor.getEditorInput(
|
|
DialogParameterQA.DefaultValueInput,
|
|
);
|
|
|
|
const initialDefaultValue = await defaultValueInput.inputValue();
|
|
|
|
// When editing a parameter from a dataset, you can only change the default value.
|
|
// The rest of the inputs must be secured
|
|
await expect(nameInput).toBeDisabled();
|
|
|
|
await expect(selectInput).toBeDisabled();
|
|
|
|
await expect(defaultValueInput).not.toBeDisabled();
|
|
|
|
await wizardPage.parameterEditor.setDefaultValue(NEW_DEFAULT_VALUE);
|
|
|
|
const {consoleErrors, waitForResponsePromise} = subscribeOnParameterUpdate(page);
|
|
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
await waitForResponsePromise;
|
|
|
|
expect(consoleErrors).toHaveLength(0);
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(DATASET_PARAMETER_NAME);
|
|
|
|
const updatedDefaultValueInput = await wizardPage.parameterEditor.getEditorInput(
|
|
DialogParameterQA.DefaultValueInput,
|
|
);
|
|
|
|
const updatedDefaultValue = await updatedDefaultValueInput.inputValue();
|
|
|
|
expect(updatedDefaultValue).not.toEqual(initialDefaultValue);
|
|
expect(updatedDefaultValue).toEqual(NEW_DEFAULT_VALUE);
|
|
});
|
|
|
|
datalensTest(
|
|
'The edited dataset parameter must contain a special icon and not be local',
|
|
async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await wizardPage.saveWizardAsNew(
|
|
wizardPage.getUniqueEntryName('wizard-e2e-parameter-test'),
|
|
);
|
|
|
|
const DATASET_PARAMETER_NAME = 'test_parameter';
|
|
const NEW_DEFAULT_VALUE = 'default_value_2';
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(DATASET_PARAMETER_NAME);
|
|
|
|
await wizardPage.parameterEditor.setDefaultValue(NEW_DEFAULT_VALUE);
|
|
|
|
const {consoleErrors, waitForResponsePromise} = subscribeOnParameterUpdate(page);
|
|
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
await waitForResponsePromise;
|
|
|
|
expect(consoleErrors).toHaveLength(0);
|
|
|
|
await validateEditedDatasetParameter(DATASET_PARAMETER_NAME, wizardPage);
|
|
|
|
await wizardPage.saveExistentWizardEntry();
|
|
|
|
await wizardPage.page.reload();
|
|
|
|
await wizardPage.page.waitForNavigation();
|
|
|
|
await validateEditedDatasetParameter(DATASET_PARAMETER_NAME, wizardPage);
|
|
|
|
await wizardPage.deleteEntry();
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'Reset parameter from dataset to default value, must reset default value to value from dataset',
|
|
async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const DATASET_PARAMETER_NAME = 'test_parameter';
|
|
const INITIAL_DEFAULT_VALUE = 'test';
|
|
const NEW_DEFAULT_VALUE = 'default_value_2';
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(DATASET_PARAMETER_NAME);
|
|
|
|
await wizardPage.parameterEditor.setDefaultValue(NEW_DEFAULT_VALUE);
|
|
|
|
const {consoleErrors, waitForResponsePromise} = subscribeOnParameterUpdate(page);
|
|
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
await waitForResponsePromise;
|
|
|
|
expect(consoleErrors).toHaveLength(0);
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(DATASET_PARAMETER_NAME);
|
|
|
|
await wizardPage.parameterEditor.reset();
|
|
|
|
const {consoleErrors: consoleErrors2, waitForResponsePromise: waitForResponsePromise2} =
|
|
subscribeOnParameterUpdate(page);
|
|
|
|
await wizardPage.parameterEditor.apply();
|
|
|
|
await waitForResponsePromise2;
|
|
|
|
expect(consoleErrors2).toHaveLength(0);
|
|
|
|
await wizardPage.parameterEditor.openEditParameter(DATASET_PARAMETER_NAME);
|
|
|
|
const initialDefaultValueInput = await wizardPage.parameterEditor.getEditorInput(
|
|
DialogParameterQA.DefaultValueInput,
|
|
);
|
|
|
|
const initialDefaultValue = await initialDefaultValueInput.inputValue();
|
|
|
|
expect(initialDefaultValue).toEqual(INITIAL_DEFAULT_VALUE);
|
|
},
|
|
);
|
|
});
|