import { EditField } from '../../e2elib/lib/src/pageobjects/editfield.component';
|
import { compareDateFromDateTimeSelector } from '../../libappbase/timeutils';
|
import { DialogBase } from '../../libappbase/dialogbase';
|
import { CheckboxBase } from '../../libappbase/checkboxbase';
|
import { QInputComponent } from '../../e2elib/lib/src/pageobjects/base/qinput.component';
|
import { LogMessage } from '../../libappbase/logmessage';
|
import { DateTimeSelectorSOP } from '../../libappsop/datetimeselectorsop';
|
import { DropDownListSOP } from '../../libappsop/dropdownlistsop';
|
import { DropDownStringListSOP } from '../../libappsop/dropdownstringlistsop';
|
|
export class DialogStockingCost extends DialogBase {
|
public ddlAccount = new DropDownListSOP('DropDownListAccount');
|
public ddlCostDriver = new DropDownStringListSOP('DropDownStringListCostDriver');
|
public ddlStockingPoint = new DropDownListSOP('DropDownListStockingPoint');
|
public dtsStart = new DateTimeSelectorSOP('DateSelectorCostStart');
|
public ddslTimeUnit = new DropDownStringListSOP('DropDownStringListTimeUnit');
|
public efLengthTime = new EditField('EditFieldLengthOfTime');
|
public efCost = new EditField('EditFieldCost');
|
public cbIsBatchEditTimeUnit = new CheckboxBase('CheckboxBatchEditTimeUnit');
|
public cbIsBatchEditLengthOfTime = new CheckboxBase('CheckboxBatchEditLengthOfTime');
|
public cbIsBatchEditCost = new CheckboxBase('CheckboxBatchEditCost');
|
|
public constructor() {
|
super('DialogCreateEditStockingCost', 'btnOk', 'btnCancel');
|
}
|
|
/**
|
* Update field value in the dialog
|
*
|
* @param account Account field value
|
* @param costDriver Cost driver field value
|
* @param stockingPoint Stocking Point field value
|
* @param startDate Start field value
|
* @param cost Cost field value
|
* @param timeunit Timeunit field value
|
*/
|
public async updateDialog(
|
account?: string,
|
costDriver?: string,
|
stockingPoint?: string,
|
startDate?: Date,
|
cost?: number,
|
timeunit?: string,
|
lengthOfTime?: string,
|
): Promise<void> {
|
if (account) {
|
await this.ddlAccount.selectItemSOP(account);
|
}
|
if (costDriver) {
|
await this.ddlCostDriver.selectItem(costDriver);
|
}
|
if (stockingPoint) {
|
await this.ddlStockingPoint.selectItemSOP(stockingPoint);
|
}
|
if (startDate) {
|
await this.dtsStart.setDate(startDate);
|
}
|
if (cost) {
|
await this.efCost.sendInput(cost.toString(), true);
|
}
|
|
if (timeunit) {
|
await this.ddslTimeUnit.selectItem(timeunit);
|
}
|
if (lengthOfTime) {
|
await this.efLengthTime.sendInput(lengthOfTime);
|
}
|
}
|
|
/**
|
* Verify some batch edit fields that should be disabled, and all batch checkboxes should be visible and unchecked.
|
*/
|
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.ddlStockingPoint,
|
this.dtsStart,
|
this.ddslTimeUnit,
|
this.efLengthTime,
|
this.efCost,
|
);
|
|
for (const cb of [this.cbIsBatchEditCost, this.cbIsBatchEditLengthOfTime, this.cbIsBatchEditTimeUnit]) {
|
const isVisible = await cb.isVisible();
|
if (!isVisible) {
|
feedbackTexts.push(`${LogMessage.checkbox_notVisible(cb.componentName)}`);
|
} else {
|
const isChecked = await cb.isChecked();
|
// make sure it's not checked
|
if (isChecked) {
|
feedbackTexts.push(`${LogMessage.checkbox_isChecked(cb.componentName)}`);
|
}
|
}
|
}
|
return feedbackTexts;
|
}
|
|
/**
|
* Verify values in the appropriate fields match passed arguments
|
*
|
* @param account Account name of the Stocking Cost
|
* @param costDriver Cost Driver
|
* @param stockingPoint Stocking Point
|
* @param startDate Start Date
|
* @param timeUnit Time unit
|
* @param lengthTime Length of time
|
* @param cost Cost
|
*
|
* @returns string that indicates which field does not have expected value. Empty - if all the field values are a sexpected
|
*/
|
public async verifyDialogValue(
|
account?: string,
|
costDriver?: string,
|
stockingPoint?: string,
|
startDate?: Date,
|
timeUnit?: string,
|
lengthOfTime?: number,
|
cost?: number,
|
): Promise<string[]> {
|
const feedbacks: string[] = [];
|
let actual = '';
|
const pushFeedback = (dialogField: string, expectedValue: string, actualValue: string): void => {
|
if (expectedValue !== actual) {
|
feedbacks.push(`${dialogField} should be ${expectedValue}, but actual value is "${actualValue}"`);
|
}
|
};
|
// explicitly checks for undefined because empty string '' will also make below statement false
|
if (account !== undefined) {
|
actual = await this.ddlAccount.getSelectedString();
|
pushFeedback('Account', account, actual);
|
}
|
if (costDriver !== undefined) {
|
actual = await this.ddlCostDriver.getSelectedString();
|
pushFeedback('Cost driver', costDriver, actual);
|
}
|
if (stockingPoint !== undefined) {
|
actual = await this.ddlStockingPoint.getSelectedString();
|
pushFeedback('Stocking point', stockingPoint, actual);
|
}
|
if (startDate !== undefined) {
|
const [isMatch, feedback] = await compareDateFromDateTimeSelector(startDate, this.dtsStart, true);
|
if (!isMatch) {
|
feedbacks.push(feedback);
|
}
|
}
|
if (timeUnit !== undefined) {
|
actual = await this.ddslTimeUnit.getSelectedString();
|
pushFeedback('Time unit', timeUnit, actual);
|
}
|
if (lengthOfTime !== undefined) {
|
actual = await this.efLengthTime.getText();
|
pushFeedback('Length of time', lengthOfTime.toString(), actual);
|
}
|
if (cost !== undefined) {
|
actual = await this.efCost.getText();
|
pushFeedback('Cost', cost.toString(), actual);
|
}
|
return feedbacks;
|
}
|
|
/**
|
* 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;
|
}
|
|
/**
|
* Get Start Date of the dialog
|
*
|
* @returns string to indicate the date of the start datatime selector
|
*/
|
public async getStartDate(): Promise<string> {
|
let day = await this.dtsStart.getDay();
|
if (day[0] === '0') {
|
day = day.slice(-1);
|
}
|
const month = await this.dtsStart.getMonth();
|
const year = await this.dtsStart.getYear();
|
return `${day}-${month}-${year}`;
|
}
|
|
/**
|
* Get precondition feedback text on the OK button
|
*
|
* @returns Precondition feedback text in string
|
*/
|
public async getOKButtonTooltip(): Promise<string> {
|
return this.btnOk.getTooltip();
|
}
|
}
|