chenqinghong
2024-05-07 3ec06a830367465068963156dcc1d8e522571c13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
 * @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' });
  });
});