yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
 * @file          ADSO-48500 - Navigation and Matrix performance
 * @description   Performance testing on navigation and matrix
 * @testCategory  Web app - Performance test - Matrix and chart
 * @author        Peng Hing (penghing.ng@3ds.com)
 * @copyright     Dassault Systèmes
 */
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const';
import { AppMP, Demo, Scenario } from '../../libmp/appmp';
import { DataBCCBWide, DataMetalBaseEntityName } from '../../libmp/data/data.navigation';
import { GanttChartAction } from '../../e2elib/lib/src/pageobjects/ganttchart/ganttchart.component';
import { DataMatrixProductPlanningAttributeName, DataMatrixProductPlanningRowName } from '../../libmp/data/data.supplyplanning';
import { ListScenarioContextMenuItem, ScenarioManager } from '../../libmp/forms/form.scenario';
import { DataPCSBase } from '../../libmp/datafile/data.pcs';
import { browser } from '../../e2elib/node_modules/protractor/built';
import { DataProvider } from '../../libmp/dataprovider';
import { UtilSOP } from '../../libappsop/utilsop';
 
describe('ADSO-48500 - Navigation and Matrix performance', () => {
  const appMP = AppMP.getInstance();
  const viewSupplyPlanning = appMP.viewSupplyPlanning;
  const formCapacityPlanning = viewSupplyPlanning.frmCapacityPlanning;
  const ganttChartCapacityPlanning = formCapacityPlanning.ganttChartCapacityPlanning;
 
  const formProductPlanning = viewSupplyPlanning.frmProductPlanning;
  const matrixProductPlanning = formProductPlanning.meProductPlanning;
  const formNavigation = appMP.formNavigation;
 
  const product = DataBCCBWide.name;
  const productParent = DataBCCBWide.parents;
  const stockingPoint = DataMetalBaseEntityName.NorthAmerica;
  const stockingPointParent = [DataMetalBaseEntityName.QAluminum];
 
  const matrixRowBCCBWide = DataMatrixProductPlanningRowName.BCCBWideInAsia;
  const matrixRowLaQuinta = DataMatrixProductPlanningRowName.CPNCoilInNorthAmerica;
  const matrixRowNorthAmerica = DataMatrixProductPlanningRowName.CPNCoilInNorthAmerica;
  const matrixAttributeTotalDemand = DataMatrixProductPlanningAttributeName.TotalDemand;
  const listScenario = appMP.viewScenarioAnalysisOverview.formScenario.lstScenario;
  const ganttChartRowCasterLaQuinta = 'Caster (La Quinta)';
  const efficiency = '1.75';
  let dataPCS: DataPCSBase;
 
  let isMemoryOnly = true;
 
  beforeAll(async () => {
    jasmine.addMatchers(qCustomMatcher);
    await appMP.login();
  });
 
  afterAll(async () => {
    await ganttChartCapacityPlanning.editRowTimeCapacity(ganttChartRowCasterLaQuinta, '1.00');
    await appMP.resetActiveView(viewSupplyPlanning);
 
    if (isMemoryOnly) {
      await appMP.viewScenario.switchTo();
 
      // Not to delete scenario with this prefix, reused for few tests
      await appMP.viewScenario.formScenario.lstScenario.deleteAllScenarios(ScenarioManager.AllScenarios, 'ADSO-');
      await appMP.viewScenario.formScenario.lstScenario.deleteAllScenarios(ScenarioManager.RecycleBin);
    }
    await formNavigation.reset();
    await appMP.logout();
  });
 
  afterEach(async () => {
    await appMP.checkToastMessage();
  });
 
  it(`Setup - Get data, dataset = ${browser.params.testdata.name}`, async () => {
    dataPCS = await DataProvider.getInstance().getDataPCS();
    isMemoryOnly = dataPCS.testData === 'MetalDemo';
  });
 
  it(`Setup - Create demo data / Load Dataset [${Demo.Metals}], scenario [${Scenario.Base}]`, async () => {
      // create and load Metal base dataset
      if (isMemoryOnly) {
        await appMP.createDemoDataset(Demo.Metals, Scenario.Base);
      } else {
        await listScenario.expandFolderAndSelectMenu(dataPCS.scenarioName, ListScenarioContextMenuItem.Load);
        await listScenario.expandFolderAndSelectMenu(dataPCS.scenarioName, ListScenarioContextMenuItem.Select);
        await appMP.verifyActiveScenario(dataPCS.scenarioName);
      }
  });
 
  it(`Setup - Open view ${viewSupplyPlanning.viewPath}`, async () => {
    await viewSupplyPlanning.switchTo();
  });
 
  it(`Step 1.1 - Using the navigation panel on the left hand side, tick product [${product}] under [${UtilSOP.transformInterfaceValuesToStringArray(productParent).join(', ')}]`, async () => {
    await formNavigation.filterByProduct({Name: product}, productParent);
  });
 
  it('Step 1.2 - [PCS] Matrix cell in the Product Planning form should be updated within 1 second of making a selection in the navigation panel', async () => {
    // Verify the matrix product planning value is not empty or undefined
    await matrixProductPlanning.verifyCellValue(matrixRowBCCBWide, matrixAttributeTotalDemand, dataPCS.dateStartA, dataPCS.cellValue1);
  });
 
  it(`Step 2.1 - Press the Home button on the navigation panel to reset all previous selection and tick stocking point [${stockingPoint}] under [${stockingPointParent}]`, async () => {
    // Home button
    await formNavigation.reset();
 
    // Choose QAluminum -> North America
    await formNavigation.filterByEntity(stockingPoint, stockingPointParent);
  });
 
  it('Step 2.2 - Scroll to column 1-Jan-2023 on the Product Planning Matrix for row "CPN coil in North America"', async () => {
    await matrixProductPlanning.scrollToRowByRowHeader(matrixRowNorthAmerica);
  });
 
  it('Step 2.3 - [PCS] Elements in Capacity Planning and Product Planning forms should be filtered accordingly within 3 seconds', async () => {
    await matrixProductPlanning.verifyCellValue(matrixRowLaQuinta, matrixAttributeTotalDemand, dataPCS.dateStartA, dataPCS.cellValue2);
    await ganttChartCapacityPlanning.verifyGanttChartHasValue(ganttChartRowCasterLaQuinta, dataPCS.dateStartA, dataPCS.dateEndA);
  });
 
  it('Step 3.1 - Click in the matrix on Product Planning form, press the right arrow key until until a previously unseen cell is loaded', async () => {
    await matrixProductPlanning.navigateToColumnAppear(dataPCS.dateStartB, true);
  });
 
  it('Step 3.2 - [PCS] Matrix values should be updated within 1 seconds of becoming visible', async () => {
    await matrixProductPlanning.verifyCellValue(matrixRowNorthAmerica, matrixAttributeTotalDemand, dataPCS.dateStartB, dataPCS.cellValue3);
  });
 
  it('Step 4.1 - Click on the Capacity Planning form, move the gantt chart to right with action bar button until a previously unseen cell is loaded', async () => {
    await ganttChartCapacityPlanning.actions(GanttChartAction.MoveRight);
  });
 
  it('Step 4.2 - [PCS] Gantt chart values should be updated within 1 seconds of becoming visible', async () => {
    await ganttChartCapacityPlanning.verifyGanttChartHasValue(ganttChartRowCasterLaQuinta, dataPCS.dateStartB, dataPCS.dateEndB);
  });
 
  it(`Step 5.1 - On the Capacity Planning form, right click on [${ganttChartRowCasterLaQuinta}] and select edit. Change efficiency = [${efficiency}] and save changes`, async () => {
    await ganttChartCapacityPlanning.editRowTimeCapacity(ganttChartRowCasterLaQuinta, efficiency);
  });
 
  it('Step 5.2 - [PCS] Verify that the whole row updated within 3 seconds to show the new utilization percentages', async () => {
    await ganttChartCapacityPlanning.verifyGanttChartValue(ganttChartRowCasterLaQuinta, dataPCS.dateStartB, dataPCS.dateEndB, dataPCS.gcNodeValueAfterIncreaseEfficiency);
  });
});