blob: 6572d225c2af6224d767434a4037fe4370fd14d2 [file] [log] [blame]
/* eslint-disable no-await-in-loop */
import { ParamSet } from '../query';
import { PageObject } from '../page_object/page_object';
import { QueryValuesSkPO } from '../query-values-sk/query-values-sk_po';
import {
PageObjectElement,
PageObjectElementList,
} from '../page_object/page_object_element';
/** A page object for the QuerySk component. */
export class QuerySkPO extends PageObject {
get queryValuesSkPO(): QueryValuesSkPO {
return this.poBySelector('query-values-sk', QueryValuesSkPO);
}
private get filter(): PageObjectElement {
return this.bySelector('#fast');
}
private get clearFiltersBtn(): PageObjectElement {
return this.bySelector('button.clear_filters');
}
private get clearSelectionsBtn(): PageObjectElement {
return this.bySelector('button.clear_selections');
}
private get selectSkKeys(): PageObjectElementList {
return this.bySelectorAll('select-sk div');
}
private get selectSkSelectedKey(): PageObjectElement {
return this.bySelector('select-sk div[selected]');
}
async getFilter(): Promise<string> {
return this.filter.value;
}
async setFilter(value: string): Promise<void> {
await this.filter.enterValue(value);
}
async clickClearFilter(): Promise<void> {
await this.clearFiltersBtn.click();
}
async clickClearSelections(): Promise<void> {
await this.clearSelectionsBtn.click();
}
async getSelectedKey(): Promise<string> {
return this.selectSkSelectedKey.innerText;
}
async getSelectedValues(): Promise<string[]> {
return this.queryValuesSkPO.getSelectedOptions();
}
async clickValue(value: string): Promise<void> {
await this.queryValuesSkPO.clickOption(value);
}
getKeys(): Promise<string[]> {
return this.selectSkKeys.map((div) => div.innerText);
}
async clickKey(key: string): Promise<void> {
const keyDiv = await this.selectSkKeys.find((div) =>
div.isInnerTextEqualTo(key)
);
await keyDiv?.click();
}
/** Analogous to the "paramset" property getter. */
async getParamSet(): Promise<ParamSet> {
const paramSet: ParamSet = {};
const keys = await this.getKeys();
for (const key of keys) {
await this.clickKey(key);
const options = await this.queryValuesSkPO.getOptions();
paramSet[key] = options;
}
return paramSet;
}
/** Analogous to the "current_query" property getter. */
async getCurrentQuery(): Promise<ParamSet> {
const paramSet: ParamSet = {};
const keys = await this.getKeys();
for (const key of keys) {
await this.clickKey(key);
const selected = await this.queryValuesSkPO.getSelected();
if (selected.length > 0) {
paramSet[key] = selected;
}
}
return paramSet;
}
/** Analogous to the "current_query" property setter. */
async setCurrentQuery(query: ParamSet): Promise<void> {
for (const key of await this.getKeys()) {
const values = query[key] || [];
await this.clickKey(key);
await this.queryValuesSkPO.setSelected(values);
}
}
}