limj
2023-10-24 93652435728de839582440eefd5122c281181d35
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
/**
 * @file         ADSO-10147
 * @description  General settings Shelf Life - usable if mature + expire within period
 * @testcategory Web - Shelf life
 * @author       Umar Adkhamov (umar.adkhamov@3ds.com)
 * @copyright    Dassault Systèmes
 */
import { AppMP, Demo, Scenario } from '../../libmp/appmp';
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const';
import { ListProductContextMenuItem } from '../../libmp/forms/form.product';
import {
  DataMatrixProductPlanningAttributeName,
  DataMatrixProductPlanningRowName,
  DataMatrixProductPlanningValue,
} from '../../libmp/data/data.supplyplanning';
import { DataFoodBaseProductName, DataLowFatStrawberry12 } from '../../libmp/data/data.navigation';
import { startOfPlanningYear } from '../../libmp/data/data.period';
 
describe('ADSO-10147 - General settings Shelf Life, usable if mature + expire within period', () => {
  const appMP = AppMP.getInstance();
  const datesToBeChecked = [
    `1-Jan-${startOfPlanningYear}`,
    `1-Feb-${startOfPlanningYear}`,
    `1-Mar-${startOfPlanningYear}`,
    `1-Apr-${startOfPlanningYear}`,
    `1-May-${startOfPlanningYear}`,
  ];
  const listProduct = appMP.viewProduct.frmProduct.listProduct;
  const formProductPlanning = appMP.viewSupplyPlanning.frmProductPlanning;
  const meRowName = DataMatrixProductPlanningRowName.LowFat12PKBulgaria;
  const meAttributeName = DataMatrixProductPlanningAttributeName.InventoryEnd;
  const mePlanningValue = +(DataMatrixProductPlanningValue._10000.replace(',', ''));
 
  beforeAll(async () => {
    jasmine.addMatchers(qCustomMatcher);
    await appMP.login();
  });
 
  afterAll(async () => {
    await appMP.viewProduct.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);
  });
 
  it(`Setup - Open view ${appMP.viewProduct.viewPath}, set new Shelf-life and Maturation values for ${DataFoodBaseProductName.AllProducts}
      > ${DataFoodBaseProductName.FinishedGoods} > ${DataFoodBaseProductName.Lowfat} > ${DataLowFatStrawberry12.name} product`, async () => {
    // Open Products view
    await appMP.viewProduct.switchTo();
 
    // Select AllProducts > FinishedGoods > Low fat > Lowfat Strawberry 12 pk product
    const productRow = await listProduct.getRow({Name: DataLowFatStrawberry12.name}, DataLowFatStrawberry12.parents);
    const [dialog] = await listProduct.selectContextMenu(ListProductContextMenuItem.Edit, productRow);
    await dialog.pnlAdvanced.clickTab();
    await dialog.updateDialogValues({ShelfLifeEnabled: 'true', ShelfLife: '145', MaturationEnabled: 'true', Maturation: '45'});
    await dialog.clickOK();
  });
 
  it(`Setup - Open view ${appMP.viewGeneralSettings.viewPath}, verify that "If Expired Within Period/If Mature Within Period" checkboxes are checked by default in the General setttings form`, async () => {
    // Open General Settings view
    await appMP.viewGeneralSettings.switchTo();
    const formGeneralSettings = appMP.viewGeneralSettings.frmGeneralSettings;
    expect(await formGeneralSettings.cbIsUsableIfExpiredWithinPeriod.isChecked()).toBe(true, '"Is usable if expired within period" checkbox should be checked');
    expect(await formGeneralSettings.cbIsUsableIfMatureWithinPeriod.isChecked()).toBe(true, '"Is usable if matured within period" checkbox should be checked');
  });
 
  it(`Step 1 - Open view ${appMP.viewSupplyPlanning.viewPath} and reset plan`, async () => {
    // Open General Settings view
    await appMP.viewSupplyPlanning.switchTo();
 
    // Reset plan
    await appMP.abpPlan.resetPlanAll();
  });
 
  it(`Step 2 - Set new ${DataMatrixProductPlanningAttributeName.TotalSupply} for "${meRowName}"`, async () => {
    // Select first row to be able to use DOWN key on the MatrixEditor
    await formProductPlanning.meProductPlanning.selectByRow(0);
    // Scroll to the desired row
    await formProductPlanning.meProductPlanning.scrollToRowByRowHeader(meRowName);
    // Set Total Supply value
    await formProductPlanning.meProductPlanning.setTotalSupply(meRowName, datesToBeChecked[0], mePlanningValue);
    // Verify if optimizer run finish
    const isOptimizerFinished = await appMP.abpScenarioSelection.verifyIsOptimizerCompleted(5000);
    expect(isOptimizerFinished).toBe(true, 'Optimizer triggered after entered Total Supply value should be finished in 5 second.');
  });
 
  it(`Step 3 - Verify ${DataMatrixProductPlanningValue._10000} quantity is used to supply demand start from ${datesToBeChecked[1]} to ${datesToBeChecked[4]}`, async () => {
    // Verify that quantity is not used to supply demand on Jan-SOPYear and used starting from Feb to May-SOPYear
    for (const [index, date] of datesToBeChecked.entries()) {
      const cell = await formProductPlanning.meProductPlanning.getCell(meRowName, meAttributeName, date);
      const cellValue = await cell.getValue();
      // As Jan-SOPYear will be first index in dateString array, check if quantity is used when index is not 1
      if (index !== 0) {
        // As we can't direct convert "10,000" type string value to number. Thus, we have to replace "," to empty string in order to convert
        const numberValue = +(cellValue.replace(',', ''));
        expect(numberValue).toBeLessThan(
          mePlanningValue,
          `${meAttributeName} value should be lesser than ${DataMatrixProductPlanningValue._10000} for ${date}. Actual value: ${cellValue}`,
        );
      } else {
        expect(cellValue).toBe(
          DataMatrixProductPlanningValue._10000,
          `${meAttributeName} value should be ${DataMatrixProductPlanningValue._10000} for ${date}. Actual value: ${cellValue}`,
        );
      }
    }
  });
});