/** 
 | 
 * @file        ADSO-9879 ADSO-9882 ADSO-9881 
 | 
 * @description Create, edit and delete (CRUD) external supply 
 | 
 * @author      Chan Clarence (ccn7@3ds.com) 
 | 
 * @copyright   Dassault Systèmes 
 | 
 */ 
 | 
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; 
 | 
import { AppMP, Demo, Scenario } from '../../libmp/appmp'; 
 | 
import { StepDialog } from '../../libappsop/dialogsop'; 
 | 
import { StepList } from '../../libappsop/listsop'; 
 | 
import { DialogExternalSupply, DialogExternalSupplyFields } from '../../libmp/dialogs/dialog.externalsupply'; 
 | 
import { DialogProduct, DialogProductFields } from '../../libmp/dialogs/dialog.product'; 
 | 
import { ListExternalSuppliesColumn, ListExternalSuppliesContextMenuItem } from '../../libmp/forms/form.externalsupplies'; 
 | 
import { ListEntity, ListProduct, StepNavigationPanel } from '../../libmp/forms/navigationpanel/form.navigationpanel'; 
 | 
import { ListProductContextMenuItem } from '../../libmp/forms/form.product'; 
 | 
import { DataFoodBaseEntityName, DataLowFatStrawberry12 } from '../../libmp/data/data.navigation'; 
 | 
import { startOfPlanningYear } from '../../libmp/data/data.period'; 
 | 
  
 | 
