/** 
 | 
 * @file        ADSO-10113 
 | 
 * @description Batch edit cost of unit cost 
 | 
 * @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 { 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-10113 - Batch edit cost of unit cost', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  let listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost; 
 | 
  let dlgUnitCost = listUnitCost.dlgUnitCost; 
 | 
  const account = DataFoodBaseUnitCost.Account; 
 | 
  const costDriver = DataFoodBaseUnitCost.CostDriver; 
 | 
  const unit = DataFoodBaseEntityName.DEFermenter; 
 | 
  const uom = DataFoodBaseUnitCost.UoM; 
 | 
  const firstUnitCostStart = `1-Jan-${startOfPlanningYear - 1}`; 
 | 
  const secondUnitCostStart = `1-Jan-${startOfPlanningYear}`; 
 | 
  let secondUnitCostEnd = ''; 
 | 
  const editedCost = DataFoodBaseUnitCost.EditCost; 
 | 
  
 | 
  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.viewUnitCost.viewPath}. Verify 1 ${unit} exist with ${firstUnitCostStart} as start date`, async () => { 
 | 
    // Open unit cost view 
 | 
    await appMP.viewUnitCost.switchTo(); 
 | 
    listUnitCost = appMP.viewUnitCost.frmUnitCost.listUnitCost; 
 | 
    // 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 unitCostRow = await listUnitCost.getRowByIndex(0); 
 | 
    const unitCostStart = await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, unitCostRow); 
 | 
    expect(unitCostStart).toBe(firstUnitCostStart, `Start of the ${unit} unit cost should be ${firstUnitCostStart}`); 
 | 
  }); 
 | 
  
 | 
  it(`Setup - Create a new ${unit} unit cost with different cost and start value`, async () => { 
 | 
    // Create new DE Fermenter unit cost 
 | 
    dlgUnitCost = await listUnitCost.openEditDialog(); 
 | 
    await dlgUnitCost.updateUnitCostValue(account, costDriver, unit, new Date(secondUnitCostStart)); 
 | 
    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}`); 
 | 
    const unitCostRow = await listUnitCost.getUnitCostRowByValues(unit, account, costDriver, secondUnitCostStart); 
 | 
    expect(unitCostRow).toBeDefined(`New created ${unit} Unit Cost row with start date ${secondUnitCostStart} should be found`); 
 | 
    if (unitCostRow !== undefined) { 
 | 
      secondUnitCostEnd = await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, unitCostRow); 
 | 
    } 
 | 
  }); 
 | 
  
 | 
  it('Step 1 - Open batch edit unit cost dialog and verify the fields', async () => { 
 | 
    // Open batch edit dialog 
 | 
    const rows = await listUnitCost.getAllRows(); 
 | 
    dlgUnitCost = await listUnitCost.openEditDialog(rows); 
 | 
    // Verify all field disabled 
 | 
    expect(await dlgUnitCost.ddlAccount.isDisabled()).toBe(true, 'Account drop down list should be disabled'); 
 | 
    expect(await dlgUnitCost.ddlCostDriver.isDisabled()).toBe(true, 'Cost driver drop down list should be disabled'); 
 | 
    expect(await dlgUnitCost.ddlUnit.isDisabled()).toBe(true, 'Unit drop down list should be disabled'); 
 | 
    expect(await dlgUnitCost.dtsStart.isDisabled()).toBe(true, 'Start date time selector should be disabled'); 
 | 
    expect(await dlgUnitCost.ddlTimeUnit.isDisabled()).toBe(true, 'Time unit drop down list should be disabled'); 
 | 
    expect(await dlgUnitCost.efLengthOfTime.isDisabled()).toBe(true, 'Length of time field should be disabled'); 
 | 
    expect(await dlgUnitCost.efCost.isDisabled()).toBe(true, 'Cost field should be disabled'); 
 | 
    // Verify checkbox to enable edit time unit, length of time, and cost are exist and unchecked 
 | 
    expect(await dlgUnitCost.cbBatchEditTimeUnit.isVisible()).toBe(true, 'Time unit checkbox should be visible in the dialog'); 
 | 
    expect(await dlgUnitCost.cbBatchEditTimeUnit.isChecked()).toBe(false, 'Time unit checkbox should be unchecked by default'); 
 | 
    expect(await dlgUnitCost.cbBatchEditLengthOfTime.isVisible()).toBe(true, 'Length of time checkbox should be visible in the dialog'); 
 | 
    expect(await dlgUnitCost.cbBatchEditLengthOfTime.isChecked()).toBe(false, 'Length of time checkbox should be unchecked by default'); 
 | 
    expect(await dlgUnitCost.cbBatchEditCost.isVisible()).toBe(true, 'Cost checkbox should be visible in the dialog'); 
 | 
    expect(await dlgUnitCost.cbBatchEditCost.isChecked()).toBe(false, 'Cost checkbox should be unchecked by default'); 
 | 
  }); 
 | 
  
 | 
  it('Step 2 - Batch edit cost value and verify the changes', async () => { 
 | 
    // Enable and edit cost 
 | 
    await dlgUnitCost.toggleBatchEditCostCheckbox(true); 
 | 
    expect(await dlgUnitCost.cbBatchEditCost.isChecked()).toBe(true, 'Cost field should be checked'); 
 | 
    expect(await dlgUnitCost.efCost.isDisabled()).toBe(false, 'Cost field should be enabled after checkbox is checked'); 
 | 
    await dlgUnitCost.efCost.sendInput(editedCost); 
 | 
    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 cost updated for both unit cost, while all other values remain unchanged', async () => { 
 | 
    // Verify cost updated for both unit cost in list 
 | 
    const firstUnitCost = await listUnitCost.getRowByIndex(0); 
 | 
    const secondUnitCost = await listUnitCost.getRowByIndex(1); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Cost, firstUnitCost)).toBe(editedCost, 'Cost of first unit cost should be updated to 999'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Cost, secondUnitCost)).toBe(editedCost, 'Cost of second unit cost should be updated to 999'); 
 | 
  
 | 
    // Verify other values remain unchanged for first unit cost 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Unit, firstUnitCost)).toBe(unit, 'Unit of first unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Account, firstUnitCost)).toBe(account, 'Account of first unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.CostDriver, firstUnitCost)).toBe(costDriver, 'Cost driver of first unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, firstUnitCost)).toBe(uom, 'UoM of first unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, firstUnitCost)).toBe(firstUnitCostStart, 'Start of first unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, firstUnitCost)).toBe(secondUnitCostStart, 'End of first unit cost should remain unchanged'); 
 | 
    // Verify other values remain unchanged for second unit cost 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Unit, secondUnitCost)).toBe(unit, 'Unit of second unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Account, secondUnitCost)).toBe(account, 'Account of second unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.CostDriver, secondUnitCost)).toBe(costDriver, 'Cost driver of second unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, secondUnitCost)).toBe(uom, 'UoM of second unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, secondUnitCost)).toBe(secondUnitCostStart, 'Start of second unit cost should remain unchanged'); 
 | 
    expect(await listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, secondUnitCost)).toBe(secondUnitCostEnd, 'End of second unit cost should remain unchanged'); 
 | 
  }); 
 | 
}); 
 |