haorenhui
2023-10-30 6d6cc10d9e8e242661da7fd655dec155a09d676c
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
/**
 * @file         ADSO-10111
 * @description  Edit single unit cost, not unique cost encountered
 * @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 { asyncEvery } from '../../../libappbase/utils';
import { AppMP, Demo, Scenario } from '../../../libmp/appmp';
import { DataFoodBaseEntity, DataFoodBaseEntityName } from '../../../libmp/data/data.navigation';
import { startOfPlanningYear } from '../../../libmp/data/data.period';
import { DataFoodBaseUnitCost } from '../../../libmp/data/data.unitcost';
import { ListUnitCostColumn } from '../../../libmp/forms/form.unitcost';
 
describe('ADSO-10111 - Edit single unit cost, not unique cost encountered', () => {
  const appMP = AppMP.getInstance();
  const listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost;
  let dlgUnitCost = listUnitCost.dlgUnitCost;
  let sopYear: string;
  let unitCostRow1: ListRow | undefined;
  let unitCostRow2: ListRow | undefined;
  const account = DataFoodBaseUnitCost.Account;
  const costDriver = DataFoodBaseUnitCost.CostDriver;
  const unit = DataFoodBaseEntityName.DEFermenter;
  const unitCostStart1String = `1-Jan-${startOfPlanningYear - 1}`;
  let unitCostStart2: Date;
  let unitCostStart2String = '';
  let editUnitCostStart = '';
 
  beforeAll(async () => {
    jasmine.addMatchers(qCustomMatcher);
    await appMP.login();
  });
 
  afterAll(async () => {
    // Clear demo data
    await appMP.formNavigation.reset();
    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 sopYear and unit costs start date`, async () => {
    // Open Periods view
    await appMP.viewPeriod.switchTo();
    const formPeriod = appMP.viewPeriod.frmPeriod;
    ({ sopYear } = await formPeriod.getStartAndEndOfPlanning());
    unitCostStart2 = new Date(Number(sopYear), 1, 1);
    unitCostStart2String = `${DataFoodBaseUnitCost.Start2}-${sopYear}`;
    editUnitCostStart = `${DataFoodBaseUnitCost.EditStart}-${sopYear}`;
  });
 
  it(`Setup - Open view ${appMP.viewUnitCost.viewPath}. Verify 1 ${unit} exist with ${unitCostStart1String} as start date`, async () => {
    // Open unit cost view
    await appMP.viewUnitCost.switchTo();
    // Filter by DE Fermenter
    await appMP.formNavigation.filterByEntity(unit, DataFoodBaseEntity.deUnitsParents);
    // Verify 1 DE Fermenter Unit Cost exist in the list
    await listUnitCost.waitForScreenUpdate();
    expect(await listUnitCost.getRowCount()).toBe(1, `Exactly one ${unit} Unit Cost should exist in the list`);
    const unitCost = await listUnitCost.getRowByIndex(0);
    const unitCostStart = await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, unitCost);
    expect(unitCostStart).toBe(unitCostStart1String, `Start of the ${unit} unit cost should be ${unitCostStart1String}`);
  });
 
  it(`Setup - Create a new ${unit} unit cost with start date ${DataFoodBaseUnitCost.Start2}-(SOP Year)`, async () => {
    // Create new DE Fermenter unit cost
    dlgUnitCost = await listUnitCost.openEditDialog();
    await dlgUnitCost.updateUnitCostValue(account, costDriver, unit, unitCostStart2);
    let btnDisabledTooltip = '';
    const canClickOk = await dlgUnitCost.clickOK(1000);
    if (!canClickOk) {
      btnDisabledTooltip = await dlgUnitCost.getOKButtonTooltip();
    }
    expect(canClickOk).toBe(true, `OK button should be clickable. Ok button disabled with tooltip: ${btnDisabledTooltip}`);
    unitCostRow2 = await listUnitCost.getUnitCostRowByValues(unit, account, costDriver, unitCostStart2String);
    expect(unitCostRow2).toBeDefined(`New created ${unit} Unit Cost row with start date ${unitCostStart2String} should be found`);
  });
 
  it(`Step 1 - Edit UnitCostRow with ${unitCostStart1String} start value to ${DataFoodBaseUnitCost.Start2}-SOPYear and verify it is blocked with expected tooltip`, async () => {
    // Open edit dialog and update it
    unitCostRow1 = await listUnitCost.getUnitCostRowByValues(unit, account, costDriver, unitCostStart1String);
    expect(unitCostRow1).toBeDefined(`${unit} UnitCost with start ${unitCostStart1String} should be found`);
    dlgUnitCost = await listUnitCost.openEditDialog(unitCostRow1);
    await dlgUnitCost.dtsStart.setDate(unitCostStart2);
    let btnDisabledTooltip = '';
    const canClickOk = await dlgUnitCost.clickOK(1000);
    if (!canClickOk) {
      btnDisabledTooltip = await dlgUnitCost.getOKButtonTooltip();
    }
    expect(canClickOk).toBe(false, 'Ok button should be disabled as start date of UnitCost should be unique');
    expect(btnDisabledTooltip).toBe('Identical cost definition exists. Unit cost must be unique by Account, Cost driver and Start date.', `Feedback text should match. Current tooltip value: ${btnDisabledTooltip}`);
  });
 
  it(`Step 2 - Edit UnitCostRow with ${unitCostStart1String} start value to ${DataFoodBaseUnitCost.EditStart}-SOPYear and verify UnitCost can be edited`, async () => {
    // Update dialog
    await dlgUnitCost.dtsStart.setDate(new Date(editUnitCostStart));
    let btnDisabledTooltip = '';
    const canClickOk = await dlgUnitCost.clickOK(1000);
    if (!canClickOk) {
      btnDisabledTooltip = await dlgUnitCost.getOKButtonTooltip();
    }
    expect(canClickOk).toBe(true, `OK button should be clickable. Ok button disabled with tooltip: ${btnDisabledTooltip}`);
  });
 
  it(`Step 3 - Verify ${unit} UnitCost(s) start date value is either ${DataFoodBaseUnitCost.EditStart}-SOPYear and ${DataFoodBaseUnitCost.Start2}-SOPYear`, async () => {
    const dateArray = [editUnitCostStart, unitCostStart2String];
    const allUnitCostRows = await listUnitCost.getAllRows();
    const isStartDateValueCorrect = await asyncEvery(allUnitCostRows, async (row: ListRow) => {
      const value = await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, row);
      return dateArray.indexOf(value) > -1;
    });
    expect(isStartDateValueCorrect).toBe(true, `Start date of ${unit} UnitCost should be either ${editUnitCostStart} or ${unitCostStart2String}`);
  });
});