| /** | 
|  * @file        ADSO-10113 | 
|  * @description Batch edit cost of unit cost | 
|  * @testcategory Web - Financials - Units | 
|  * @author      Gay Er Xuan (erxuan.gay@3ds.com) | 
|  * @copyright   Dassault Systemes | 
|  */ | 
| import { qCustomMatcher } from '../../../e2elib/lib/src/main/qmatchers.const'; | 
| import { AppMP, Demo, Scenario } from '../../../libmp/appmp'; | 
| import { DataFoodBaseEntity, DataFoodBaseEntityName } from '../../../libmp/data/data.navigation'; | 
| import { startOfPlanningYear } from '../../../libmp/data/data.period'; | 
| import { DataFoodBaseUnitCost } from '../../../libmp/data/data.unitcost'; | 
| import { ListUnitCostColumn } from '../../../libmp/forms/form.unitcost'; | 
|   | 
| describe('ADSO-10113 - Batch edit cost of unit cost', () => { | 
|   const appMP = AppMP.getInstance(); | 
|   let listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost; | 
|   let dlgUnitCost = listUnitCost.dlgUnitCost; | 
|   const account = DataFoodBaseUnitCost.Account; | 
|   const costDriver = DataFoodBaseUnitCost.CostDriver; | 
|   const unit = DataFoodBaseEntityName.DEFermenter; | 
|   const uom = DataFoodBaseUnitCost.UoM; | 
|   const firstUnitCostStart = `1-Jan-${startOfPlanningYear - 1}`; | 
|   const secondUnitCostStart = `1-Jan-${startOfPlanningYear}`; | 
|   let secondUnitCostEnd = ''; | 
|   const editedCost = DataFoodBaseUnitCost.EditCost; | 
|   | 
|   beforeAll(async () => { | 
|     jasmine.addMatchers(qCustomMatcher); | 
|     await appMP.login(); | 
|   }); | 
|   | 
|   afterAll(async () => { | 
|     // Clear demo data | 
|     await appMP.formNavigation.reset(); | 
|     await appMP.cleanupAndLogout(); | 
|   }); | 
|   | 
|   afterEach(async () => { | 
|     await appMP.checkToastMessage(); | 
|   }); | 
|   | 
|   it(`Setup - ${AppMP.getDemoDataPath(Demo.Food, Scenario.Base)}`, async () => { | 
|     await appMP.createDemoDataset(Demo.Food, Scenario.Base, false); | 
|   }); | 
|   | 
|   it(`Setup - Open view ${appMP.viewUnitCost.viewPath}. Verify 1 ${unit} exist with ${firstUnitCostStart} as start date`, async () => { | 
|     // Open unit cost view | 
|     await appMP.viewUnitCost.switchTo(); | 
|     listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost; | 
|     // Filter by DE Fermenter | 
|     await appMP.formNavigation.filterByEntity(unit, DataFoodBaseEntity.deUnitsParents); | 
|     // Verify 1 DE Fermenter Unit Cost exist in the list | 
|     await listUnitCost.waitForScreenUpdate(); | 
|     expect(await listUnitCost.getRowCount()).toBe(1, `Exactly one ${unit} Unit Cost should exist in the list`); | 
|     const unitCostRow = await listUnitCost.getRowByIndex(0); | 
|     const unitCostStart = await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, unitCostRow); | 
|     expect(unitCostStart).toBe(firstUnitCostStart, `Start of the ${unit} unit cost should be ${firstUnitCostStart}`); | 
|   }); | 
|   | 
|   it(`Setup - Create a new ${unit} unit cost with different cost and start value`, async () => { | 
|     // Create new DE Fermenter unit cost | 
|     dlgUnitCost = await listUnitCost.openEditDialog(); | 
|     await dlgUnitCost.updateUnitCostValue(account, costDriver, unit, new Date(secondUnitCostStart)); | 
|     let btnDisabledTooltip = ''; | 
|     const canClickOk = await dlgUnitCost.clickOK(1000); | 
|     if (!canClickOk) { | 
|       btnDisabledTooltip = await dlgUnitCost.getOKButtonTooltip(); | 
|     } | 
|     expect(canClickOk).toBe(true, `OK button should be clickable. Ok button disabled with tooltip: ${btnDisabledTooltip}`); | 
|     const unitCostRow = await listUnitCost.getUnitCostRowByValues(unit, account, costDriver, secondUnitCostStart); | 
|     expect(unitCostRow).toBeDefined(`New created ${unit} Unit Cost row with start date ${secondUnitCostStart} should be found`); | 
|     if (unitCostRow !== undefined) { | 
|       secondUnitCostEnd = await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, unitCostRow); | 
|     } | 
|   }); | 
|   | 
|   it('Step 1 - Open batch edit unit cost dialog and verify the fields', async () => { | 
|     // Open batch edit dialog | 
|     const rows = await listUnitCost.getAllRows(); | 
|     dlgUnitCost = await listUnitCost.openEditDialog(rows); | 
|     // Verify all field disabled | 
|     expect(await dlgUnitCost.ddlAccount.isDisabled()).toBe(true, 'Account drop down list should be disabled'); | 
|     expect(await dlgUnitCost.ddlCostDriver.isDisabled()).toBe(true, 'Cost driver drop down list should be disabled'); | 
|     expect(await dlgUnitCost.ddlUnit.isDisabled()).toBe(true, 'Unit drop down list should be disabled'); | 
|     expect(await dlgUnitCost.dtsStart.isDisabled()).toBe(true, 'Start date time selector should be disabled'); | 
|     expect(await dlgUnitCost.ddlTimeUnit.isDisabled()).toBe(true, 'Time unit drop down list should be disabled'); | 
|     expect(await dlgUnitCost.efLengthOfTime.isDisabled()).toBe(true, 'Length of time field should be disabled'); | 
|     expect(await dlgUnitCost.efCost.isDisabled()).toBe(true, 'Cost field should be disabled'); | 
|     // Verify checkbox to enable edit time unit, length of time, and cost are exist and unchecked | 
|     expect(await dlgUnitCost.cbBatchEditTimeUnit.isVisible()).toBe(true, 'Time unit checkbox should be visible in the dialog'); | 
|     expect(await dlgUnitCost.cbBatchEditTimeUnit.isChecked()).toBe(false, 'Time unit checkbox should be unchecked by default'); | 
|     expect(await dlgUnitCost.cbBatchEditLengthOfTime.isVisible()).toBe(true, 'Length of time checkbox should be visible in the dialog'); | 
|     expect(await dlgUnitCost.cbBatchEditLengthOfTime.isChecked()).toBe(false, 'Length of time checkbox should be unchecked by default'); | 
|     expect(await dlgUnitCost.cbBatchEditCost.isVisible()).toBe(true, 'Cost checkbox should be visible in the dialog'); | 
|     expect(await dlgUnitCost.cbBatchEditCost.isChecked()).toBe(false, 'Cost checkbox should be unchecked by default'); | 
|   }); | 
|   | 
|   it('Step 2 - Batch edit cost value and verify the changes', async () => { | 
|     // Enable and edit cost | 
|     await dlgUnitCost.toggleBatchEditCostCheckbox(true); | 
|     expect(await dlgUnitCost.cbBatchEditCost.isChecked()).toBe(true, 'Cost field should be checked'); | 
|     expect(await dlgUnitCost.efCost.isDisabled()).toBe(false, 'Cost field should be enabled after checkbox is checked'); | 
|     await dlgUnitCost.efCost.sendInput(editedCost); | 
|     let btnDisabledTooltip = ''; | 
|     const canClickOk = await dlgUnitCost.clickOK(1000); | 
|     if (!canClickOk) { | 
|       btnDisabledTooltip = await dlgUnitCost.getOKButtonTooltip(); | 
|     } | 
|     expect(canClickOk).toBe(true, `OK button should be clickable. Ok button disabled with tooltip: ${btnDisabledTooltip}`); | 
|   }); | 
|   | 
|   it('Step 3 - Verify cost updated for both unit cost, while all other values remain unchanged', async () => { | 
|     // Verify cost updated for both unit cost in list | 
|     const firstUnitCost = await listUnitCost.getRowByIndex(0); | 
|     const secondUnitCost = await listUnitCost.getRowByIndex(1); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Cost, firstUnitCost)).toBe(editedCost, 'Cost of first unit cost should be updated to 999'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Cost, secondUnitCost)).toBe(editedCost, 'Cost of second unit cost should be updated to 999'); | 
|   | 
|     // Verify other values remain unchanged for first unit cost | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Unit, firstUnitCost)).toBe(unit, 'Unit of first unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Account, firstUnitCost)).toBe(account, 'Account of first unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.CostDriver, firstUnitCost)).toBe(costDriver, 'Cost driver of first unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, firstUnitCost)).toBe(uom, 'UoM of first unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, firstUnitCost)).toBe(firstUnitCostStart, 'Start of first unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, firstUnitCost)).toBe(secondUnitCostStart, 'End of first unit cost should remain unchanged'); | 
|     // Verify other values remain unchanged for second unit cost | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Unit, secondUnitCost)).toBe(unit, 'Unit of second unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Account, secondUnitCost)).toBe(account, 'Account of second unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.CostDriver, secondUnitCost)).toBe(costDriver, 'Cost driver of second unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, secondUnitCost)).toBe(uom, 'UoM of second unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, secondUnitCost)).toBe(secondUnitCostStart, 'Start of second unit cost should remain unchanged'); | 
|     expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, secondUnitCost)).toBe(secondUnitCostEnd, 'End of second unit cost should remain unchanged'); | 
|   }); | 
| }); |