blob: f383d1e2e00d7d1f18f4c035375cf894cd6869cf [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';
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);
}
}