/** 
 | 
 * @file        ADSO-11482 
 | 
 * @description Copy product assignments at optimizer puzzle copy 
 | 
 * @author      Pethaperumal Natarajan (Pethaperumal.NATARAJAN.intern@3ds.com) 
 | 
 * @copyright   Dassault Systèmes 
 | 
 */ 
 | 
  
 | 
import { AppMP, Demo, Scenario } from '../../libmp/appmp'; 
 | 
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; 
 | 
import { StepActionBarScenarioSelection } from '../../libmp/actionbarpages/abp.scenarioselection'; 
 | 
import { DialogOptimizerPuzzles, DialogOptimizerPuzzlesField, ListManageContents, ListManageContentsColumn, ListManageContentsProduct, ListManageContentsProductContextMenuItems, PanelManageContents } from '../../libmp/dialogs/optimizerpuzzles'; 
 | 
import { StepList } from '../../libappsop/listsop'; 
 | 
import { StepDialog } from '../../libappsop/dialogsop'; 
 | 
import { ListOptimizerPuzzles, ListOptimizerPuzzlesColumn, ListOptimizerPuzzlesContextMenuItem, ListOptimizerPuzzlesOnDrawImage } from '../../libmp/forms/form.optimizerpuzzles'; 
 | 
import { dataFoodProducts, dataFoodProductsProvider } from '../../libmp/data/data.product'; 
 | 
import { DataOptimizerPuzzleManageContent } from '../../libmp/data/data.optimizerpuzzle'; 
 | 
  
 | 
