| import { PageObject, PageObjectList } from '../../../infra-sk/modules/page_object/page_object'; |
| import { PageObjectElement } from '../../../infra-sk/modules/page_object/page_object_element'; |
| import { SearchControlsSkPO } from '../search-controls-sk/search-controls-sk_po'; |
| import { ChangelistControlsSkPO } from '../changelist-controls-sk/changelist-controls-sk_po'; |
| import { BulkTriageSkPO } from '../bulk-triage-sk/bulk-triage-sk_po'; |
| import { Label } from '../rpc_types'; |
| import { DigestDetailsSkPO } from '../digest-details-sk/digest-details-sk_po'; |
| import { PaginationSkPO } from '../pagination-sk/pagination-sk_po'; |
| |
| /** A page object for the SearchPageSk component. */ |
| export class SearchPageSkPO extends PageObject { |
| get bulkTriageSkPO(): BulkTriageSkPO { |
| return this.poBySelector('bulk-triage-sk', BulkTriageSkPO); |
| } |
| |
| get searchControlsSkPO(): SearchControlsSkPO { |
| return this.poBySelector('search-controls-sk', SearchControlsSkPO); |
| } |
| |
| get changelistControlsSkPO(): ChangelistControlsSkPO { |
| return this.poBySelector('changelist-controls-sk', ChangelistControlsSkPO); |
| } |
| |
| get digestDetailsSkPOs(): PageObjectList<DigestDetailsSkPO> { |
| return this.poBySelectorAll('digest-details-sk', DigestDetailsSkPO); |
| } |
| |
| get topPaginationSkPO(): PaginationSkPO { |
| return this.poBySelector('pagination-sk.top', PaginationSkPO); |
| } |
| |
| get bottomPaginationSkPO(): PaginationSkPO { |
| return this.poBySelector('pagination-sk.bottom', PaginationSkPO); |
| } |
| |
| private get bulkTriageBtn(): PageObjectElement { |
| return this.bySelector('button.bulk-triage'); |
| } |
| |
| private get bulkTriageDialog(): PageObjectElement { |
| return this.bySelector('dialog.bulk-triage'); |
| } |
| |
| private get toggleFullSizeImagesBtn(): PageObjectElement { |
| return this.bySelector('button.full-size-images'); |
| } |
| |
| private get helpBtn(): PageObjectElement { |
| return this.bySelector('button.help'); |
| } |
| |
| private get helpDialog(): PageObjectElement { |
| return this.bySelector('dialog.help'); |
| } |
| |
| private get helpDialogCancelBtn(): PageObjectElement { |
| return this.bySelector('dialog.help button.cancel'); |
| } |
| |
| private get summary(): PageObjectElement { |
| return this.bySelector('p.summary'); |
| } |
| |
| async clickBulkTriageBtn() { |
| await this.bulkTriageBtn.click(); |
| } |
| |
| async isBulkTriageDialogOpen() { |
| return this.bulkTriageDialog.hasAttribute('open'); |
| } |
| |
| async clickToggleFullSizeImagesBtn() { |
| await this.toggleFullSizeImagesBtn.click(); |
| } |
| |
| async clickHelpBtn() { |
| await this.helpBtn.click(); |
| } |
| |
| async clickHelpDialogCancelBtn() { |
| await this.helpDialogCancelBtn.click(); |
| } |
| |
| async isHelpDialogOpen() { |
| return this.helpDialog.hasAttribute('open'); |
| } |
| |
| async getSummary() { |
| return this.summary.innerText; |
| } |
| |
| async getSelectedDigest() { |
| const selectedDigests = await this.digestDetailsSkPOs.filter((digestDetailsSkPO) => |
| digestDetailsSkPO.isSelected() |
| ); |
| |
| if (selectedDigests.length > 1) { |
| throw new Error( |
| `found ${selectedDigests.length} selected digests, but at most 1 digest can be selected` |
| ); |
| } |
| |
| return selectedDigests.length === 1 ? selectedDigests[0].getLeftDigest() : null; |
| } |
| |
| getDigests() { |
| return this.digestDetailsSkPOs.map((digestDetailsSkPO) => digestDetailsSkPO.getLeftDigest()); |
| } |
| |
| getDiffDetailsHrefs() { |
| return this.digestDetailsSkPOs.map((digestDetailsSkPO) => digestDetailsSkPO.getDiffPageLink()); |
| } |
| |
| async getLabelForDigest(digest: string): Promise<Label | null> { |
| const digestDetailsSkPO = await this.digestDetailsSkPOs.find(async (digestDetailsSkPO) => { |
| const leftDigest = await digestDetailsSkPO.getLeftDigest(); |
| const rightDigest = await digestDetailsSkPO.getRightDigest(); |
| return leftDigest === digest || rightDigest === digest; |
| }); |
| if (!digestDetailsSkPO) return null; |
| |
| return (await digestDetailsSkPO.triageSkPO.getLabel()) as Label; |
| } |
| |
| async getDigestWithOpenZoomDialog() { |
| const digestDetailsSkPOsWithOpenDialogs = await this.digestDetailsSkPOs.filter( |
| (digestDetailsSkPO) => digestDetailsSkPO.isZoomDialogOpen() |
| ); |
| |
| if (digestDetailsSkPOsWithOpenDialogs.length > 1) { |
| throw new Error( |
| 'at most 1 digest can have its zoom dialog open, ' + |
| `but found ${digestDetailsSkPOsWithOpenDialogs.length} such digests` |
| ); |
| } |
| |
| return digestDetailsSkPOsWithOpenDialogs.length === 1 |
| ? digestDetailsSkPOsWithOpenDialogs[0].getLeftDigest() |
| : null; |
| } |
| |
| typeKey(key: string) { |
| return this.element.typeKey(key); |
| } |
| } |