describe('ADSO-9879 ADSO-9882 ADSO-9881 - Create, edit and delete (CRUD) external supply', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  const listNavEntity = appMP.formNavigation.listEntity; 
 | 
  const listNavProduct = appMP.formNavigation.listProduct; 
 | 
  const listProduct = appMP.viewProduct.frmProduct.listProduct; 
 | 
  const listExternalSupply = appMP.viewExternalSupplies.formExternalSupplies.listExternalSupplies; 
 | 
  let dlgProduct: DialogProduct; 
 | 
  let dlgExternalSupply: DialogExternalSupply; 
 | 
  const updateProductShelfLife: DialogProductFields = { ShelfLifeEnabled: 'true', ShelfLife: '60' }; 
 | 
  const defaultExtSupplyValues: DialogExternalSupplyFields = { StockingPoint: DataFoodBaseEntityName.DCAustria, Product: DataLowFatStrawberry12.name }; 
 | 
  const updateExtSupplyValues: DialogExternalSupplyFields = { Date: `3-Feb-${startOfPlanningYear}`, ManufacturedDate: `2-Feb-${startOfPlanningYear}`, Quantity: '123' }; 
 | 
  const updateExtSupplyValues2: DialogExternalSupplyFields = { Date: `13-Feb-${startOfPlanningYear}`, ManufacturedDate: `12-Feb-${startOfPlanningYear}`, Quantity: '999', Description: 'Edit created external supply' }; 
 | 
  const verifyCreatedExtSupplyValues: DialogExternalSupplyFields = { ...defaultExtSupplyValues, ...updateExtSupplyValues }; // Combine both object values 
 | 
  const listVerifyValues: ListExternalSuppliesColumn = { Date: `3-Feb-${startOfPlanningYear}`, 'Stocking point': DataFoodBaseEntityName.DCAustria, Product: DataLowFatStrawberry12.name, Quantity: '123.00' }; 
 | 
  const listVerifyValues2: ListExternalSuppliesColumn = { Date: `13-Feb-${startOfPlanningYear}`, 'Stocking point': DataFoodBaseEntityName.DCAustria, Product: DataLowFatStrawberry12.name, Quantity: '999.00', Description: 'Edit created external supply' }; 
 | 
  // Delete steps 
 | 
  let rowCount = 0; 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    jasmine.addMatchers(qCustomMatcher); 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.formNavigation.reset(); 
 | 
    await appMP.resetActiveView(appMP.viewExternalSupplies); 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  describe('ADSO-9879 - Create external supply', () => { 
 | 
    it(`Step 1 - ${AppMP.getDemoDataPath(Demo.Food, Scenario.Base)}`, async () => { 
 | 
      await appMP.createDemoDataset(Demo.Food, Scenario.Base, false); 
 | 
    }); 
 | 
  
 | 
    it(`Step 2 - Open view ${appMP.viewProduct.viewPath}.`, async () => { 
 | 
      await appMP.viewProduct.switchTo(); 
 | 
    }); 
 | 
  
 | 
    it(`Step 3 - ${StepList.selectRowAndClickMenu(ListProduct.title, {Name: DataLowFatStrawberry12.name}, ListProductContextMenuItem.Edit.Label)}`, async () => { 
 | 
      const row = await listProduct.getRow({Name: DataLowFatStrawberry12.name}, DataLowFatStrawberry12.parents); 
 | 
      [dlgProduct] = await listProduct.selectContextMenu(ListProductContextMenuItem.Edit, row); 
 | 
    }); 
 | 
  
 | 
    it(`Step 4 - ${StepDialog.clickTab(DialogProduct.tabAdvancedTitle)} ${StepDialog.updateDialogValues(DialogProduct.title, updateProductShelfLife)} ${StepDialog.clickOK()}`, async () => { 
 | 
      await dlgProduct.pnlAdvanced.clickTab(); 
 | 
      await dlgProduct.updateDialogValues(updateProductShelfLife); 
 | 
      await dlgProduct.clickOK(); 
 | 
  
 | 
      await appMP.resetActiveView(appMP.viewProduct); 
 | 
    }); 
 | 
  
 | 
    it(`Step 5 - Open view ${appMP.viewExternalSupplies.viewPath}.`, async () => { 
 | 
      await appMP.viewExternalSupplies.switchTo(); 
 | 
    }); 
 | 
  
 | 
    it(`Step 6 - ${StepNavigationPanel.showEntitiesList()} ${StepNavigationPanel.showProductsList()}`, async () => { 
 | 
      await appMP.formNavigation.toggleEntityList(true); 
 | 
      await appMP.formNavigation.toggleProductList(true); 
 | 
    }); 
 | 
  
 | 
    it(`Step 7 - ${StepList.expandRowInList(ListEntity.title, DataFoodBaseEntityName.Europe)} ${StepList.expandRowInList(ListProduct.title, DataLowFatStrawberry12.parents)}`, async () => { 
 | 
      const europe = await listNavEntity.getEntityRowByName(DataFoodBaseEntityName.Europe); 
 | 
      await europe.expandRow(); 
 | 
  
 | 
      await listNavProduct.expandRow({Name: DataLowFatStrawberry12.name}, DataLowFatStrawberry12.parents); 
 | 
    }); 
 | 
  
 | 
    it(`Step 8 - ${StepNavigationPanel.checkStockingPoints([DataFoodBaseEntityName.DCAustria])} ${StepNavigationPanel.checkProducts([DataLowFatStrawberry12.name])}`, async () => { 
 | 
      const dcAustria = await listNavEntity.getEntityRowByName(DataFoodBaseEntityName.DCAustria, [DataFoodBaseEntityName.Europe]); 
 | 
      await listNavEntity.toggleRowCheckbox(dcAustria, true); 
 | 
  
 | 
      const strawberry12pk = await listNavProduct.getRow({Name: DataLowFatStrawberry12.name}, DataLowFatStrawberry12.parents); 
 | 
      await listNavProduct.toggleRowCheckbox(strawberry12pk, true); 
 | 
    }); 
 | 
  
 | 
    it(`Step 9 - ${StepList.rightClickSelectMenu(listExternalSupply.title, ListExternalSuppliesContextMenuItem.Create.Label)}`, async () => { 
 | 
      [dlgExternalSupply] = await listExternalSupply.selectContextMenu(ListExternalSuppliesContextMenuItem.Create); 
 | 
    }); 
 | 
  
 | 
    it(`Step 10 - ${StepDialog.verifyDialogValues(DialogExternalSupply.title, defaultExtSupplyValues)}`, async () => { 
 | 
      await dlgExternalSupply.verifyDialogValues(defaultExtSupplyValues); 
 | 
    }); 
 | 
  
 | 
    it(`Step 11 - ${StepDialog.updateDialogValues(DialogExternalSupply.title, updateExtSupplyValues)} ${StepDialog.clickOK()}`, async () => { 
 | 
      await dlgExternalSupply.updateDialogValues(updateExtSupplyValues); 
 | 
      await dlgExternalSupply.clickOK(); 
 | 
    }); 
 | 
  
 | 
    it(`Step 12 - ${StepList.verifyRowExists(listExternalSupply.title, listVerifyValues)}`, async () => { 
 | 
      await listExternalSupply.verifyRowExists(listVerifyValues); 
 | 
    }); 
 | 
  
 | 
    it(`Step 13 - ${StepList.focusListClickActionButton(listExternalSupply.title, 'Create')}`, async () => { 
 | 
      dlgExternalSupply = await listExternalSupply.clickActionButton(appMP.abpInventory.btnCreate); 
 | 
    }); 
 | 
  
 | 
    it(`Step 14 - ${StepDialog.verifyDialogValues(DialogExternalSupply.title, defaultExtSupplyValues)} ${StepDialog.clickCancel()}`, async () => { 
 | 
      await dlgExternalSupply.verifyDialogValues(defaultExtSupplyValues); 
 | 
      await dlgExternalSupply.clickCancel(); 
 | 
    }); 
 | 
  }); 
 | 
  
 | 
  describe('ADSO-9882 - Edit external supply', () => { 
 | 
    it(`Step 1 - ${StepList.selectRowAndClickMenu(listExternalSupply.title, listVerifyValues, ListExternalSuppliesContextMenuItem.Edit.Label)}`, async () => { 
 | 
      // Edit the created external supply in ADSO-9879 
 | 
      const row = await listExternalSupply.getRow(listVerifyValues); 
 | 
      [dlgExternalSupply] = await listExternalSupply.selectContextMenu(ListExternalSuppliesContextMenuItem.Edit, row); 
 | 
    }); 
 | 
  
 | 
    it(`Step 2 - ${StepDialog.verifyDialogValues(DialogExternalSupply.title, verifyCreatedExtSupplyValues)}`, async () => { 
 | 
      await dlgExternalSupply.verifyDialogValues(verifyCreatedExtSupplyValues); 
 | 
    }); 
 | 
  
 | 
    it(`Step 3 - ${StepDialog.updateDialogValues(DialogExternalSupply.title, updateExtSupplyValues2)} ${StepDialog.clickOK()}`, async () => { 
 | 
      await dlgExternalSupply.updateDialogValues(updateExtSupplyValues2); 
 | 
      await dlgExternalSupply.clickOK(); 
 | 
    }); 
 | 
  
 | 
    it(`Step 4 - ${StepList.verifyRowExists(listExternalSupply.title, listVerifyValues2)}`, async () => { 
 | 
      await listExternalSupply.verifyRowExists(listVerifyValues2); 
 | 
    }); 
 | 
  }); 
 | 
  
 | 
  describe('ADSO-9881 - Delete external supply', () => { 
 | 
    it(`Step 1 - ${StepList.selectRowNumAndClickMenu(listExternalSupply.title, 1, ListExternalSuppliesContextMenuItem.Delete.Label)}`, async () => { 
 | 
      rowCount = await listExternalSupply.getRowCount(); 
 | 
  
 | 
      const rowToDelete = await listExternalSupply.getRowByIndex(0); 
 | 
      await listExternalSupply.selectContextMenu(ListExternalSuppliesContextMenuItem.Delete, rowToDelete); 
 | 
    }); 
 | 
  
 | 
    it(`Step 2 - ${StepList.verifyRowDeleted(listExternalSupply.title)}`, async () => { 
 | 
      await listExternalSupply.verifyTotalRow(rowCount - 1, 'Expect total row decrease by 1 as we remove the first row via list menu.'); 
 | 
    }); 
 | 
  
 | 
    it(`Step 3 - ${StepList.selectRowNumAndClickActionButton(listExternalSupply.title, 1, 'Delete')}`, async () => { 
 | 
      await listExternalSupply.selectListRowsByIndex([0]); 
 | 
      await listExternalSupply.clickActionButton(appMP.abpInventory.btnDelete, undefined, await listExternalSupply.getRowByIndex(0)); 
 | 
    }); 
 | 
  
 | 
    it(`Step 4 - ${StepList.verifyRowDeleted(listExternalSupply.title)}`, async () => { 
 | 
      await listExternalSupply.verifyTotalRow(rowCount - 2, 'Expect total row decrease by 1 as we remove the first row via action bar button.'); 
 | 
    }); 
 | 
  }); 
 | 
}); 
 |