itemengine-cypress-automation 1.0.131-updateILCrepo6March-02c78d1.0 → 1.0.132

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/cypress/e2e/ILC/AudioResponseNew/barRecorderStyle.smoke.js +3 -6
  2. package/cypress/e2e/ILC/AudioResponseNew/compactRecorderStyle.smoke.js +2 -4
  3. package/cypress/e2e/ILC/AudioResponseNew/standardRecorderStyle.smoke.js +3 -7
  4. package/cypress/e2e/ILC/EssayResponse/essayResponseCustomizeFormattingOptions1.smoke.js +2 -0
  5. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/additionalSettings.js +154 -0
  6. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/dropzoneAlternateAnswerPopup.js +170 -0
  7. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/dropzoneSettings.js +335 -0
  8. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/editTabBasicSection.js +142 -0
  9. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/headerSection.js +76 -0
  10. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/minimumScoringPenaltyPointsAndRoundingDropdown.js +194 -0
  11. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +8 -8
  12. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/studentViewSettings.js +341 -0
  13. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/studentViewSettingsForGroupedLayout.js +241 -0
  14. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/allOrNothingForAllView.smoke.js +1 -1
  15. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/studentViewSettingsForGroupedLayout.js +3 -3
  16. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +350 -0
  17. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToCorrectPoints.js +356 -0
  18. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +402 -0
  19. package/cypress/e2e/ILC/Graphing/previewContentsForAllViews.smoke.js +4 -4
  20. package/cypress/e2e/ILC/SimpleCalculator/editTabFunctionality.js +242 -0
  21. package/cypress/e2e/ILC/TextEntryMath/allOrNothingBasicForAllViews.smoke.js +11 -16
  22. package/cypress/e2e/ILC/TextEntryMath/checkAnswerFunctionalityForAllViews.smoke.js +4 -6
  23. package/cypress/e2e/ILC/TextEntryMath/previewContentsForAllViews.smoke.js +3 -4
  24. package/cypress/fixtures/theme/ilc.json +2 -0
  25. package/cypress/pages/audioResponsePage.js +1 -1
  26. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +1 -1
  27. package/cypress/pages/components/correctIncorrectAnswerLabelComponent.js +1 -1
  28. package/cypress/pages/components/fillInTheGapsDragAndDropCommonComponents.js +35 -5
  29. package/cypress/pages/components/imageCanvasComponent.js +1 -1
  30. package/cypress/pages/components/index.js +2 -1
  31. package/cypress/pages/components/questionInputFieldComponent.js +31 -0
  32. package/cypress/pages/components/responseAreaSettingsPopupComponent.js +74 -0
  33. package/cypress/pages/drawingResponsePage.js +1 -1
  34. package/cypress/pages/fillInTheGapsDragAndDropPage.js +318 -62
  35. package/cypress/pages/fillInTheGapsOverImageDragAndDropPage.js +2 -26
  36. package/cypress/pages/fillInTheGapsOverImageDropdownPage.js +24 -1
  37. package/cypress/pages/simpleCalculatorPage.js +140 -10
  38. package/cypress/pages/textEntryMathPage.js +3 -2
  39. package/package.json +2 -2
