| /** | 
|  * @file         ADSO-10102 | 
|  * @description  Create unit cost for number of units cost driver from action bar | 
|  * @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 { CostLabel, DataFoodBaseAccountTimeUnit, DataFoodBaseAccountUoM } from '../../../libmp/data/data.account'; | 
| import { DialogUnitCost } from '../../../libmp/dialogs/dialog.unitcost'; | 
| import { ListUnitCost, ListUnitCostColumn } from '../../../libmp/forms/form.unitcost'; | 
|   | 
| describe('ADSO-10102 - Create unit cost for number of units cost driver from action bar', () => { | 
|   const appMP = AppMP.getInstance(); | 
|   let listUnitCost: ListUnitCost; | 
|   let dlgUnitCost: DialogUnitCost; | 
|   let btnMessage = ''; | 
|   let startOfPlanningDate: Date; | 
|   let newDEFermenterStartDate: Date; | 
|   let newDEFermenterStartString: string; | 
|   let startOfPlanningString: string; | 
|   let endOfPlanningString: string; | 
|   let sopYear: string; | 
|   | 
|   const timeUnit = DataFoodBaseAccountTimeUnit.Month; | 
|   | 
|   beforeAll(async () => { | 
|     jasmine.addMatchers(qCustomMatcher); | 
|     await appMP.login(); | 
|   }); | 
|   | 
|   afterAll(async () => { | 
|     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.viewPeriod.viewPath}. Get start and end of planning`, async () => { | 
|     // Open Periods view | 
|     await appMP.viewPeriod.switchTo(); | 
|     const formPeriod = appMP.viewPeriod.frmPeriod; | 
|     ({ startOfPlanningDate, sopYear, sopString: startOfPlanningString, eopString: endOfPlanningString } = await formPeriod.getStartAndEndOfPlanning()); | 
|     newDEFermenterStartDate = new Date(startOfPlanningDate.getFullYear(), 2, 1); | 
|     newDEFermenterStartString = `1-Mar-${sopYear}`; | 
|   }); | 
|   | 
|   it(`Setup - Open view ${appMP.viewAccount.viewPath}. Create Number of units account`, async () => { | 
|     // Open account view | 
|     await appMP.viewAccount.switchTo(); | 
|     const listAccount = appMP.viewAccount.frmAccount.listAccount; | 
|     await listAccount.createAccount('Cost of sales', 'Number of units', '', '0', 'Number of units', '100', 'Year', '1'); | 
|   }); | 
|   | 
|   it(`Setup - Open view ${appMP.viewUnitCost.viewPath}. Create new DE Fermenter unit cost for the new account and cost driver with start = start of planning`, async () => { | 
|     // Open unit cost view | 
|     await appMP.viewUnitCost.switchTo(); | 
|     listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost; | 
|     // Filter by DE Fermenter | 
|     await appMP.formNavigation.filterByEntity('DE Fermenter', ['Europe', 'Plants', 'Denmark Plant']); | 
|     // Create new DE Fermenter unit cost | 
|     dlgUnitCost = await listUnitCost.openEditDialog(); | 
|     await dlgUnitCost.updateUnitCostValue('Number of units', 'Number of units', 'DE Fermenter', startOfPlanningDate); | 
|     const canCreate = await dlgUnitCost.clickOK(); | 
|     if (!canCreate) { | 
|       btnMessage = await dlgUnitCost.getOKButtonTooltip(); | 
|     } | 
|     expect(canCreate).toBe(true, `Should be able to create unit cost for Number of units. OK button disabled with tooltip ${btnMessage}`); | 
|   }); | 
|   | 
|   it('Step 1 - Create unit cost for number of units cost driver from action bar', async () => { | 
|     // Create unit cost | 
|     await listUnitCost.focus(); | 
|     await appMP.abpData.btnCreate.click(); | 
|     await dlgUnitCost.waitUntilPresent(); | 
|     await dlgUnitCost.updateUnitCostValue('Number of units', 'Number of units', 'DE Fermenter', newDEFermenterStartDate, timeUnit, 1, 100.23); | 
|     expect(await dlgUnitCost.efCost.getComponentLabel()).toBe(CostLabel.euro(timeUnit), `Label of cost should be ${CostLabel.euro(timeUnit)}`); | 
|     const canCreate = await dlgUnitCost.clickOK(); | 
|     if (!canCreate) { | 
|       btnMessage = await dlgUnitCost.getOKButtonTooltip(); | 
|     } | 
|     expect(canCreate).toBe(true, `Should be able to create unit cost for Number of units. OK button disabled with tooltip ${btnMessage}`); | 
|   }); | 
|   | 
|   it('Step 2 - Verify unit cost created with correct values', async () => { | 
|     // Verify row created with correct values in dialog | 
|     const previousDEDefermenter = await listUnitCost.getUnitCostRowByValues('DE Fermenter', 'Number of units', 'Number of units', startOfPlanningString); | 
|     const newDEDefermenter = await listUnitCost.getUnitCostRowByValues('DE Fermenter', 'Number of units', 'Number of units', newDEFermenterStartString); | 
|     dlgUnitCost = await listUnitCost.openEditDialog(newDEDefermenter); | 
|     const verifyAfterDialogFeedback = await dlgUnitCost.verifyDialogValue('Number of units', 'Number of units', 'DE Fermenter', newDEFermenterStartDate, timeUnit, 1, 100.23); | 
|     expect(verifyAfterDialogFeedback.length).toBe(0, verifyAfterDialogFeedback.join('. ')); | 
|     await dlgUnitCost.clickCancel(); | 
|     if (newDEDefermenter !== undefined && previousDEDefermenter !== undefined) { | 
|       // Verify UoM, Start, and End column value of the new row | 
|       expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, newDEDefermenter)).toBe(DataFoodBaseAccountUoM.EuroPerMonth, `UoM should be ${DataFoodBaseAccountUoM.EuroPerMonth}`); | 
|       expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, newDEDefermenter)).toBe(newDEFermenterStartString, `Start should be ${newDEFermenterStartString}`); | 
|       expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, newDEDefermenter)).toBe(endOfPlanningString, `End should be ${endOfPlanningString}`); | 
|       // Verify Start and End column value of the previous unit cost | 
|       expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, previousDEDefermenter)).toBe(startOfPlanningString, `Start should be ${startOfPlanningString}`); | 
|       expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, previousDEDefermenter)).toBe(newDEFermenterStartString, `End should be ${newDEFermenterStartString}`); | 
|     } else { | 
|       expect(newDEDefermenter).toBeDefined('New DE Fermenter should be created'); | 
|     } | 
|   }); | 
|   | 
|   it(`Step 3 - Open view ${appMP.viewScenarioAnalysisCost.viewPath}. Verify cost in scenario analysis chart`, async () => { | 
|     // Switch to scenario analysis account view | 
|     await appMP.viewScenarioAnalysisCost.switchTo(); | 
|     await appMP.viewScenarioAnalysisCost.frmCost.drpdAccount.selectItem('Number of units'); | 
|     const chartValues = await appMP.viewScenarioAnalysisCost.frmCost.chartCost.getChartDataValue('DashboardChartSeriesSenarioAnalysisCostPerPeriodBaseCost', ['Number of units'], [newDEFermenterStartString]); | 
|     expect(chartValues[0].values[0]).toBe('100.23', `Value should be 100.23 starting from ${newDEFermenterStartString}`); | 
|   }); | 
| }); |