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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 = {