/** 
 | 
 * @file         ADSO-10102 
 | 
 * @description  Create unit cost for number of units cost driver from action bar 
 | 
 * @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 { AppMP, Demo, Scenario } from '../../../libmp/appmp'; 
 | 
import { CostLabel, DataFoodBaseAccountTimeUnit, DataFoodBaseAccountUoM } from '../../../libmp/data/data.account'; 
 | 
import { DialogUnitCost } from '../../../libmp/dialogs/dialog.unitcost'; 
 | 
import { ListUnitCost, ListUnitCostColumn } from '../../../libmp/forms/form.unitcost'; 
 | 
  
 | 
describe('ADSO-10102 - Create unit cost for number of units cost driver from action bar', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  let listUnitCost: ListUnitCost; 
 | 
  let dlgUnitCost: DialogUnitCost; 
 | 
  let btnMessage = ''; 
 | 
  let startOfPlanningDate: Date; 
 | 
  let newDEFermenterStartDate: Date; 
 | 
  let newDEFermenterStartString: string; 
 | 
  let startOfPlanningString: string; 
 | 
  let endOfPlanningString: string; 
 | 
  let sopYear: string; 
 | 
  
 | 
  const timeUnit = DataFoodBaseAccountTimeUnit.Month; 
 | 
  
 | 
  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}. Get start and end of planning`, async () => { 
 | 
    // Open Periods view 
 | 
    await appMP.viewPeriod.switchTo(); 
 | 
    const formPeriod = appMP.viewPeriod.frmPeriod; 
 | 
    ({ startOfPlanningDate, sopYear, sopString: startOfPlanningString, eopString: endOfPlanningString } = await formPeriod.getStartAndEndOfPlanning()); 
 | 
    newDEFermenterStartDate = new Date(startOfPlanningDate.getFullYear(), 2, 1); 
 | 
    newDEFermenterStartString = `1-Mar-${sopYear}`; 
 | 
  }); 
 | 
  
 | 
  it(`Setup - Open view ${appMP.viewAccount.viewPath}. Create Number of units account`, async () => { 
 | 
    // Open account view 
 | 
    await appMP.viewAccount.switchTo(); 
 | 
    const listAccount = appMP.viewAccount.frmAccount.listAccount; 
 | 
    await listAccount.createAccount('Cost of sales', 'Number of units', '', '0', 'Number of units', '100', 'Year', '1'); 
 | 
  }); 
 | 
  
 | 
  it(`Setup - Open view ${appMP.viewUnitCost.viewPath}. Create new DE Fermenter unit cost for the new account and cost driver with start = start of planning`, async () => { 
 | 
    // Open unit cost view 
 | 
    await appMP.viewUnitCost.switchTo(); 
 | 
    listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost; 
 | 
    // Filter by DE Fermenter 
 | 
    await appMP.formNavigation.filterByEntity('DE Fermenter', ['Europe', 'Plants', 'Denmark Plant']); 
 | 
    // Create new DE Fermenter unit cost 
 | 
    dlgUnitCost = await listUnitCost.openEditDialog(); 
 | 
    await dlgUnitCost.updateUnitCostValue('Number of units', 'Number of units', 'DE Fermenter', startOfPlanningDate); 
 | 
    const canCreate = await dlgUnitCost.clickOK(); 
 | 
    if (!canCreate) { 
 | 
      btnMessage = await dlgUnitCost.getOKButtonTooltip(); 
 | 
    } 
 | 
    expect(canCreate).toBe(true, `Should be able to create unit cost for Number of units. OK button disabled with tooltip ${btnMessage}`); 
 | 
  }); 
 | 
  
 | 
  it('Step 1 - Create unit cost for number of units cost driver from action bar', async () => { 
 | 
    // Create unit cost 
 | 
    await listUnitCost.focus(); 
 | 
    await appMP.abpData.btnCreate.click(); 
 | 
    await dlgUnitCost.waitUntilPresent(); 
 | 
    await dlgUnitCost.updateUnitCostValue('Number of units', 'Number of units', 'DE Fermenter', newDEFermenterStartDate, timeUnit, 1, 100.23); 
 | 
    expect(await dlgUnitCost.efCost.getComponentLabel()).toBe(CostLabel.euro(timeUnit), `Label of cost should be ${CostLabel.euro(timeUnit)}`); 
 | 
    const canCreate = await dlgUnitCost.clickOK(); 
 | 
    if (!canCreate) { 
 | 
      btnMessage = await dlgUnitCost.getOKButtonTooltip(); 
 | 
    } 
 | 
    expect(canCreate).toBe(true, `Should be able to create unit cost for Number of units. OK button disabled with tooltip ${btnMessage}`); 
 | 
  }); 
 | 
  
 | 
  it('Step 2 - Verify unit cost created with correct values', async () => { 
 | 
    // Verify row created with correct values in dialog 
 | 
    const previousDEDefermenter = await listUnitCost.getUnitCostRowByValues('DE Fermenter', 'Number of units', 'Number of units', startOfPlanningString); 
 | 
    const newDEDefermenter = await listUnitCost.getUnitCostRowByValues('DE Fermenter', 'Number of units', 'Number of units', newDEFermenterStartString); 
 | 
    dlgUnitCost = await listUnitCost.openEditDialog(newDEDefermenter); 
 | 
    const verifyAfterDialogFeedback = await dlgUnitCost.verifyDialogValue('Number of units', 'Number of units', 'DE Fermenter', newDEFermenterStartDate, timeUnit, 1, 100.23); 
 | 
    expect(verifyAfterDialogFeedback.length).toBe(0, verifyAfterDialogFeedback.join('. ')); 
 | 
    await dlgUnitCost.clickCancel(); 
 | 
    if (newDEDefermenter !== undefined && previousDEDefermenter !== undefined) { 
 | 
      // Verify UoM, Start, and End column value of the new row 
 | 
      expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, newDEDefermenter)).toBe(DataFoodBaseAccountUoM.EuroPerMonth, `UoM should be ${DataFoodBaseAccountUoM.EuroPerMonth}`); 
 | 
      expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, newDEDefermenter)).toBe(newDEFermenterStartString, `Start should be ${newDEFermenterStartString}`); 
 | 
      expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, newDEDefermenter)).toBe(endOfPlanningString, `End should be ${endOfPlanningString}`); 
 | 
      // Verify Start and End column value of the previous unit cost 
 | 
      expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, previousDEDefermenter)).toBe(startOfPlanningString, `Start should be ${startOfPlanningString}`); 
 | 
      expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, previousDEDefermenter)).toBe(newDEFermenterStartString, `End should be ${newDEFermenterStartString}`); 
 | 
    } else { 
 | 
      expect(newDEDefermenter).toBeDefined('New DE Fermenter should be created'); 
 | 
    } 
 | 
  }); 
 | 
  
 | 
  it(`Step 3 - Open view ${appMP.viewScenarioAnalysisCost.viewPath}. Verify cost in scenario analysis chart`, async () => { 
 | 
    // Switch to scenario analysis account view 
 | 
    await appMP.viewScenarioAnalysisCost.switchTo(); 
 | 
    await appMP.viewScenarioAnalysisCost.frmCost.drpdAccount.selectItem('Number of units'); 
 | 
    const chartValues = await appMP.viewScenarioAnalysisCost.frmCost.chartCost.getChartDataValue('DashboardChartSeriesSenarioAnalysisCostPerPeriodBaseCost', ['Number of units'], [newDEFermenterStartString]); 
 | 
    expect(chartValues[0].values[0]).toBe('100.23', `Value should be 100.23 starting from ${newDEFermenterStartString}`); 
 | 
  }); 
 | 
}); 
 |