@@ -0,0 +1,74 @@
1
+ const selectors = {
2
+ responseAreaSettingsWidthLabel: () => cy.get('[class*="InputNumberFieldstyle__NumberFieldWrapper"] .input-label-fields').eq(0),
3
+ responseAreaSettingsWidthInputField: () => cy.get('[class*="InputNumberFieldstyle__NumberFieldWrapper"] input').eq(0),
4
+ responseAreaSettingsHeightLabel: () => cy.get('[class*="InputNumberFieldstyle__NumberFieldWrapper"] .input-label-fields').eq(1),
5
+ responseAreaSettingsHeightInputField: () => cy.get('[class*="InputNumberFieldstyle__NumberFieldWrapper"] input').eq(1),
6
+ responseAreaSettingsCancelButton: () => cy.get('[class*="ResponseSettingsPopupstyles__PopupActionButtons"] button').eq(0),
7
+ responseAreaSettingsOkButton: () => cy.get('[class*="ResponseSettingsPopupstyles__PopupActionButtons"] button').eq(1),
8
+ }
9
+
10
+ const steps = {
11
+ /**
12
+ * Verify response area settings width input field value
13
+ * @param {number} width Value of width input field in response area settings popup
14
+ */
15
+ verifyResponseAreaSettingsWidthInputFieldValue: (width) => {
16
+ responseAreaSettingsPopupComponent.responseAreaSettingsWidthInputField()
17
+ .should('have.value', width);
18
+ },
19
+
20
+ verifyMinimumValueOfWidthAndHeightInputFields: () => {
21
+ responseAreaSettingsPopupComponent.responseAreaSettingsWidthInputField()
22
+ .parent()
23
+ .should('have.attr', 'minallowed', '80');
24
+ responseAreaSettingsPopupComponent.responseAreaSettingsHeightInputField()
25
+ .parent()
26
+ .should('have.attr', 'minallowed', '32');
27
+ },
28
+
29
+ /**
30
+ * Verify response area settings height input field value
31
+ * @param {number} height Value of height input field in response area settings popup
32
+ */
33
+ verifyResponseAreaSettingsHeightInputFieldValue: (height) => {
34
+ responseAreaSettingsPopupComponent.responseAreaSettingsHeightInputField()
35
+ .should('have.value', height)
36
+ },
37
+
38
+ clickOnResponseAreaSettingsCancelButton: () => {
39
+ responseAreaSettingsPopupComponent.responseAreaSettingsCancelButton()
40
+ .click();
41
+ },
42
+
43
+ clickOnResponseAreaSettingsOkButton: () => {
44
+ responseAreaSettingsPopupComponent.responseAreaSettingsOkButton()
45
+ .click();
46
+ },
47
+
48
+ /**
49
+ * @description Add input to width input field
50
+ * @param {number} width Input to be given to width input field
51
+ */
52
+ addInputToWidthInputField: (width) => {
53
+ responseAreaSettingsPopupComponent.responseAreaSettingsWidthInputField()
54
+ .clear()
55
+ .type(width)
56
+ .blur();
57
+ },
58
+
59
+ /**
60
+ * @description Add input to height input field
61
+ * @param {number} height Input to be given to height input field
62
+ */
63
+ addInputToHeightInputField: (height) => {
64
+ responseAreaSettingsPopupComponent.responseAreaSettingsHeightInputField()
65
+ .clear()
66
+ .type(height)
67
+ .blur();
68
+ },
69
+ }
70
+
71
+ export const responseAreaSettingsPopupComponent = {
72
+ ...selectors,
73
+ steps
74
+ }
@@ -356,7 +356,7 @@ const steps = {
356
356
  verifySelectedColorLabelAndSelectedColorBlock: () => {
357
357
  utilities.verifyInnerText(drawingResponsePage.colorPalleteSelectedColorLabel(), 'Selected color');
358
358
  utilities.verifyElementVisibilityState(drawingResponsePage.colorPalleteSelectedColorLabel(), 'visible');
359
- utilities.verifyElementVisibilityState(drawingResponsePage.colorPalleteSelectedColorBlock(), 'visible');
359
+ utilities.verifyElementVisibilityState(drawingResponsePage.colorPalleteSelectedColorBlock(), 'exist');
360
360
  },
361
361
 
362
362
  /**
@@ -1,7 +1,7 @@
1
1
  import constants from "../fixtures/constants";
2
2
  import utilities from "../support/helpers/utilities";
3
3
  const css = Cypress.env('css');
4
- import { createQuestionBasePage, optionsWrapperComponent, autoScoredScoringPreviewTab, scoringSectionBaseEditTab, questionInputFieldComponent, fillInTheGapsDragAndDropCommonComponents, correctIncorrectAnswerLabelComponent, questionInstructionsComponent, autoScoredStudentViewSettings, ckEditorToolbar, equationEditorFlyout, draggableOptionContainer, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, commonComponents, draggableOptionsSectionComponent } from "./components"
4
+ import { createQuestionBasePage, optionsWrapperComponent, autoScoredScoringPreviewTab, scoringSectionBaseEditTab, questionInputFieldComponent, fillInTheGapsDragAndDropCommonComponents, correctIncorrectAnswerLabelComponent, questionInstructionsComponent, autoScoredStudentViewSettings, ckEditorToolbar, equationEditorFlyout, draggableOptionContainer, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, commonComponents, draggableOptionsSectionComponent, studentViewSettingsLabelComponent, randomizeOptionsComponent, enableOuterBorderComponent, allowMultipleInstancesOfSameDraggableOptionComponent, additionalSettingsPanel, responseAreaSettingsPopupComponent } from "./components"
5
5
 
6
6
  //TODO update option container selectors when https://redmine.zeuslearning.com/issues/563159 is resolved
7
7
  const selectors = {
@@ -16,23 +16,39 @@ const selectors = {
16
16
  ...commonComponents,
17
17
  ...autoScoredScoringPreviewTab,
18
18
  ...correctIncorrectAnswerLabelComponent,
19
-
19
+ ...randomizeOptionsComponent,
20
+ ...enableOuterBorderComponent,
21
+ ...responseAreaSettingsPopupComponent,
22
+ ...additionalSettingsPanel,
23
+ //Dropzone settings popup
24
+ dropzoneSettingsWordWrapLabel: () => cy.get('[data-ngie-testid="word-wrap-checkbox"] [class*="label"]'),
25
+ dropzoneSettingsWordWrapCheckbox: () => cy.get('[data-ngie-testid="word-wrap-checkbox"] input'),
26
+ dropzoneSettingsSetForAllDropzoneLabel: () => cy.get('[data-ngie-testid="set-for-all-dropzones-checkbox"] [class*="label"]'),
27
+ dropzoneSettingsSetForAllDropzoneCheckbox: () => cy.get('[data-ngie-testid="set-for-all-dropzones-checkbox"] input'),
20
28
  //Specify correct answer section
21
29
  dropzoneSpecifyCorrectAnswerSection: () => cy.get('[class="droppable-area"] [role="button"]'),
22
30
  optionContainerOptionsSpecifyCorrectAnswerSection: () => cy.get('.draggable-selected-item'),
23
31
  optionsContainerSpecifyCorrectAnswerSection: () => cy.get('.draggable-wrapper'), addAlternateButtonSpecifyCorrectAnswer: () => cy.get('.alternate-option-btn-wrapper button'),
32
+ selectedAlternateAnswerCountSpecifyCorrectAnswer: () => cy.get('.selected-option-wrapper'),
24
33
  alternateAnswerPopup: () => cy.get('.alternate-option-popup-wrapper'),
25
- alternateAnswerPopupOptionContainer: () => cy.get('.option-container'),
26
- alternateAnswerPopupSaveButton: () => cy.get('[class*="AlternateOptionstyle__ButtonWrapper"] .ngie-button').eq(1),
27
-
34
+ alternateAnswerPopupTitle: () => cy.get('.alternate-option-title-wrapper div').eq(0),
35
+ alternateAnswerPopupHelpText: () => cy.get('.alternate-option-title-wrapper div').eq(1),
36
+ alternateAnswerPopupOptions: () => cy.get('.option-container'),
37
+ alternateAnswerPopupCancelButton: () => cy.get('[class*="AlternateOptionstyle__ButtonWrapper"] button').eq(0),
38
+ alternateAnswerPopupSaveButton: () => cy.get('[class*="AlternateOptionstyle__ButtonWrapper"] button').eq(1),
28
39
  //Preview tab
40
+ questionBorderPreviewTab: () => cy.get('[class*="ClozeWithDragAndDropstyles__WrapperDiv"]'),
29
41
  optionPreviewTab: () => cy.get('.draggable-selected-item'),
30
42
  questionContainerPreviewTab: () => cy.get('.question-item-container'),
31
43
  dropzonePreviewTab: () => cy.get('[class*="DroppableHotspotstyle__DroppableHotspotWrapper"]'),
32
44
  dropzoneContainerPreviewTab: () => cy.get('.answer-status-response-preview-wrapper'),
33
45
  optionContainerOptionsPreviewTab: () => cy.get('.no-split-pane-wrapper .draggable-selected-item'),
34
46
  dropzoneWrapperPreviewTab: () => cy.get('.label-image-with-dnd-canvas-wrapper .cell'),
35
- dropzoneNumeration: () => cy.get('[class*="DroppableHotspotstyle__NumerationDiv"]')
47
+ dropzoneNumeration: () => cy.get('[class*="DroppableHotspotstyle__NumerationDiv"]'),
48
+ //Additional settings
49
+ accessibilityLabel: () => cy.get('[class*="Accessibilitystyles__AccessibilityLabelWrapper"]'),
50
+ flagNonAccessibleCheckbox: () => cy.get('[data-ngie-testid="response-option-checkbox"] input'),
51
+ flagNonAccessibleLabel: () => cy.get('[data-ngie-testid="response-option-checkbox"] .MuiFormControlLabel-label')
36
52
  }
37
53
 
38
54
  const steps = {
@@ -52,7 +68,11 @@ const steps = {
52
68
  ...draggableOptionsSectionComponent.steps,
53
69
  ...draggableOptionContainer.steps,
54
70
  ...commonComponents.steps,
55
-
71
+ ...randomizeOptionsComponent.steps,
72
+ ...enableOuterBorderComponent.steps,
73
+ ...allowMultipleInstancesOfSameDraggableOptionComponent.steps,
74
+ ...additionalSettingsPanel.steps,
75
+ ...responseAreaSettingsPopupComponent.steps,
56
76
  /**
57
77
  * Sets options in dropzone in the Preview Tab based on the provided optionsObject.
58
78
  * @param {Object} optionsObject - An object where keys are option texts and values are dropzone indices.
@@ -239,23 +259,6 @@ const steps = {
239
259
  .click();
240
260
  },
241
261
 
242
- setGroupedOptions: () => {
243
- let flowers = [['Flower', 'Petals', 'Seed', 'Pollen'],
244
- ['Leaflet', 'Leaves', 'Leaf', 'Green'],
245
- ['Stem', 'Branch', 'Trunk', 'Tree'],
246
- ['Rose', 'Lily', 'Orchid', 'Petals']
247
- ];
248
- let groupTitles = ['Group A', 'Group B', 'Group C', 'Group D'];
249
- draggableOptionsSectionComponent.steps.expandDraggableOptionsLayoutDropdown()
250
- draggableOptionsSectionComponent.steps.selectOptionFromDraggableOptionsLayoutDropdown('Grouped')
251
- draggableOptionsSectionComponent.steps.addGroupTitle(groupTitles[0]);
252
- optionsWrapperComponent.steps.addMultipleOptionFields(2);
253
- optionsWrapperComponent.steps.addInputToOptionsInputField(flowers[0]);
254
- draggableOptionsSectionComponent.steps.addGroupWithTitleAndOptionsInDraggableOptionsSection(groupTitles[1], flowers[1]);
255
- draggableOptionsSectionComponent.steps.addGroupWithTitleAndOptionsInDraggableOptionsSection(groupTitles[2], flowers[2]);
256
- draggableOptionsSectionComponent.steps.addGroupWithTitleAndOptionsInDraggableOptionsSection(groupTitles[3], flowers[3]);
257
- },
258
-
259
262
  /**
260
263
  * Sets options in dropzone in the Preview Tab based on the provided optionsObject.
261
264
  * @param {Object[]} responses - An array of objects containing the responseIndex, responseText and dropzone index
@@ -287,6 +290,83 @@ const steps = {
287
290
  .click();
288
291
  },
289
292
 
293
+ /**
294
+ * @description Verify alternate button for a dropzone in specify correct answer section
295
+ * @param {number} dropzoneIndex Index of dropzone
296
+ */
297
+ verifyDefaultAddAlternateAnswerButtonIsDisplayed: (dropzoneIndex) => {
298
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), dropzoneIndex)
299
+ .parents('.authoring-response-wrapper')
300
+ .within(() => {
301
+ utilities.verifyElementVisibilityState(fillInTheGapsDragAndDropPage.addAlternateButtonSpecifyCorrectAnswer(), 'visible');
302
+ utilities.verifyElementDisabled(fillInTheGapsDragAndDropPage.addAlternateButtonSpecifyCorrectAnswer());
303
+ });
304
+ },
305
+
306
+ /**
307
+ * @description Verify dropzone's alternate answer popup options
308
+ * @param {string[]} optionsArray Array of options in dropzone's alternate answer popup
309
+ */
310
+ verifyDropzoneAlternateAnswerPopupOptions: (optionsArray) => {
311
+ optionsArray.forEach((option, index) => {
312
+ utilities.verifyInnerText(utilities.getNthElement(fillInTheGapsDragAndDropPage.alternateAnswerPopupOptions(), index), option);
313
+ });
314
+ },
315
+
316
+ /**
317
+ * @description select alternate answers for a dropzone in its alternate answer popup
318
+ * @param {string[]} alternateAnswerArray Array of options to be selected as alternate answer
319
+ */
320
+ selectAlternateAnswerInAlternateAnswerPopup: (alternateAnswerArray) => {
321
+ alternateAnswerArray.forEach((alternateAnswer) => {
322
+ fillInTheGapsDragAndDropPage.alternateAnswerPopupOptions()
323
+ .contains(alternateAnswer)
324
+ .click();
325
+ fillInTheGapsDragAndDropPage.alternateAnswerPopupOptions()
326
+ .contains(alternateAnswer)
327
+ .parent()
328
+ .should('have.class', 'selected');
329
+ });
330
+ },
331
+
332
+ /**
333
+ * @description deselect alternate answers for a dropzone in its alternate answer popup
334
+ * @param {string[]} alternateAnswerArray Array of options to be deselected
335
+ */
336
+ deselectAlternateAnswerInAlternateAnswerPopup: (alternateAnswerArray) => {
337
+ alternateAnswerArray.forEach((alternateAnswer) => {
338
+ fillInTheGapsDragAndDropPage.alternateAnswerPopupOptions()
339
+ .contains(alternateAnswer)
340
+ .click();
341
+ fillInTheGapsDragAndDropPage.alternateAnswerPopupOptions()
342
+ .contains(alternateAnswer)
343
+ .parent()
344
+ .should('not.have.class', 'selected');
345
+ });
346
+ },
347
+
348
+ saveSelectedAlternateAnswers: () => {
349
+ fillInTheGapsDragAndDropPage.alternateAnswerPopupSaveButton()
350
+ .click();
351
+ },
352
+
353
+ CancelDropzoneAlternateAnswersPopup: () => {
354
+ fillInTheGapsDragAndDropPage.alternateAnswerPopupCancelButton()
355
+ .click();
356
+ },
357
+
358
+ /**
359
+ * @description Set alternate answers for a dropzone
360
+ * @param {number} dropzoneIndex Index of dropzone
361
+ * @param {string[]} alternateAnswerArray Array of options to be selected as alternate answer
362
+ */
363
+ setResponseLevelAlternateAnswer: (dropzoneIndex, alternateAnswerArray) => {
364
+ fillInTheGapsDragAndDropPage.steps.clickOnAddAlternateButton(dropzoneIndex);
365
+ fillInTheGapsDragAndDropPage.steps.selectAlternateAnswerInAlternateAnswerPopup(alternateAnswerArray);
366
+ fillInTheGapsDragAndDropPage.steps.saveSelectedAlternateAnswers();
367
+ utilities.verifyElementVisibilityState(fillInTheGapsDragAndDropPage.alternateAnswerPopup(), 'notExist');
368
+ },
369
+
290
370
  /**
291
371
  * @description Verifies the text content of a specific preview tab dropzone element.
292
372
  * @param {number} count - The index of the preview tab dropzone element to verify (zero-based).
@@ -310,7 +390,8 @@ const steps = {
310
390
  .eq(dropzoneIndex)
311
391
  .within(() => {
312
392
  responseArray.forEach((response, count) => {
313
- draggableOptionContainer.draggableOption()
393
+ cy.get('.item-content-container')
394
+ // draggableOptionContainer.draggableOption()
314
395
  .eq(count)
315
396
  .verifyInnerText(response);
316
397
  });
@@ -318,8 +399,8 @@ const steps = {
318
399
  },
319
400
 
320
401
  /**
321
- * @param {number} responseAreaIndex Index of the stem response area in set correct answer section
322
- * @description Verify drag handle is not visible in filled category cell in preview tab
402
+ * @param {number} responseAreaIndex Index of the dropzone in specify correct answer section
403
+ * @description Verify drag handle is not visible in filled category cell in specify correct answer section
323
404
  */
