import { DialogBase } from '../../libappbase/dialogbase';
|
import { EditField } from '../../e2elib/lib/src/pageobjects/editfield.component';
|
import { Month } from '../../libappbase/timeutils';
|
import { QInputComponent } from '../../e2elib/lib/src/pageobjects/base/qinput.component';
|
import { CheckboxBase } from '../../libappbase/checkboxbase';
|
import { DateTimeSelectorSOP } from '../../libappsop/datetimeselectorsop';
|
import { DropDownListSOP } from '../../libappsop/dropdownlistsop';
|
import { DropDownStringListSOP } from '../../libappsop/dropdownstringlistsop';
|
|
export class DialogUnitCost extends DialogBase {
|
public ddlAccount = new DropDownListSOP('DropDownListAccount');
|
public ddlCostDriver = new DropDownStringListSOP('DropDownStringListCostDriver');
|
public ddlUnit = new DropDownListSOP('DropDownListUnit');
|
public dtsStart = new DateTimeSelectorSOP('DateSelectorCostStart');
|
public ddlTimeUnit = new DropDownStringListSOP('DropDownStringListTimeUnit');
|
public efLengthOfTime = new EditField('EditFieldLengthOfTime');
|
public efCost = new EditField('EditFieldCost');
|
public cbBatchEditTimeUnit = new CheckboxBase('CheckboxBatchEditTimeUnit');
|
public cbBatchEditLengthOfTime = new CheckboxBase('CheckboxBatchEditLengthOfTime');
|
public cbBatchEditCost = new CheckboxBase('CheckboxBatchEditCost');
|
|
public constructor() {
|
super('DialogCreateEditUnitCost', 'btnOk', 'btnCancel');
|
}
|
|
/**
|
* To pass-in boolean to toggle on "Batch Edit Cost" checkbox
|
*
|
* @param toBeToggleOn boolean to toggle on or off check box (true | false)
|
*/
|
public async toggleBatchEditCostCheckbox(toCheck: boolean): Promise<void> {
|
await this.cbBatchEditCost.toggle(toCheck);
|
}
|
|
/**
|
* Update field value in the dialog
|
*
|
* @param account Account field value
|
* @param costDriver Cost driver field value
|
* @param unit Unit field value
|
* @param startDate Start field value
|
* @param timeUnit Time unit field value
|
* @param lengthOfTime Length of time field value
|
* @param cost Cost field value
|
*/
|
public async updateUnitCostValue(account?: string, costDriver?: string, unit?: string, startDate?: Date, timeUnit?: string, lengthOfTime?: number, cost?: number): Promise<void> {
|
if (account !== undefined) {
|
await this.ddlAccount.selectItemSOP(account);
|
}
|
if (costDriver !== undefined) {
|
await this.ddlCostDriver.selectItem(costDriver);
|
}
|
if (unit !== undefined) {
|
await this.ddlUnit.selectItemSOP(unit);
|
}
|
if (startDate !== undefined) {
|
await this.dtsStart.setDate(startDate);
|
}
|
if (timeUnit !== undefined) {
|
await this.ddlTimeUnit.selectItem(timeUnit);
|
}
|
if (lengthOfTime !== undefined) {
|
await this.efLengthOfTime.sendInput(lengthOfTime.toString());
|
}
|
if (cost !== undefined) {
|
await this.efCost.sendInput(cost.toString());
|
}
|
}
|
|
/**
|
* Verify the field values in the dialog with expected value
|
*
|
* @param account Expected account field value
|
* @param costDriver Expected cost driver field value
|
* @param unit Expected unit field value
|
* @param startDate Expected start field value
|
* @param timeUnit Expected time unit field value
|
* @param lengthOfTime Expected length of time field value
|
* @param cost Expected cost field value
|
* @returns Feedback message of which field doesn't match with expected value, empty if all matched
|
*/
|
public async verifyDialogValue(
|
account?: string,
|
costDriver?: string,
|
unit?: string,
|
startDate?: Date,
|
timeUnit?: string,
|
lengthOfTime?: number,
|
cost?: number,
|
): Promise<string[]> {
|
const feedbacks: string[] = [];
|
if (account !== undefined && account !== (await this.ddlAccount.getSelectedString())) {
|
feedbacks.push(`Account should be ${account}`);
|
}
|
if (costDriver !== undefined && costDriver !== (await this.ddlCostDriver.getSelectedString())) {
|
feedbacks.push(`Cost driver should be ${costDriver}`);
|
}
|
if (unit !== undefined && unit !== (await this.ddlUnit.getSelectedString())) {
|
feedbacks.push(`Unit should be ${unit}`);
|
}
|
if (startDate !== undefined) {
|
const monthString = startDate.toLocaleString(undefined, { month: 'short' });
|
const isDayNotMatch = startDate.getDate() !== Number(await this.dtsStart.getDay());
|
const isMonthNotMatch = monthString !== (await this.dtsStart.getMonth());
|
const isYearNotMatch = startDate.getFullYear() !== Number(await this.dtsStart.getYear());
|
if (isDayNotMatch || isMonthNotMatch || isYearNotMatch) {
|
feedbacks.push(`Start should be ${startDate.getDate()}-${monthString}-${startDate.getFullYear()}`);
|
}
|
}
|
if (timeUnit !== undefined && timeUnit !== (await this.ddlTimeUnit.getSelectedString())) {
|
feedbacks.push(`Time unit should be ${timeUnit}`);
|
}
|
if (lengthOfTime !== undefined && lengthOfTime.toString() !== (await this.efLengthOfTime.getText())) {
|
feedbacks.push(`Length of time should be ${lengthOfTime}`);
|
}
|
if (cost !== undefined && cost.toString() !== (await this.efCost.getText())) {
|
feedbacks.push(`Cost should be ${cost}`);
|
}
|
return feedbacks;
|
}
|
|
/**
|
* Get precondition feedback text on the OK button
|
*
|
* @returns Precondition feedback text in string
|
*/
|
public async getOKButtonTooltip(): Promise<string> {
|
return this.btnOk.getTooltip();
|
}
|
|
/**
|
* Verify that DropDown has the expected number of elements
|
*
|
* @param drpd DropDown to be checked
|
* @param expectedCount Expected number of elements inside drpd
|
*
|
* @returns boolean to indicate whether the number elements inside drpd is the same expected
|
*/
|
public async verifyDropDownCount(drpd: DropDownListSOP | DropDownStringListSOP, expectedCount: number): Promise<boolean> {
|
const count = await drpd.getNumberOfElements();
|
return count === expectedCount;
|
}
|
|
/**
|
*
|
* Verify that DropDown contains certain values
|
*
|
* @param drpd DropDown to be checked
|
* @param values Values that are expected to be present inside drpd
|
*
|
* @returns boolean to indicate whether all the values passed are present in drpd
|
*/
|
public async verifyDropDownContainValues(drpd: DropDownListSOP | DropDownStringListSOP, values: string[]): Promise<boolean> {
|
let isSuccess = true;
|
|
for (const value of values) {
|
try {
|
if (drpd instanceof DropDownListSOP) {
|
await drpd.selectItemSOP(value);
|
} else {
|
await drpd.selectItem(value);
|
}
|
} catch {
|
isSuccess = false;
|
break;
|
}
|
}
|
return isSuccess;
|
}
|
|
/**
|
* Verify that fields are disabled and 3 additional checkboxes for TimeUnit, Length of Time and Cost are present
|
*
|
* @returns feedback text if any field is not disabled or checkbox is not present or checked
|
*/
|
public async verifyBatchEditFieldAccess(): Promise<string[]> {
|
// for input components such as dropdown, date time selector, edit field etc.
|
const getFeedbacksIfNotDisabled = async (...inputComponents: QInputComponent[]): Promise<string[]> => {
|
const feedbacks: string[] = [];
|
for (const component of inputComponents) {
|
const isDisabled = await component.isDisabled();
|
if (!isDisabled) {
|
const label = await component.getComponentLabel();
|
feedbacks.push(`${label.trim()} field should be disabled.`);
|
}
|
}
|
return feedbacks;
|
};
|
|
const feedbackTexts = await getFeedbacksIfNotDisabled(this.ddlAccount, this.ddlCostDriver, this.ddlUnit, this.dtsStart, this.ddlTimeUnit, this.efLengthOfTime, this.efCost);
|
|
for (const cb of [this.cbBatchEditTimeUnit, this.cbBatchEditLengthOfTime, this.cbBatchEditCost]) {
|
const isChecked = await cb.isChecked();
|
const isVisibleAndNotChecked = (await cb.isVisible()) && !isChecked;
|
if (!isVisibleAndNotChecked) {
|
feedbackTexts.push(`"${cb.componentName}" checkbox should be visible and unchecked.`);
|
}
|
}
|
return feedbackTexts;
|
}
|
|
/**
|
* Get the Dialog values
|
*
|
* @returns UnitCostDialogValues
|
*/
|
public async getDialogValues(): Promise<UnitCostDialogValues> {
|
const account = await this.ddlAccount.getSelectedString();
|
const costDriver = await this.ddlCostDriver.getSelectedString();
|
const unit = await this.ddlUnit.getSelectedString();
|
// Get the date
|
const day = await this.dtsStart.getDay();
|
const month = await this.dtsStart.getMonth();
|
const year = await this.dtsStart.getYear();
|
const startDate = new Date();
|
startDate.setFullYear(Number(year), Month[month], Number(day));
|
|
const timeUnit = await this.ddlTimeUnit.getSelectedString();
|
const lengthOfTime = await this.efLengthOfTime.getText();
|
const cost = await this.efCost.getText();
|
|
return { account, costDriver, unit, startDate, timeUnit, lengthOfTime, cost };
|
}
|
}
|
|
export interface UnitCostDialogValues {
|
account: string;
|
costDriver: string;
|
unit: string;
|
startDate: Date;
|
timeUnit: string;
|
lengthOfTime: string;
|
cost: string;
|
}
|