describe('ADSO-11482 - Copy product assignments at optimizer puzzle copy', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  const abpScenarioSelection = appMP.abpScenarioSelection; 
 | 
  const listOptimizerPuzzles = appMP.abpScenarioSelection.formOptimizerPuzzles.listOptimizerPuzzles; 
 | 
  let dlgOptimizerPuzzles: DialogOptimizerPuzzles; 
 | 
  let listManageContents: ListManageContents; 
 | 
  let listManageContentsProducts: ListManageContentsProduct; 
 | 
  
 | 
  const inputPuzzle: DialogOptimizerPuzzlesField = { Name: 'My Puzzle', Description: 'My Description' }; 
 | 
  const rowListManageContentsProduct: ListManageContentsColumn = { Name: DataOptimizerPuzzleManageContent.Products }; 
 | 
  
 | 
  const rowMyPuzzle: ListOptimizerPuzzlesColumn = { Name: 'My Puzzle', Description: 'My Description' }; 
 | 
  const imageRedCross = ListOptimizerPuzzlesOnDrawImage.FullyExcluded; 
 | 
  const imageGrayCheck = ListOptimizerPuzzlesOnDrawImage.PartiallyIncluded; 
 | 
  const imageGreenCheck = ListOptimizerPuzzlesOnDrawImage.FullyIncluded; 
 | 
  const imageDots = ListOptimizerPuzzlesOnDrawImage.MixIncludedExcluded; 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    jasmine.addMatchers(qCustomMatcher); 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 1 - ${AppMP.getDemoDataPath(Demo.Food, Scenario.Base)}`, async () => { 
 | 
    await appMP.createDemoDataset(Demo.Food, Scenario.Base, true); // Need wait optimizer finish to enable the Optimizer button else we cannot click to show opt puzzle form 
 | 
  }); 
 | 
  
 | 
  it(`Step 2 - ${StepActionBarScenarioSelection.toggleOptimizerPuzzles(true)}`, async () => { 
 | 
    await abpScenarioSelection.toggleOptimizerPuzzles(true); 
 | 
  }); 
 | 
  
 | 
  it(`Step 3 - ${StepList.rightClickSelectMenu(ListOptimizerPuzzles.title, ListOptimizerPuzzlesContextMenuItem.Create.Label)}`, async () => { 
 | 
    [dlgOptimizerPuzzles] = await listOptimizerPuzzles.selectContextMenu(ListOptimizerPuzzlesContextMenuItem.Create); 
 | 
  }); 
 | 
  
 | 
  it(`Step 4 - ${StepDialog.updateDialogValues(DialogOptimizerPuzzles.title, inputPuzzle)}`, async () => { 
 | 
    await dlgOptimizerPuzzles.updateDialogValues(inputPuzzle); 
 | 
  }); 
 | 
  
 | 
  it(`Step 5 - ${StepDialog.clickTab(PanelManageContents.title)} ${StepList.selectRow(ListManageContents.title, rowListManageContentsProduct)}`, async () => { 
 | 
    await dlgOptimizerPuzzles.panelManageContents.switchTo(); 
 | 
    listManageContents = dlgOptimizerPuzzles.panelManageContents.listManageContents; 
 | 
    await listManageContents.selectRow(rowListManageContentsProduct); 
 | 
  }); 
 | 
  
 | 
  it(`Step 6 - ${StepList.selectRowAndClickMenu(ListManageContentsProduct.title, { Name: dataFoodProducts.Greek.Name }, ListManageContentsProductContextMenuItems.Exclude.Label)} ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.Greek.Name }, imageRedCross)}`, async () => { 
 | 
    listManageContentsProducts = dlgOptimizerPuzzles.panelManageContents.listManageContentsProduct; 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.Greek]); 
 | 
    await listManageContentsProducts.selectContextMenu(ListManageContentsProductContextMenuItems.Exclude, row); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageRedCross); 
 | 
  }); 
 | 
  
 | 
  it(`Step 7 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.AllProducts.Name }, imageGrayCheck)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.AllProducts]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageGrayCheck); 
 | 
  }); 
 | 
  
 | 
  it(`Step 8 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.FinishedGoods.Name }, imageGrayCheck)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.FinishedGoods]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageGrayCheck); 
 | 
    await row.collapseRow(); // Collapse to have bigger screen space to prevent error moving up/down in list 
 | 
  }); 
 | 
  
 | 
  it(`Step 9 - ${StepList.selectRowAndClickMenu(ListManageContentsProduct.title, { Name: dataFoodProducts.Strawberry.Name }, ListManageContentsProductContextMenuItems.Exclude.Label)} ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.Strawberry.Name }, imageRedCross)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.Strawberry]); 
 | 
    await listManageContentsProducts.selectContextMenu(ListManageContentsProductContextMenuItems.Exclude, row); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageRedCross); 
 | 
  }); 
 | 
  
 | 
  it(`Step 10 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.RawMaterials.Name }, imageGrayCheck)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.RawMaterials]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageGrayCheck); 
 | 
  }); 
 | 
  
 | 
  it(`Step 11 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.Flavoring.Name }, imageGrayCheck)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.Flavoring]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageGrayCheck); 
 | 
  }); 
 | 
  
 | 
  it(`Step 12 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.Vanilla.Name }, imageGreenCheck)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.Vanilla]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageGreenCheck); 
 | 
  }); 
 | 
  
 | 
  it(`Step 13 - ${StepList.verifyRowHasOnDrawImage(ListManageContents.title, rowListManageContentsProduct, imageDots)}`, async () => { 
 | 
    const row = await listManageContents.getRow(rowListManageContentsProduct); 
 | 
    await listManageContents.verifyRowHasOnDrawImage(row, imageDots); 
 | 
  }); 
 | 
  
 | 
  it(`Step 14 - ${StepDialog.clickOK()}`, async () => { 
 | 
    await dlgOptimizerPuzzles.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 15 - ${StepList.selectRowAndClickMenu(ListOptimizerPuzzles.title, rowMyPuzzle, ListOptimizerPuzzlesContextMenuItem.Copy.Label)}`, async () => { 
 | 
    const row = await listOptimizerPuzzles.getRow(rowMyPuzzle); 
 | 
    await listOptimizerPuzzles.selectContextMenu(ListOptimizerPuzzlesContextMenuItem.Copy, row); 
 | 
  }); 
 | 
  
 | 
  it(`Step 16 - ${StepDialog.clickTab(PanelManageContents.title)} ${StepList.selectRow(ListManageContents.title, rowListManageContentsProduct)}`, async () => { 
 | 
    await dlgOptimizerPuzzles.panelManageContents.switchTo(); 
 | 
    await listManageContents.selectRow(rowListManageContentsProduct); 
 | 
  }); 
 | 
  
 | 
  it(`Step 17 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.Greek.Name }, imageRedCross)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.Greek]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageRedCross); 
 | 
  }); 
 | 
  
 | 
  it(`Step 18 - ${StepList.verifyRowHasOnDrawImage(ListManageContentsProduct.title, { Name: dataFoodProducts.Strawberry.Name }, imageRedCross)}`, async () => { 
 | 
    const row = await listManageContentsProducts.getRow([dataFoodProductsProvider, dataFoodProducts.Strawberry]); 
 | 
    await listManageContentsProducts.verifyRowHasOnDrawImage(row, imageRedCross); 
 | 
  }); 
 | 
  
 | 
  it(`Step 19 - ${StepDialog.clickCancel()}`, async () => { 
 | 
    await dlgOptimizerPuzzles.clickCancel(); 
 | 
  }); 
 | 
}); 
 |