/** 
 | 
 * @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); 
 | 
  }); 
 | 
 }); 
 |