324
405
  verifyDragHandleNotVisibleInFilledDropzoneOfSpecifyCorrectAnswerSection: (responseAreaIndex) => {
325
406
  fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection()
@@ -368,13 +449,13 @@ const steps = {
368
449
  .eq(dropzoneIndex)
369
450
  .within(() => {
370
451
  responseArray.forEach((response, count) => {
371
- utilities.verifyInnerText(utilities.getNthElement(draggableOptionContainer.draggableOption(), count), response);
452
+ utilities.verifyInnerText(utilities.getNthElement(cy.get('.item-content-container'), count), response);
372
453
  });
373
454
  });
374
455
  },
375
456
 
376
457
  /**
377
- * @param {number} responseAreaIndex Index of the stem response area in set correct answer section
458
+ * @param {number} responseAreaIndex Index of the dropzone in preview tab
378
459
  * @description Verify drag handle is not visible in filled category cell in preview tab
379
460
  */
380
461
  verifyDragHandleNotVisibleInFilledDropzoneOfPreviewTab: (responseAreaIndex) => {
@@ -425,6 +506,205 @@ const steps = {
425
506
  });
426
507
  });
427
508
  },
509
+
510
+ verifyQuestionBorderNotExist: () => {
511
+ fillInTheGapsDragAndDropPage.questionBorderPreviewTab()
512
+ .should('have.css', 'border')
513
+ .and('match', /0px none/);
514
+ },
515
+
516
+ clickAndDropOptionInOptionsContainerInPreviewTab: (optionText) => {
517
+ fillInTheGapsDragAndDropPage.dropzonePreviewTab()
518
+ .contains(optionText)
519
+ .click();
520
+ fillInTheGapsDragAndDropPage.optionsContainerPreviewTab()
521
+ .click({ force: true });
522
+ },
523
+
524
+ verifyWordWrapCheckboxUnchecked: () => {
525
+ fillInTheGapsDragAndDropPage.dropzoneSettingsWordWrapCheckbox()
526
+ .should('not.be.checked');
527
+ },
528
+
529
+ verifyWordWrapCheckboxChecked: () => {
530
+ fillInTheGapsDragAndDropPage.dropzoneSettingsWordWrapCheckbox()
531
+ .should('be.checked');
532
+ },
533
+
534
+ verifySetForAllDropzoneCheckboxChecked: () => {
535
+ fillInTheGapsDragAndDropPage.dropzoneSettingsSetForAllDropzoneCheckbox()
536
+ .should('be.checked');
537
+ },
538
+
539
+ verifySetForAllDropzoneCheckboxUnchecked: () => {
540
+ fillInTheGapsDragAndDropPage.dropzoneSettingsSetForAllDropzoneCheckbox()
541
+ .should('not.be.checked');
542
+ },
543
+
544
+ checkWordWrappedCheckbox: () => {
545
+ fillInTheGapsDragAndDropPage.dropzoneSettingsWordWrapCheckbox()
546
+ .click()
547
+ .should('be.checked');
548
+ },
549
+
550
+ uncheckWordWrappedCheckbox: () => {
551
+ fillInTheGapsDragAndDropPage.dropzoneSettingsWordWrapCheckbox()
552
+ .click()
553
+ .should('not.be.checked');
554
+ },
555
+
556
+ uncheckSetForAllDropzoneCheckbox: () => {
557
+ fillInTheGapsDragAndDropPage.dropzoneSettingsSetForAllDropzoneCheckbox()
558
+ .click()
559
+ .should('not.be.checked');
560
+ },
561
+
562
+ checkSetForAllDropzoneCheckbox: () => {
563
+ fillInTheGapsDragAndDropPage.dropzoneSettingsSetForAllDropzoneCheckbox()
564
+ .click()
565
+ .should('be.checked');
566
+ },
567
+
568
+ /**
569
+ * @description Verify width of dropzone in specify correct answer section
570
+ * @param {number} dropzoneIndex index of dropzone
571
+ * @param {string} width Width of dropzone in px
572
+ */
573
+ verifyDropzoneWidthSpecifyCorrectAnswerSection: (dropzoneIndex, width) => {
574
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), dropzoneIndex)
575
+ .should('have.css', 'width', width);
576
+ },
577
+
578
+ /**
579
+ * @description Verify height of dropzone in specify correct answer section
580
+ * @param {number} dropzoneIndex index of dropzone
581
+ * @param {string} height Height of dropzone in px
582
+ */
583
+ verifyDropzoneHeightSpecifyCorrectAnswerSection: (dropzoneIndex, height) => {
584
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), dropzoneIndex)
585
+ .should('have.css', 'height', height);
586
+ },
587
+
588
+ /**
589
+ * @description Verify width of dropzone in preview tab
590
+ * @param {number} dropzoneIndex index of dropzone
591
+ * @param {string} width Width of dropzone in px
592
+ */
593
+ verifyDropzoneWidthPreviewTab: (dropzoneIndex, width) => {
594
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab(), dropzoneIndex)
595
+ .should('have.css', 'width', width);
596
+ },
597
+
598
+ /**
599
+ * @description Verify height of dropzone in preview tab
600
+ * @param {number} dropzoneIndex index of dropzone
601
+ * @param {string} height Height of dropzone in px
602
+ */
603
+ verifyDropzoneHeightPreviewTab: (dropzoneIndex, height) => {
604
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab(), dropzoneIndex)
605
+ .should('have.css', 'height', height);
606
+ },
607
+
608
+ /**
609
+ * @description Verify dropped option is not word-wrapped in dropzone specify correct answer section
610
+ * @param {number} dropzoneIndex Index of dropzone in specify correct answer section
611
+ */
612
+ verifyOptionTextNotWordWrappedInDropzoneSpecifyCorrectAnswerSection: (dropzoneIndex) => {
613
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), dropzoneIndex)
614
+ .find('.item-content-container')
615
+ .should('not.have.class', 'word-wrap');
616
+ },
617
+
618
+ /**
619
+ * @description Verify dropped option is word-wrapped in dropzone specify correct answer section
620
+ * @param {number} dropzoneIndex Index of dropzone in specify correct answer section
621
+ */
622
+ verifyOptionTextIsWordWrappedInDropzoneSpecifyCorrectAnswerSection: (dropzoneIndex) => {
623
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), dropzoneIndex)
624
+ .find('.item-content-container')
625
+ .should('have.class', 'word-wrap');
626
+ },
627
+
628
+ verifyDropzoneHeightWhenLongTextIsDroppedInSpecifyCorrectAnswerSection: () => {
629
+ let originalDropzoneHeight
630
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), 1)
631
+ .then(($originalDropzoneHeight) => {
632
+ originalDropzoneHeight = $originalDropzoneHeight.height(); //Storing original dropzone width
633
+ });
634
+ fillInTheGapsDragAndDropPage.steps.clickAndDropOptionInDropzoneSpecifyCorrectAnswerSection({ 'Leaves grow on the branches of a plant which in turn grow on the stem': 1 });
635
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), 1)
636
+ .then(($modifiedDropzoneHeight) => {
637
+ let modifiedDropzoneHeight = $modifiedDropzoneHeight.height(); //Storing modified dropzone width
638
+ expect(modifiedDropzoneHeight).to.be.gt(originalDropzoneHeight);
639
+ });
640
+ },
641
+
642
+ /**
643
+ * @description Verify dropped option is not word-wrapped in dropzone preview tab
644
+ * @param {number} dropzoneIndex Index of dropzone in preview tab
645
+ */
646
+ verifyOptionTextNotWordWrappedInDropzonePreviewTab: (dropzoneIndex) => {
647
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab(), dropzoneIndex)
648
+ .find('.item-content-container')
649
+ .should('not.have.class', 'word-wrap');
650
+ },
651
+
652
+ /**
653
+ * @description Verify dropped option is word-wrapped in dropzone preview tab
654
+ * @param {number} dropzoneIndex Index of dropzone in preview tab
655
+ */
656
+ verifyOptionTextIsWordWrappedInDropzonePreviewTab: (dropzoneIndex) => {
657
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab(), dropzoneIndex)
658
+ .find('.item-content-container')
659
+ .should('have.class', 'word-wrap');
660
+ },
661
+
662
+ verifyDropzoneHeightWhenLongTextIsDroppedInPreviewTab: () => {
663
+ let originalDropzoneHeight
664
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab(), 1)
665
+ .then(($originalDropzoneHeight) => {
666
+ originalDropzoneHeight = $originalDropzoneHeight.height(); //Storing original dropzone width
667
+ });
668
+ fillInTheGapsDragAndDropPage.steps.clickAndDropOptionInDropzonePreviewTab({ 'Leaves grow on the branches of a plant which in turn grow on the stem': 1 });
669
+ utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab(), 1)
670
+ .then(($modifiedDropzoneHeight) => {
671
+ let modifiedDropzoneHeight = $modifiedDropzoneHeight.height(); //Storing modified dropzone width
672
+ expect(modifiedDropzoneHeight).to.be.gt(originalDropzoneHeight);
673
+ });
674
+ },
675
+
676
+ verifyFlagThisItemNonAccessibleCheckboxIsUnchecked: () => {
677
+ fillInTheGapsDragAndDropPage.flagNonAccessibleCheckbox()
678
+ .should('not.be.checked');
679
+ },
680
+
681
+ checkFlagThisItemNonAccessibleCheckbox: () => {
682
+ fillInTheGapsDragAndDropPage.flagNonAccessibleCheckbox()
683
+ .click()
684
+ .should('be.checked');
685
+ },
686
+
687
+ /**
688
+ * @description Verify tooltip text in dropzone option specify correct answer section
689
+ * @param {number} dropzoneIndex Index of dropzone in specify correct answer section
690
+ * @param {string} tooltip Tooltip text
691
+ */
692
+ verifyDropzoneOptionTooltipSpecifyCorrectAnswerSection: (dropzoneIndex, tooltip) => {
693
+ utilities.hoverOverElement(utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzoneSpecifyCorrectAnswerSection, dropzoneIndex));
694
+ utilities.verifyTextContent(fillInTheGapsDragAndDropPage.dropzoneOptionTooltip(), tooltip);
695
+ utilities.hoverAwayFromElement();
696
+ },
697
+
698
+ /**
699
+ * @description Verify tooltip text in dropzone option preview tab
700
+ * @param {number} dropzoneIndex Index of dropzone in preview tab
701
+ * @param {string} tooltip Tooltip text
702
+ */
703
+ verifyDropzoneOptionTooltipPreviewTab: (dropzoneIndex, tooltip) => {
704
+ utilities.hoverOverElement(utilities.getNthElement(fillInTheGapsDragAndDropPage.dropzonePreviewTab, dropzoneIndex));
705
+ utilities.verifyTextContent(fillInTheGapsDragAndDropPage.dropzoneOptionTooltip(), tooltip);
706
+ utilities.hoverAwayFromElement();
707
+ }
428
708
  }
