| /* 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); |
| } |
| } |
| } |