162 lines
5.1 KiB
TypeScript
162 lines
5.1 KiB
TypeScript
import {ElementHandle, Page} from '@playwright/test';
|
|
|
|
import {slct, waitForCondition} from '../../utils';
|
|
import {CommonSelectors} from '../constants/common-selectors';
|
|
import {ChartSettingsDialogQA} from '../../../src/shared';
|
|
|
|
export enum ChartSettingsItems {
|
|
Navigator = 'navigator-switcher',
|
|
Groupping = 'groupping-switcher',
|
|
Pagination = 'pagination-switcher',
|
|
TitleMode = 'title-mode-switcher',
|
|
Totals = 'totals-switcher',
|
|
Legend = 'legend-switcher',
|
|
TooltipSum = 'tooltip-sum-switcher',
|
|
|
|
PivotTableFallback = 'pivot-fallback-switcher',
|
|
}
|
|
|
|
export default class ChartSettings {
|
|
private dialogCloseButtonSelector = '.wizard-chart-settings .g-dialog-btn-close__btn';
|
|
private limitInputSelector = '.dialog-settings-limit-input__text-input input';
|
|
private applyButtonSelector = '.wizard-chart-settings .g-dialog-footer__button-apply';
|
|
private openChartSettingsSelector = slct('visualization-select-settings-btn');
|
|
private titleInput = slct('title-input');
|
|
|
|
private page: Page;
|
|
|
|
constructor(page: Page) {
|
|
this.page = page;
|
|
}
|
|
|
|
async open() {
|
|
await this.page.click(this.openChartSettingsSelector);
|
|
}
|
|
|
|
async close() {
|
|
await this.page.click(this.dialogCloseButtonSelector);
|
|
}
|
|
|
|
async isPaginationSwitcherDisabled() {
|
|
let classAttribute: string | null | undefined;
|
|
|
|
await waitForCondition(async () => {
|
|
const paginationItem = await this.page.$(slct(ChartSettingsItems.Pagination));
|
|
|
|
classAttribute = await paginationItem?.getAttribute('class');
|
|
|
|
return classAttribute;
|
|
}).catch(() => {
|
|
throw new Error('Attribute class not found in pagination selector');
|
|
});
|
|
|
|
return classAttribute?.includes('g-switch_disabled');
|
|
}
|
|
|
|
async getSettingItem(settingQa: string) {
|
|
let settingItem: null | ElementHandle | undefined;
|
|
|
|
await waitForCondition(async () => {
|
|
settingItem = await this.page.$(slct(settingQa));
|
|
|
|
return settingItem;
|
|
}).catch(() => {
|
|
throw new Error(`Settings was not found: ${settingItem}`);
|
|
});
|
|
|
|
return settingItem!;
|
|
}
|
|
|
|
async checkItemAttribute(settingItem: ElementHandle, expectedMode: 'on' | 'off') {
|
|
let checkedAttribute: string | null | undefined;
|
|
|
|
await waitForCondition(async () => {
|
|
const inputItem = await settingItem.$('input');
|
|
|
|
checkedAttribute = await inputItem?.getAttribute('aria-checked');
|
|
|
|
if (checkedAttribute) {
|
|
return expectedMode === 'on'
|
|
? checkedAttribute === 'true'
|
|
: checkedAttribute === 'false';
|
|
} else {
|
|
throw new Error('Attribute responsible for checked status not found');
|
|
}
|
|
}).catch(() => {
|
|
throw new Error(
|
|
`Mode attribute ${checkedAttribute}, and expected ${
|
|
expectedMode === 'on' ? 'true' : 'false'
|
|
}`,
|
|
);
|
|
});
|
|
}
|
|
|
|
async toggleSettingItem(settingQa: string, mode: 'on' | 'off') {
|
|
const settingItem: ElementHandle = await this.getSettingItem(settingQa);
|
|
|
|
await settingItem.click();
|
|
|
|
await this.checkItemAttribute(settingItem, mode);
|
|
}
|
|
|
|
async checkSettingMode(settingQa: string, mode: 'on' | 'off') {
|
|
const settingItem: ElementHandle = await this.getSettingItem(settingQa);
|
|
|
|
await this.checkItemAttribute(settingItem, mode);
|
|
}
|
|
|
|
async getTitleValue() {
|
|
return await this.page.locator(`${this.titleInput} input`).inputValue();
|
|
}
|
|
|
|
async setTitle(title: string) {
|
|
await this.page.fill(`${this.titleInput} input`, title);
|
|
}
|
|
|
|
async setLimit(limit: number) {
|
|
await this.page.fill(this.limitInputSelector, String(limit));
|
|
}
|
|
|
|
async setFeed(feedValue: string) {
|
|
await this.page.fill(`${slct('feed-input')} input`, feedValue);
|
|
}
|
|
|
|
async setMetricFontSize(size: string) {
|
|
const sizeOption = this.page
|
|
.locator(slct(ChartSettingsDialogQA.IndicatorFontSize))
|
|
.locator(CommonSelectors.RadioButtonOption, {hasText: size});
|
|
|
|
await sizeOption.click();
|
|
}
|
|
|
|
async setNavigatorLinesMode(linesMode: 'all' | 'selected') {
|
|
await this.page.click(
|
|
`${slct('navigator-lines-mode')} ${
|
|
CommonSelectors.RadioButtonOptionControl
|
|
}[value=${linesMode}]`,
|
|
{force: true},
|
|
);
|
|
}
|
|
|
|
async selectLines(names: string[]) {
|
|
// Click and open the selector
|
|
await this.page.click(`${slct('navigator-lines-select')}`);
|
|
|
|
for (const name of names) {
|
|
await this.page.click(`${slct('select-list')} >> text=${name}`);
|
|
}
|
|
|
|
// Closing the selector, since it is a multiselect
|
|
await this.page.click(`${slct('navigator-lines-select')}`);
|
|
}
|
|
|
|
async waitForSettingsRender() {
|
|
await waitForCondition(async () => {
|
|
return await this.page.$('.wizard-chart-settings__settings');
|
|
});
|
|
}
|
|
async apply() {
|
|
await this.page.click(this.applyButtonSelector);
|
|
}
|
|
}
|