429
709
 
430
710
  const tests = {
@@ -436,6 +716,15 @@ const tests = {
436
716
  ...draggableOptionContainer.tests,
437
717
  ...commonComponents.tests,
438
718
  ...autoScoredScoringPreviewTab.tests,
719
+ ...createQuestionBasePage.tests,
720
+ ...studentViewSettingsLabelComponent.tests,
721
+ ...randomizeOptionsComponent.tests,
722
+ ...enableOuterBorderComponent.tests,
723
+ ...allowMultipleInstancesOfSameDraggableOptionComponent.tests,
724
+ ...autoScoredStudentViewSettings.tests,
725
+ ...questionInstructionsComponent.tests,
726
+ ...questionInputFieldComponent.tests,
727
+ ...additionalSettingsPanel.tests,
439
728
 
440
729
  verifyContentsOfSpecifyCorrectAnswerSection: () => {
441
730
  it('When user selects a scoring type then in the \'Correct\' accordion, all the contents should be displayed', () => {
@@ -516,39 +805,6 @@ const tests = {
516
805
  it('Accessibility of \'Correct\' accordion contents', { tags: 'a11y' }, () => {
517
806
  cy.checkAccessibility(fillInTheGapsDragAndDropPage.dropzoneLabelSpecifyCorrectAnswerSection().parents('.preview-content-wrapper'))
518
807
  });
519
- },
520
-
521
- /**
522
- * @description select alternate answers for a dropzone in its alternate answer popup
523
- * @param {string[]} alternateAnswerArray Array of options to be selected as alternate answer
524
- */
525
- selectAlternateAnswerInAlternateAnswerPopup: (alternateAnswerArray) => {
526
- alternateAnswerArray.forEach((alternateAnswer) => {
527
- fillInTheGapsDragAndDropPage.alternateAnswerPopupOptionContainer()
528
- .contains(alternateAnswer)
529
- .click();
530
- fillInTheGapsDragAndDropPage.alternateAnswerPopupOptionContainer()
531
- .contains(alternateAnswer)
532
- .parent()
533
- .should('have.class', 'selected');
534
- });
535
- },
536
-
537
- saveSelectedAlternateAnswers: () => {
538
- fillInTheGapsDragAndDropPage.alternateAnswerPopupSaveButton()
539
- .click();
540
- },
541
-
542
- /**
543
- * @description Set alternate answers for a dropzone
544
- * @param {number} dropzoneIndex Index of dropzone
545
- * @param {string[]} alternateAnswerArray Array of options to be selected as alternate answer
546
- */
547
- setResponseLevelAlternateAnswer: (dropzoneIndex, alternateAnswerArray) => {
548
- fillInTheGapsDragAndDropPage.steps.clickOnAddAlternateButton(dropzoneIndex);
549
- fillInTheGapsDragAndDropPage.steps.selectAlternateAnswerInAlternateAnswerPopup(alternateAnswerArray);
550
- fillInTheGapsDragAndDropPage.steps.saveSelectedAlternateAnswers();
551
- utilities.verifyElementVisibilityState(fillInTheGapsDragAndDropPage.alternateAnswerPopup(), 'notExist');
552
808
  }
553
809
  }
554
810
 
@@ -48,6 +48,7 @@ const selectors = {
48
48
  textAreaPreviewTab: () => cy.get('.drag-and-drop-layout-wrapper textarea'),
49
49
  dropzonePointerInPreviewTab: () => cy.get('.preview-content-wrapper [class*="PointerWrapper"]'),
50
50
  canvasInPreviewTab: () => cy.get('[class*="PreviewTabstyles__ContentWrapper"] [class*="Canvasstyle__DragAndDropCanvas"]'),
51
+ tickIconWrapper: () => cy.get('.tick-icon-wrapper g[id*="Rectangle"]')
51
52
  }
52
53
 
53
54
  const steps = {
@@ -320,31 +321,6 @@ const steps = {
320
321
  .click({ force: true });
321
322
  },
322
323
 
323
- setGroupedOptions: () => {
324
- let flowers = [['Flower', 'Petals', 'Seed', 'Pollen'],
325
- ['Leaflet', 'Leaves', 'Leaf', 'Green'],
326
- ['Stem', 'Branch', 'Trunk', 'Tree'],
327
- ['Rose', 'Lily', 'Orchid', 'Petals']
328
- ];
329
- let groupTitles = ['Group A', 'Group B', 'Group C', 'Group D'];
330
- draggableOptionsSectionComponent.steps.expandDraggableOptionsLayoutDropdown()
331
- draggableOptionsSectionComponent.steps.selectOptionFromDraggableOptionsLayoutDropdown('Grouped')
332
- draggableOptionsSectionComponent.steps.addGroupTitle(groupTitles[0]);
333
- optionsWrapperComponent.steps.addMultipleOptionFields(2);
334
- optionsWrapperComponent.steps.addInputToOptionsInputField(flowers[0]);
335
- draggableOptionsSectionComponent.steps.addGroupWithTitleAndOptionsInDraggableOptionsSection(groupTitles[1], flowers[1]);
336
- draggableOptionsSectionComponent.steps.addGroupWithTitleAndOptionsInDraggableOptionsSection(groupTitles[2], flowers[2]);
337
- draggableOptionsSectionComponent.steps.addGroupWithTitleAndOptionsInDraggableOptionsSection(groupTitles[3], flowers[3]);
338
- },
339
-
340
- /**
341
- * @description verify the displayed penalty points for each incorrect dropzone
342
- * @param {number} penaltyPoints displayed penalty points
343
- */
344
- verifyPenaltyPointsForEachIncorrectDropzone: (penaltyPoints) => {
345
- utilities.verifyInnerText(autoScoredScoringSectionMultiResponseType.penaltyPointsDetailsSectionAllottedPointsLabel(), `Penalty points for each incorrect dropzone: ${penaltyPoints}`);
346
- },
347
-
348
324
  verifyInactiveStateOfAllDropzoneInSpecifyCorrectAnswerSection: () => {
349
325
  fillInTheGapsOverImageDragAndDropPage.dropzoneWrapperSpecifyCorrectAnswerSection()
350
326
  .should('not.have.class', 'dragging-over');
@@ -585,7 +561,7 @@ const tests = {
585
561
  it('When user selects a scoring type then in the \'Correct\' accordion, all the contents should be displayed', () => {
586
562
  utilities.verifyElementCount(fillInTheGapsOverImageDragAndDropPage.dropzoneSpecifyCorrectAnswerSection(), 3);
587
563
  for (let index = 0; index < 3; index++) {
588
- utilities.verifyInnerText(utilities.getNthElement(fillInTheGapsOverImageDragAndDropPage.dropzoneLabelSpecifyCorrectAnswerSection(), index), `Dropzone ${index+1}`);
564
+ utilities.verifyInnerText(utilities.getNthElement(fillInTheGapsOverImageDragAndDropPage.dropzoneLabelSpecifyCorrectAnswerSection(), index), `Dropzone ${index + 1}`);
589
565
  }
590
566
  });
591
567
  },
@@ -17,6 +17,7 @@ const selectors = {
17
17
  dropdownWrapperPreviewTab: () => cy.get('[class*="question-preview-wrapper"] [class="Canvasstyle__DropzoneWrapper"]'),
18
18
  correctAnswerResponseWrapper: () => cy.get('[class*="LabelImageWithDropdownPreviewstyles__AnswerCell"]'),
19
19
  correctAnswerResponse: () => cy.get('[class*="LabelImageWithDropdownPreviewstyles__AnswerWrapper"]'),
20
+ correctAnswerSectionWrapper: () => cy.get('.dnd-correct-answer-wrapper'),
20
21
  }
21
22
 
22
23
  const steps = {
@@ -154,7 +155,29 @@ const steps = {
154
155
  verifyCanvasHeightInPreviewTab: (height) => {
155
156
  fillInTheGapsOverImageDropdownPage.canvasImageInPreviewTab()
156
157
  .should('have.css', 'height', `${height}px`);
157
- }
158
+ },
159
+
160
+ /**
161
+ * Verify correct answer responses in the correct answer section and count.
162
+ * @param {string[]} correctAnswerArray - An array containing the expected correct answer responses.
163
+ * @example verifyCorrectAnswerResponsesInCorrectAnswerSectionAndCount(['Flower', 'Petals', 'Stem']);
164
+ */
165
+ verifyCorrectAnswerResponsesInCorrectAnswerSectionAndCount: (correctAnswerArray) => {
166
+ utilities.verifyElementCount(fillInTheGapsOverImageDropdownPage.correctAnswerResponseWrapper(), correctAnswerArray.length);
167
+ correctAnswerArray.forEach((correctAnswer, index) => {
168
+ fillInTheGapsOverImageDropdownPage.correctAnswerResponseWrapper()
169
+ .eq(index)
170
+ .within(() => {
171
+ utilities.verifyInnerText(fillInTheGapsDropdownCommonComponent.correctAnswerResponseNumeration(), `${index + 1}`);
172
+ fillInTheGapsOverImageDropdownPage.correctAnswerResponse()
173
+ .should('have.text', correctAnswer);
174
+ });
175
+ });
176
+ },
177
+
178
+ verifyCorrectAnswerSectionNotExists: () => {
179
+ utilities.verifyElementVisibilityState(fillInTheGapsDropdownPage.correctAnswerSectionWrapper(), 'notExist');
180
+ },
158
181
  }
159
182
 
160
183
  const tests = {