150 lines
5.7 KiB
TypeScript
150 lines
5.7 KiB
TypeScript
import {Page, expect} from '@playwright/test';
|
|
|
|
import {PlaceholderName} from '../../../page-objects/wizard/SectionVisualization';
|
|
import WizardPage from '../../../page-objects/wizard/WizardPage';
|
|
import {RobotChartsWizardUrls} from '../../../utils/constants';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {CommonSelectors} from '../../../page-objects/constants/common-selectors';
|
|
import {DialogMetricColorsQa, WizardPageQa, WizardVisualizationId} from '../../../../src/shared';
|
|
import {openTestPage, slct} from '../../../utils';
|
|
import {CommonUrls} from '../../../page-objects/constants/common-urls';
|
|
|
|
datalensTest.describe('Wizard - metric chart. Settings', () => {
|
|
const defaultColor = '#4DA2F1';
|
|
|
|
datalensTest.beforeEach(async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await openTestPage(page, RobotChartsWizardUrls.WizardCitiesDataset);
|
|
|
|
await wizardPage.setVisualization(WizardVisualizationId.Metric);
|
|
|
|
await wizardPage.sectionVisualization.addFieldByClick(PlaceholderName.Measures, 'City');
|
|
|
|
const chartContainer = page.locator(slct(WizardPageQa.SectionPreview));
|
|
const chart = chartContainer.locator(wizardPage.chartkit.metricItemSelector);
|
|
|
|
await expect(chart).toBeVisible();
|
|
});
|
|
|
|
datalensTest('Default values', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await wizardPage.metricColorsDialog.open();
|
|
|
|
const paletteColor = await wizardPage.metricColorsDialog.getSelectedPaletteColor();
|
|
expect(paletteColor).toBe(defaultColor);
|
|
});
|
|
|
|
datalensTest('Size change', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
await wizardPage.chartSettings.open();
|
|
await wizardPage.chartSettings.setMetricFontSize('L');
|
|
|
|
const apiRunRequest = wizardPage.page.waitForRequest(
|
|
(request) => new URL(request.url()).pathname === CommonUrls.ApiRun,
|
|
);
|
|
await wizardPage.chartSettings.apply();
|
|
await (await apiRunRequest).response();
|
|
|
|
const chartContainer = page.locator(slct(WizardPageQa.SectionPreview));
|
|
const metricItem = chartContainer.locator(wizardPage.chartkit.metricItemSelector);
|
|
const metricItemClassname = await metricItem.getAttribute('class');
|
|
|
|
expect(metricItemClassname).toContain('_size_xl');
|
|
});
|
|
|
|
datalensTest('Color change by click', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const newColor = '#FF3D64';
|
|
|
|
await wizardPage.metricColorsDialog.open();
|
|
await wizardPage.metricColorsDialog.selectColor(newColor);
|
|
|
|
const paletteColor = await wizardPage.metricColorsDialog.getSelectedPaletteColor();
|
|
expect(paletteColor).toBe(newColor);
|
|
|
|
await wizardPage.metricColorsDialog.apply();
|
|
|
|
const indicatorColor = await wizardPage.page
|
|
.locator(wizardPage.chartkit.metricItemValueSelector)
|
|
.evaluate(getElementHexColor);
|
|
expect(indicatorColor).toBe(newColor);
|
|
});
|
|
|
|
datalensTest('Color selection from specific palette', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const newPalette = 'Neo 20';
|
|
const expectedColor = '#DB9101'; // first color from Neo 20 palette
|
|
|
|
await wizardPage.metricColorsDialog.open();
|
|
await wizardPage.metricColorsDialog.selectPalette(newPalette);
|
|
|
|
const paletteColor = await wizardPage.metricColorsDialog.getSelectedPaletteColor();
|
|
expect(paletteColor).toEqual(expectedColor);
|
|
|
|
await wizardPage.metricColorsDialog.apply();
|
|
|
|
const indicatorColor = await wizardPage.page
|
|
.locator(wizardPage.chartkit.metricItemValueSelector)
|
|
.evaluate(getElementHexColor);
|
|
expect(indicatorColor).toBe(expectedColor);
|
|
|
|
await wizardPage.metricColorsDialog.open();
|
|
const selectedPalette = await wizardPage.metricColorsDialog.getSelectedPalette();
|
|
expect(selectedPalette).toBe(newPalette);
|
|
});
|
|
|
|
datalensTest('Custom user color', async ({page}: {page: Page}) => {
|
|
const wizardPage = new WizardPage({page});
|
|
|
|
const inavlidColorValue = 'salmon';
|
|
const customColor = '#FF8C69';
|
|
|
|
await wizardPage.metricColorsDialog.open();
|
|
const customColorBtn = page.locator(slct(DialogMetricColorsQa.CustomColorButton));
|
|
await customColorBtn.click();
|
|
|
|
const colorInput = wizardPage.metricColorsDialog.getPaletteInput().first();
|
|
await colorInput.fill(inavlidColorValue);
|
|
|
|
const colorInputErrorLocator = wizardPage.page.locator(CommonSelectors.TextInputErrorState);
|
|
|
|
await expect(colorInputErrorLocator).toBeVisible();
|
|
|
|
const validColorValue = customColor.replace('#', '');
|
|
await colorInput.fill(validColorValue);
|
|
|
|
await expect(colorInputErrorLocator).not.toBeVisible();
|
|
|
|
expect(await wizardPage.metricColorsDialog.getSelectedPaletteColor()).toBe(
|
|
DialogMetricColorsQa.CustomColorButton,
|
|
);
|
|
|
|
await wizardPage.metricColorsDialog.apply();
|
|
|
|
const indicatorColor = await wizardPage.page
|
|
.locator(wizardPage.chartkit.metricItemValueSelector)
|
|
.evaluate(getElementHexColor);
|
|
expect(indicatorColor).toBe(customColor);
|
|
});
|
|
});
|
|
|
|
function getElementHexColor(element: HTMLElement) {
|
|
const rgbColor = element.style.color;
|
|
|
|
if (!rgbColor) {
|
|
return rgbColor;
|
|
}
|
|
|
|
const [r, g, b] = rgbColor.slice(4, -1).split(',');
|
|
const hexColor =
|
|
// eslint-disable-next-line no-bitwise
|
|
'#' + ((1 << 24) | (Number(r) << 16) | (Number(g) << 8) | Number(b)).toString(16).slice(1);
|
|
|
|
return hexColor.toUpperCase();
|
|
}
|