blob: 16898c4388c86e3c9f7664960e9ae7935b9fdb34 [file] [log] [blame]
/* eslint-disable no-await-in-loop */
import { PageObject } from '../../../infra-sk/modules/page_object/page_object';
import { PageObjectElement } from '../../../infra-sk/modules/page_object/page_object_element';
import { Label } from '../rpc_types';
/** A page object for the TriageSk component. */
export class TriageSkPO extends PageObject {
private get positiveBtn(): PageObjectElement {
return this.bySelector('button.positive');
}
private get negativeBtn(): PageObjectElement {
return this.bySelector('button.negative');
}
private get untriagedBtn(): PageObjectElement {
return this.bySelector('button.untriaged');
}
async getLabel(): Promise<Label> {
const labels: Label[] = ['positive', 'negative', 'untriaged'];
for (const label of labels) {
if (await this.isButtonSelected(label)) {
return label;
}
}
throw new Error('No label selected');
}
async isButtonSelected(label: Label) {
return this.getButtonForLabel(label).hasClassName('selected');
}
async isButtonDisabled(label: Label) {
return this.getButtonForLabel(label).hasAttribute('disabled');
}
async clickButton(label: Label) {
await this.getButtonForLabel(label).click();
}
private getButtonForLabel(label: Label) {
switch (label) {
case 'positive':
return this.positiveBtn;
case 'negative':
return this.negativeBtn;
case 'untriaged':
return this.untriagedBtn;
default:
throw new Error(`Unknown label: ${label}`);
}
}
}