renhao
2023-09-21 1aa9f2bb83dd9e4b7517f1cbf06b0db53979bb31
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
/**
 * @file         ADSO-10105
 * @description  Create unit cost by drag & drop single unit onto account
 * @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 { ListRow } from '../../../e2elib/lib/src/pageobjects/list/listrow.component';
import { ColumnIDValueMap } from '../../../libappbase/listbase';
import { AppMP, Demo, Scenario } from '../../../libmp/appmp';
import { DataFoodBaseEntity, DataFoodBaseEntityName } from '../../../libmp/data/data.navigation';
import { DataFoodBaseAccountName, DataFoodBaseAccountCostDriver, DataFoodBaseAccountUoM, CostLabel } from '../../../libmp/data/data.account';
import { ListUnitCostColumn } from '../../../libmp/forms/form.unitcost';
 
describe('ADSO-10105 - Create unit cost by drag & drop single unit onto account', () => {
  const appMP = AppMP.getInstance();
  let listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost;
  let dlgUnitCost = listUnitCost.dlgUnitCost;
  let stockingPointRow: ListRow;
  let accountRow: ListRow;
  let newDEFermenterStartDate: Date;
  let newDEFermenterStartString: string;
  let endOfPlanningString: string;
  let sopYear: string;
 
  const accDefaultCost = 100;
  const newCost = 200;
  const entity = DataFoodBaseEntityName.DEFermenter;
  const accName = DataFoodBaseAccountName.ChangeoverCost;
  const accParentName = DataFoodBaseAccountName.CostOfSales;
  const costDriver = DataFoodBaseAccountCostDriver.Changeover;
 
  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} and get the start and end of planning period`, async () => {
    await appMP.viewPeriod.switchTo();
    const formPeriod = appMP.viewPeriod.frmPeriod;
    ({ sopYear, eopString: endOfPlanningString } = await formPeriod.getStartAndEndOfPlanning());
    newDEFermenterStartDate = new Date(Number(sopYear), 1, 1);
    newDEFermenterStartString = `1-Feb-${sopYear}`;
  });
 
  it(`Setup - Open view ${appMP.viewAccount.viewPath}`, async () => {
    await appMP.viewAccount.switchTo();
  });
 
  it(`Setup - Configure the ${accName} account with default cost "${accDefaultCost}"`, async () => {
    const listAccount = appMP.viewAccount.frmAccount.listAccount;
 
    const parentRow = await listAccount.getRow({ Name: accParentName });
    await parentRow.expandRow();
 
    const accRow = await listAccount.getRow({ Name: accName });
    const dlgAccount = await listAccount.openAcountDialogViaEditContextMenu(accRow);
 
    await dlgAccount.efCost.sendInput(accDefaultCost.toString());
    expect(await dlgAccount.clickOK()).toBe(true, `Should be able to edit cost of ${accName} to ${accDefaultCost.toString()}`);
  });
 
  it(`Setup - Open view ${appMP.viewUnitCost.viewPath}`, async () => {
    await appMP.viewUnitCost.switchTo();
  });
 
  it(`Setup - Verify no ${accName} created for ${entity} in "Unit Costs" list`, async () => {
    listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost;
    // Filter by DE Fermenter
    await appMP.formNavigation.filterByEntity(entity, DataFoodBaseEntity.deUnitsParents);
    stockingPointRow = await appMP.formNavigation.listEntity.getEntityRowByName(entity);
    // Verify no changeover cost created
    const row = await listUnitCost.getRowByValue([{ columnID: ListUnitCostColumn.Account, value: accName }]).catch(() => {
      // do nothing as error is thrown due to no row is found
    });
    expect(row).toBeUndefined(`No ${accName} should be created for ${entity}`);
  });
 
  it(`Step 1 - Drag unit "${entity}" from navigation panel and drop onto "${accName}" account and verify default values in the pop up dialog`, async () => {
    const listAccount = appMP.viewUnitCost.frmUnitAccount.listAccount;
 
    accountRow = await listAccount.getRow({ Account: accName }); // Get account row
    dlgUnitCost = await listUnitCost.dragEntityToCreateUnitCost(stockingPointRow, accountRow);
    expect(await dlgUnitCost.isVisible()).toBe(true, 'Unit cost dialog should be visible');
 
    // Verify dialog default value
    const feedback = await listUnitCost.dlgUnitCost.verifyDialogValue(accName, costDriver, entity, new Date(Number(sopYear), 0, 1), undefined, undefined, 100);
    expect(feedback.length).toBe(0, feedback.join('. '));
  });
 
  it(`Step 2 - Set start value to "1-Feb-(year of SOP)" and cost value to "${newCost}" in the dialog. Then click Ok button`, async () => {
    // Update dialog value and confirm the dialog
    await dlgUnitCost.updateUnitCostValue(accName, costDriver, entity, newDEFermenterStartDate, undefined, undefined, newCost);
    expect(await listUnitCost.dlgUnitCost.efCost.getComponentLabel()).toBe(CostLabel.euro(costDriver), `Label of cost should be "${CostLabel.euro(costDriver)}"`);
    expect(await dlgUnitCost.clickOK()).toBe(true, 'Should be able to create unit cost');
  });
 
  it('Step 3 - In the "Unit Cost" list, verify unit cost row created with correct values', async () => {
    let newDeDefermenterRow: ListRow | undefined;
    const columnValueMap = [
      { columnID: ListUnitCostColumn.Unit, value: entity },
      { columnID: ListUnitCostColumn.Account, value: accName },
      { columnID: ListUnitCostColumn.CostDriver, value: costDriver },
      { columnID: ListUnitCostColumn.Start, value: newDEFermenterStartString },
      { columnID: ListUnitCostColumn.End, value: endOfPlanningString },
      { columnID: ListUnitCostColumn.UoM, value: `${DataFoodBaseAccountUoM.EuroPer}${costDriver}` },
    ];
 
    try {
      await listUnitCost.getRowByValue(columnValueMap);
    } catch {
      const values = columnValueMap.map((el: ColumnIDValueMap) => el.value);
      expect(newDeDefermenterRow).toBeDefined(`New row with values "${values.join(', ')}" should be found in "UnitCost" list`);
    }
  });
});