/** 
 | 
 * @file          ADSO-10305 - Create a campaign - Follow campaign type min/max qty 
 | 
 * @description   Modify campaign type then create a campaign. 
 | 
 * @testCategory  Web app - Campaigns 
 | 
 * @author        Zan Sen (zansen.tai@3ds.com) 
 | 
 * @copyright     Dassault Systèmes 
 | 
 */ 
 | 
  
 | 
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; 
 | 
import { AppMP, Demo, Scenario } from '../../libmp/appmp'; 
 | 
import { DialogCampaign } from '../../libmp/dialogs/dialog.campaign'; 
 | 
import { DataMetalBaseEntityName } from '../../libmp/data/data.unit'; 
 | 
import { DialogCampaignType } from '../../libmp/dialogs/dialog.campaigntype'; 
 | 
import { ListCampaignContextMenuItem } from '../../libmp/forms/form.campaign'; 
 | 
import { ListCampaignTypeContextMenuItem } from '../../libmp/forms/form.campaigntypes'; 
 | 
import { DataCampaignTypeName, DataRadioGroupButtonSelection } from '../../libmp/data/data.campaign'; 
 | 
import { startOfPlanningYear } from '../../libmp/data/data.period'; 
 | 
  
 | 
describe('ADSO-10305 Create a campaign - Follow campaign type min or max qty ', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  const isVisible = 'true'; 
 | 
  const notVisible = 'false'; 
 | 
  
 | 
  // Campaign types 
 | 
  const viewCampaignsAndTransitions = appMP.viewCampaignsAndTransitions; 
 | 
  const listCampaignType = viewCampaignsAndTransitions.formCampaignTypes.listCampaignType; 
 | 
  
 | 
  // Campaign planning 
 | 
  const viewCampaign = appMP.viewCampaign; 
 | 
  const campaignPlanningListCampaign = viewCampaign.formCampaign.listCampaign; 
 | 
  
 | 
  const quantity = DataRadioGroupButtonSelection.Quantity; 
 | 
  const meltingfurnaceQuilmes = DataMetalBaseEntityName.MeltingFurnaceQuilmes; 
 | 
  const campaignfor3XXXsmelt = DataCampaignTypeName.Campaignfor3XXXsmelt; 
 | 
  
 | 
  let dlgCampaign = new DialogCampaign(); 
 | 
  let dlgCampaignType = new DialogCampaignType(); 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    // Deprecated: to be replaced with QJasmine.initGlobal(true) 
 | 
    jasmine.addMatchers(qCustomMatcher); 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.resetActiveView(viewCampaign); 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 1 - ${AppMP.getDemoDataPath(Demo.Metals, Scenario.Base)}`, async () => { 
 | 
    await appMP.createDemoDataset(Demo.Metals, Scenario.Base, false); 
 | 
  }); 
 | 
  
 | 
  it(`Step 2 - Open view "${viewCampaignsAndTransitions.viewPath}"`, async () => { 
 | 
    await viewCampaignsAndTransitions.switchTo(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 3 - On "${listCampaignType.name}" list, right click on "${campaignfor3XXXsmelt}" and select "${ListCampaignTypeContextMenuItem.Edit.Label}".`, async () => { 
 | 
    const selectedCampaignType = await listCampaignType.getRow({ Name: campaignfor3XXXsmelt }); 
 | 
    [dlgCampaignType] = await listCampaignType.selectContextMenu(ListCampaignTypeContextMenuItem.Edit, selectedCampaignType); 
 | 
  }); 
 | 
  
 | 
  it(`Step 4 - In dialog "${dlgCampaignType.name}", modify Campaign type Radio Button selection to ${quantity}`, async () => { 
 | 
    await dlgCampaignType.updateDialogValues({ QuantityOrDuration: quantity }); 
 | 
  }); 
 | 
  
 | 
  it(`Step 5 - Set Min = 1560. Max = 15600. Verify Campaign type "${DataCampaignTypeName.Campaignfor3XXXsmelt}" is updated.`, async () => { 
 | 
    await dlgCampaignType.updateDialogValues({ MinQuantity: '1560', MaxQuantity: '15600' }); 
 | 
    await dlgCampaignType.verifyOKEnabled(); 
 | 
    await dlgCampaignType.clickOK(); 
 | 
  
 | 
    // Verify updated 
 | 
    const selectedCampaignType = await listCampaignType.getRow({ Name: DataCampaignTypeName.Campaignfor3XXXsmelt }); 
 | 
    await listCampaignType.verifyRowValues(selectedCampaignType, { 'Default Min': '1560 Ton', 'Default Max': '15600 Ton' }); 
 | 
  
 | 
    // Reset view 
 | 
    await appMP.resetActiveView(viewCampaignsAndTransitions); 
 | 
  }); 
 | 
  
 | 
  it(`Step 6 - Open view "${appMP.viewCampaign.viewPath}"`, async () => { 
 | 
    await appMP.viewCampaign.switchTo(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 7 - In "${campaignPlanningListCampaign.name}" list, right click and select "${ListCampaignContextMenuItem.Create.Label}".`, async () => { 
 | 
    [dlgCampaign] = await campaignPlanningListCampaign.selectContextMenu(ListCampaignContextMenuItem.Create); 
 | 
  }); 
 | 
  
 | 
  // Datetime & Duration const for verification 
 | 
  const sop = startOfPlanningYear; 
 | 
  const jan1Sop = `1-Jan-${sop}`; 
 | 
  const jun16Sop = `16-Jun-${sop} 6:09`; 
 | 
  const jun26Sop = `26-Jun-${sop} 6:09`; 
 | 
  const durDay1 = '1 day(s) 0:00'; 
 | 
  const durDay10 = '10 day(s) 0:00'; 
 | 
  
 | 
  it(`Step 8 - In dialog "${dlgCampaign.name}", verify default values are prefilled with "${DataCampaignTypeName.Campaignfor3XXXsmelt}" default values<br> 
 | 
  Campaign type = "${DataCampaignTypeName.Campaignfor3XXXsmelt}"<br> 
 | 
  Earliest start = "${jan1Sop}"<br> 
 | 
  Input Type = "${quantity}"<br> 
 | 
  Min = "1560" ${durDay1}<br> 
 | 
  Max = "15600" ${durDay10}<br> 
 | 
  Comment = "".`, async () => { 
 | 
    await dlgCampaign.verifyDialogUIVisible({ 'Minimum quantity': isVisible, 'Maximum quantity': isVisible, 'Minimum duration': notVisible, 'Maximum duration': notVisible }); 
 | 
    await dlgCampaign.verifyDialogValues({ 
 | 
      'Campaign type': DataCampaignTypeName.Campaignfor3XXXsmelt, 
 | 
      'Earliest start': jan1Sop, 
 | 
      'Input type': quantity, 
 | 
      'Minimum quantity': '1560', 
 | 
      'Maximum quantity': '15600', 
 | 
      'Indicated Duration BasedOn MinQty': durDay1, 
 | 
      'Indicated Duration BasedOn MaxQty': durDay10, 
 | 
      Comment: '', 
 | 
    }); 
 | 
  }); 
 | 
  
 | 
  it('Step 9 - Click OK without modification.', async () => { 
 | 
    await dlgCampaign.verifyOKEnabled(); 
 | 
    await dlgCampaign.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 10 - Verify "${DataCampaignTypeName.Campaignfor3XXXsmelt}" is created on Start = "${jun16Sop}", End = "${jun26Sop}" with constraint violation.`, async () => { 
 | 
    const row = await campaignPlanningListCampaign.getRow({ Unit: meltingfurnaceQuilmes, 'Campaign type': DataCampaignTypeName.Campaignfor3XXXsmelt, Start: jun16Sop }); 
 | 
    await campaignPlanningListCampaign.verifyRowValues(row, { Start: jun16Sop, End: jun26Sop, Minimum: '1560 Ton', Maximum: '15600 Ton' }); 
 | 
    await campaignPlanningListCampaign.verifyRowHasConstraintViolation(row); 
 | 
  }); 
 | 
}); 
 |