| /** | 
|  * @file          ADSO-48768 - Define campaign type Quantity constraints | 
|  * @description   Create campaign type in quantity constraint | 
|  * @testCategory  Web app - Campaigns | 
|  * @author        Zan Sen (zansen.tai@3ds.com) | 
|  * @copyright     Dassault Systèmes | 
|  */ | 
|   | 
| import { AppMP, Demo, Scenario, Timeout } from '../../libmp/appmp'; | 
| import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; | 
| import { DataMetalBaseEntityName } from '../../libmp/data/data.unit'; | 
| import { DialogCampaignType } from '../../libmp/dialogs/dialog.campaigntype'; | 
| import { ListCampaignTypeContextMenuItem } from '../../libmp/forms/form.campaigntypes'; | 
| import { DataMetalBaseCampaignType, DataRadioGroupButtonSelection } from '../../libmp/data/data.campaign'; | 
| import { DurationInputHelper } from '../../libappsop/durationselectorsop'; | 
|   | 
| describe('ADSO-48768 Define campaign type Quantity constraints', () => { | 
|   const appMP = AppMP.getInstance(); | 
|   const formNavigation = appMP.formNavigation; | 
|   const viewCampaignsAndTransitions = appMP.viewCampaignsAndTransitions; | 
|   const formCampaignTypes = viewCampaignsAndTransitions.formCampaignTypes; | 
|   const listCampaignType = formCampaignTypes.listCampaignType; | 
|   | 
|   const campaignName = 'Test'; | 
|   const existingCampaignName = DataMetalBaseCampaignType.Campaignfor5XXXsmelt; | 
|   const quantity = DataRadioGroupButtonSelection.Quantity; | 
|   const duration = DataRadioGroupButtonSelection.Duration; | 
|   const meltingfurnaceQuilmes = DataMetalBaseEntityName.MeltingFurnaceQuilmes; | 
|   | 
|   let dlgCampaignType: DialogCampaignType; | 
|   | 
|   beforeAll(async () => { | 
|     // Deprecated: to be replaced with QJasmine.initGlobal(true) | 
|     jasmine.addMatchers(qCustomMatcher); | 
|     await appMP.login(); | 
|   }); | 
|   | 
|   afterAll(async () => { | 
|     // Reset views | 
|     await formNavigation.reset(); | 
|     await viewCampaignsAndTransitions.reset(); | 
|     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 Campaign types list, right click and select Create. | 
|       Verify dialog by default selected radio button = quantity, min qty = 0 and max quantity disabled. | 
|       Verify OK button disabled as Name is empty`, async () => { | 
|     [dlgCampaignType] = await listCampaignType.selectContextMenu(ListCampaignTypeContextMenuItem.Create); | 
|     await dlgCampaignType.verifyDialogValues({ QuantityOrDuration: quantity, MinQuantity: '0' }); | 
|     await dlgCampaignType.verifyDialogEnabled({ MaxQuantity: 'false' }); | 
|     await dlgCampaignType.verifyOKDisabled(); | 
|   }); | 
|   | 
|   it('Step 4 - Hover min and max quantity and verify tooltip display', async () => { | 
|     await dlgCampaignType.hoverElementVerifyTooltip({ | 
|       MinQuantity: 'Default minimum quantity to be produced during the campaign.', | 
|       MaxQuantity: 'Default maximum quantity to be produced during the campaign.', | 
|     }); | 
|   }); | 
|   | 
|   it(`Step 5 - Select unit ${meltingfurnaceQuilmes}, Campaign type Name = ${existingCampaignName} and set min quantity = 1000. | 
|       Verify OK button is disabled as campaign type name must be unique`, async () => { | 
|     await dlgCampaignType.updateDialogValues({ Unit: meltingfurnaceQuilmes, Name: existingCampaignName, MinQuantity: '1000' }); | 
|     await dlgCampaignType.verifyOKDisabled(); | 
|   }); | 
|   | 
|   it(`Step 6 - Enter Campaign type Name = ${campaignName} and set min quantity = negative number. Verify OK button is disabled as min quantity must be greater than 0`, async () => { | 
|     await dlgCampaignType.updateDialogValues({ Name: campaignName, MinQuantity: '-5' }); | 
|     await dlgCampaignType.verifyOKDisabled(); | 
|   }); | 
|   | 
|   it('Step 7 - Enter as Minimum ton: 75, verify OK button is enabled', async () => { | 
|     await dlgCampaignType.updateDialogValues({ MinQuantity: '75' }); | 
|     await dlgCampaignType.verifyOKEnabled(); | 
|   }); | 
|   | 
|   it('Step 8 - Click Enable to enable max quantity, verify OK button is disabled as maximum quantity must be greater than 0', async () => { | 
|     await dlgCampaignType.updateDialogValues({ MaxQuantity: '0' }); | 
|     await dlgCampaignType.verifyOKDisabled(); | 
|   }); | 
|   | 
|   it('Step 9 - Enter maximum quantity = 50, verify OK button is disabled as maximum must be greater than or equal to minimum', async () => { | 
|     await dlgCampaignType.updateDialogValues({ MaxQuantity: '50' }); | 
|     await dlgCampaignType.verifyOKDisabled(); | 
|   }); | 
|   | 
|   it(`Step 10 - Change the maximum quantity to 150, verify OK button is enabled, hit OK. | 
|       Verify campaign type created correctly in list and has constraint violation as no operation assigned yet`, async () => { | 
|     await dlgCampaignType.updateDialogValues({ MaxQuantity: '150' }); | 
|     await dlgCampaignType.verifyOKEnabled(); | 
|     await dlgCampaignType.clickOK(Timeout.ButtonState); | 
|   | 
|     const row = await listCampaignType.getRow({ Unit: meltingfurnaceQuilmes, Name: campaignName }); | 
|     await listCampaignType.verifyRowValues(row, { 'Default Min': '75 Ton', 'Default Max': '150 Ton' }); | 
|     await listCampaignType.verifyRowHasConstraintViolation(row); | 
|   }); | 
|   | 
|   it(`Step 11 - On row Campaign type [${campaignName}], right-click and click Edit. Verify dialog populated with name = ${campaignName}, radiobutton = ${quantity}, min qty = 75, max qty = 150 `, async () => { | 
|     const testCampaignTypeRow = await listCampaignType.getRow({ Name: campaignName }); | 
|     [dlgCampaignType] = await listCampaignType.selectContextMenu(ListCampaignTypeContextMenuItem.Edit, testCampaignTypeRow); | 
|     await dlgCampaignType.verifyDialogValues({ QuantityOrDuration: quantity, MinQuantity: '75', MaxQuantity: '150' }); | 
|   }); | 
|   | 
|   it('Step 12 - Select Duration radio button and verify min duration = 0 and max duration disabled. Verify OK disabled as min duration must be greater than 0', async () => { | 
|     await dlgCampaignType.updateDialogValues({ QuantityOrDuration: duration }); | 
|   | 
|     // Verify dialog now changed to duration UI | 
|     await dlgCampaignType.verifyDialogEnabled({ MaxDuration: 'false' }); | 
|     await dlgCampaignType.verifyDialogValues({ Unit: meltingfurnaceQuilmes, Name: campaignName, QuantityOrDuration: duration, MinDuration: '0' }); | 
|     await dlgCampaignType.verifyOKDisabled(); | 
|   }); | 
|   | 
|   it('Step 13 - Edit default min duration = 1 day. Verify Ok button is enabled', async () => { | 
|     await dlgCampaignType.updateDialogValues({ MinDuration: DurationInputHelper.getDurationString({Days: 1}) }); | 
|     await dlgCampaignType.verifyOKEnabled(); | 
|   }); | 
|   | 
|   it('Step 14 - Enable maximum duration by clicking Enable and enter 2 days and hit OK. Verify list row updated to show min = 1 day and max = 2 days', async () => { | 
|     await dlgCampaignType.updateDialogValues({ MaxDuration: DurationInputHelper.getDurationString({Days: 2}) }); | 
|     await dlgCampaignType.verifyOKEnabled(); | 
|     await dlgCampaignType.clickOK(Timeout.ButtonState); | 
|   | 
|     const row = await listCampaignType.getRow({ Unit: meltingfurnaceQuilmes, Name: campaignName }); | 
|     await listCampaignType.verifyRowValues(row, { 'Default Min': '1 day', 'Default Max': '2 days' }); | 
|   }); | 
| }); |