blob: 805f971cca478643052e6bb477de88324e5721ad [file] [log] [blame]
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';
/** 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);
}
private get bulkTriageBtn(): PageObjectElement {
return this.bySelector('button.bulk-triage');
}
private get bulkTriageDialog(): PageObjectElement {
return this.bySelector('dialog.bulk-triage');
}
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 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.getLabelOrEmpty() 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);
}
}