| /** | 
|  * @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); | 
|   }); | 
| }); |