| /** | 
|  * @file        ADSO-9341 | 
|  * @description Scenario analysis - bottleneck resources view, filtering on selection in the Navigation panel | 
|  * @author      CHEAH Meng Yew (MengYew.CHEAH@3ds.com) | 
|  * @copyright   Dassault Systemes | 
|  */ | 
|  import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; | 
|  import { StepChart } from '../../libappsop/chartsop'; | 
| import { DataHierarchy } from '../../libappsop/datahierarchy'; | 
|  import { AppMP, Demo, Scenario } from '../../libmp/appmp'; | 
|  import { startOfPlanningYear } from '../../libmp/data/data.period'; | 
|  import { dataMetalsUnits, dataMetalsUnitsProvider } from '../../libmp/data/data.unit'; | 
|  import { StepCapacityPlanning } from '../../libmp/forms/form.capacityplanning'; | 
|  import { ChartScenarioAnalysisBottleneckResources } from '../../libmp/forms/form.scenarioanalysis.bottleneckresources'; | 
|  import { StepNavigationPanel } from '../../libmp/forms/navigationpanel/form.navigationpanel'; | 
|  import { StepNavigationPanelPeriod } from '../../libmp/forms/navigationpanel/panel.period'; | 
|   | 
|  describe('ADSO-9341 - Scenario analysis - bottleneck resources view, filtering on selection in the Navigation panel', () => { | 
|   const appMP = AppMP.getInstance(); | 
|   const listEntity = appMP.formNavigation.listEntity; | 
|   const panelPeriod = appMP.formNavigation.pnlPeriod; | 
|   const viewSupplyPlanning = appMP.viewSupplyPlanning; | 
|   const viewScenarioAnalysisBottleneckResources = appMP.viewScenarioAnalysisBottleneckResources; | 
|   const chartBottleneck = viewScenarioAnalysisBottleneckResources.frmScenarioAnalysisBottleneckResources.chartScenarioAnalysisBottleneckResources; | 
|   const chartTitle = ChartScenarioAnalysisBottleneckResources.chartTitle; | 
|   const chartYAxisTitle = ChartScenarioAnalysisBottleneckResources.chartYAxisTitle; | 
|   const gcCapacityPlanning = viewSupplyPlanning.frmCapacityPlanning.ganttChartCapacityPlanning; | 
|   const startDateList =  [`1-Jan-${startOfPlanningYear}`, | 
|                          `1-Feb-${startOfPlanningYear}`, | 
|                          `1-Mar-${startOfPlanningYear}`, | 
|                          `1-Apr-${startOfPlanningYear}`, | 
|                          `1-May-${startOfPlanningYear}`, | 
|                          `1-Jun-${startOfPlanningYear}`, | 
|                          `1-Jul-${startOfPlanningYear}`, | 
|                          `1-Aug-${startOfPlanningYear}`, | 
|                          `1-Sep-${startOfPlanningYear}`]; | 
|   const endDateList =  [`1-Feb-${startOfPlanningYear}`, | 
|                        `1-Mar-${startOfPlanningYear}`, | 
|                        `1-Apr-${startOfPlanningYear}`, | 
|                        `1-May-${startOfPlanningYear}`, | 
|                        `1-Jun-${startOfPlanningYear}`, | 
|                        `1-Jul-${startOfPlanningYear}`, | 
|                        `1-Aug-${startOfPlanningYear}`, | 
|                        `1-Sep-${startOfPlanningYear}`, | 
|                        `1-Oct-${startOfPlanningYear}`]; | 
|   const fromDate = startDateList[0]; | 
|   const toDate = endDateList[endDateList.length - 1]; | 
|   let coldMill1Avg: string; | 
|   let coldMill2Avg: string; | 
|   let coldMill3Avg: string; | 
|   let recyclingFurnaceAvg: string; | 
|   let initialNbrOfBarChart: number; | 
|   | 
|   beforeAll(async () => { | 
|     jasmine.addMatchers(qCustomMatcher); | 
|     await appMP.login(); | 
|   }); | 
|   | 
|   afterAll(async () => { | 
|     await appMP.cleanupAndLogout(); | 
|   }); | 
|   | 
|   afterEach(async () => { | 
|     await appMP.checkToastMessage(); | 
|   }); | 
|   | 
|   it(`Setup - ${AppMP.getDemoDataPath(Demo.Metals, Scenario.Base)}`, async () => { | 
|     await appMP.createDemoDataset(Demo.Metals, Scenario.Base, true); // Need wait optimizer finish to have chart shows correct Utilization | 
|   }); | 
|   | 
|   it(`Step 1 - Open view ${viewScenarioAnalysisBottleneckResources.viewPath}`, async () => { | 
|     await viewScenarioAnalysisBottleneckResources.switchTo(); | 
|   }); | 
|   | 
|   it(`Step 2- ${StepNavigationPanel.openNavigationPanel()}`, async () => { | 
|     await appMP.formNavigation.openNavigationPanel(); | 
|   }); | 
|   | 
|   it(`Step 3 - ${StepNavigationPanel.showEntitiesList()}`, async () => { | 
|     await appMP.formNavigation.toggleEntityList(true); | 
|   }); | 
|   | 
|   it(`Step 4 - ${StepChart.getXAxisLabelCount(chartTitle)}`, async () => { | 
|     initialNbrOfBarChart = await chartBottleneck.getXAxisLabelsCount(); | 
|   }); | 
|   | 
|   it(`Step 5 - ${StepNavigationPanel.checkUnits([dataMetalsUnits.AsiaUnit.Name])}`, async () => { | 
|     // Given a unit name, getHierarchy will return the ancestor units recursively | 
|     const [asia, asiaParents] = dataMetalsUnitsProvider.getHierarchy(dataMetalsUnits.AsiaUnit); | 
|     const parentsArr = asiaParents.map((x: DataHierarchy) => x.Name); | 
|     const asiaRow = await listEntity.getEntityRowByName(asia.Name, parentsArr); | 
|   | 
|     await listEntity.toggleRowCheckbox(asiaRow, true); | 
|   }); | 
|   | 
|   it(`Step 6 - ${StepNavigationPanel.showPeriodPanel()}`, async () => { | 
|     await appMP.formNavigation.togglePeriod(true); | 
|   }); | 
|   | 
|   it(`Step 7 - ${StepNavigationPanelPeriod.setNumFuturePeriods(9)} ${StepNavigationPanelPeriod.setNumHistoricalPeriods(0)}`, async () => { | 
|     await panelPeriod.setNumFuturePeriods('9'); | 
|     await panelPeriod.setNumHistoricalPeriods('0'); | 
|   }); | 
|   | 
|   it(`Step 8 - Open view ${viewSupplyPlanning.viewPath}`, async () => { | 
|     await viewSupplyPlanning.switchTo(); | 
|   }); | 
|   | 
|   it(`Step 9 - ${StepCapacityPlanning.calcAverageCapacityPercentage([dataMetalsUnits.Coldmill1QiYing.Name], fromDate, toDate)}`, async () => { | 
|     coldMill1Avg = await gcCapacityPlanning.getRowNodesAverageValue([dataMetalsUnits.Coldmill1QiYing.Name], startDateList, endDateList); | 
|   }); | 
|   | 
|   it(`Step 10 - ${StepCapacityPlanning.calcAverageCapacityPercentage([dataMetalsUnits.Coldmill2QiYing.Name], fromDate, toDate)}`, async () => { | 
|     coldMill2Avg = await gcCapacityPlanning.getRowNodesAverageValue([dataMetalsUnits.Coldmill2QiYing.Name], startDateList, endDateList); | 
|   }); | 
|   | 
|   it(`Step 11 - ${StepCapacityPlanning.calcAverageCapacityPercentage([dataMetalsUnits.Coldmill3QiYing.Name], fromDate, toDate)}`, async () => { | 
|     coldMill3Avg =  await gcCapacityPlanning.getRowNodesAverageValue([dataMetalsUnits.Coldmill3QiYing.Name], startDateList, endDateList); | 
|   }); | 
|   | 
|   it(`Step 12 - ${StepCapacityPlanning.calcAverageCapacityPercentage([dataMetalsUnits.RecyclingFurnaceQiYing.Name], fromDate, toDate)}`, async () => { | 
|     recyclingFurnaceAvg = await gcCapacityPlanning.getRowNodesAverageValue([dataMetalsUnits.RecyclingFurnaceQiYing.Name], startDateList, endDateList); | 
|   }); | 
|   | 
|   it(`Step 13 - Open view ${viewScenarioAnalysisBottleneckResources.viewPath}`, async () => { | 
|     await viewScenarioAnalysisBottleneckResources.switchTo(); | 
|   }); | 
|   | 
|   it(`Step 14 - ${StepChart.verifyHasDataPoint(chartTitle, chartYAxisTitle, dataMetalsUnits.Coldmill1QiYing.Name, 'the average utilization')}`, async () => { | 
|     await chartBottleneck.verifyHasDataPoint('', chartYAxisTitle, dataMetalsUnits.Coldmill1QiYing.Name, coldMill1Avg, 0.5); | 
|   }); | 
|   | 
|   it(`Step 15 - ${StepChart.verifyHasDataPoint(chartTitle, chartYAxisTitle, dataMetalsUnits.Coldmill2QiYing.Name, 'the average utilization')}`, async () => { | 
|     await chartBottleneck.verifyHasDataPoint('', chartYAxisTitle, dataMetalsUnits.Coldmill2QiYing.Name, coldMill2Avg, 0.5); | 
|   }); | 
|   | 
|   it(`Step 16 - ${StepChart.verifyHasDataPoint(chartTitle, chartYAxisTitle, dataMetalsUnits.Coldmill3QiYing.Name, 'the average utilization')}`, async () => { | 
|     await chartBottleneck.verifyHasDataPoint('', chartYAxisTitle, dataMetalsUnits.Coldmill3QiYing.Name, coldMill3Avg, 0.5); | 
|   }); | 
|   | 
|   it(`Step 17 - ${StepChart.verifyHasDataPoint(chartTitle, chartYAxisTitle, dataMetalsUnits.RecyclingFurnaceQiYing.Name, 'the average utilization')}`, async () => { | 
|     await chartBottleneck.verifyHasDataPoint('', chartYAxisTitle, dataMetalsUnits.RecyclingFurnaceQiYing.Name, recyclingFurnaceAvg, 0.5); | 
|   }); | 
|   | 
|   it(`Step 18 - ${StepNavigationPanel.clickHomeResetToRoot()}`, async () => { | 
|     await appMP.formNavigation.resetNaviToRoot(); | 
|   }); | 
|   | 
|   it(`Step 19 - ${StepChart.verifyXAxisLabelCount('all bottleneck resources shown unfiltered')}`, async () => { | 
|     // Reset filter will show all bottleneck resources across the horizon | 
|     await chartBottleneck.verifyXAxisLabelCount(initialNbrOfBarChart); | 
|   }); | 
|  }); |