itemengine-cypress-automation 1.0.337-IEI-5508-automated-tests-9e03453.0 → 1.0.338

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 (122) hide show
  1. package/cypress/e2e/ILC/ChartsBar/HorizontalOrientationBarChart/editQuestion.smoke.js +94 -0
  2. package/cypress/e2e/ILC/ChartsBar/editQuestion.smoke.js +93 -0
  3. package/cypress/e2e/ILC/ChartsDotsPlot/editQuestion.smoke.js +92 -0
  4. package/cypress/e2e/ILC/ChartsLine/editQuestion.smoke.js +84 -0
  5. package/cypress/e2e/ILC/ChartsLine/previewContentsForAllViews.smoke.js +2 -2
  6. package/cypress/e2e/ILC/CkEditorEquationEditor/selectModeEditorBasic.js +1 -1
  7. package/cypress/e2e/ILC/CkEditorInsertImage/insertImageBasicFile.js +1 -1
  8. package/cypress/e2e/ILC/CkEditorInsertImage/upload.js +1 -1
  9. package/cypress/e2e/ILC/CkEditorInsertTable/insertTableEditorBasicFile.js +1 -1
  10. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editQuestion.smoke.js +1 -1
  11. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editTabBasicSection.js +12 -9
  12. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/styleAndLayoutCustomizationLayoutProperties.js +2 -1
  13. package/cypress/e2e/ILC/DrawingResponse/drawingResponsePreviewTabContents.smoke.js +63 -1
  14. package/cypress/e2e/ILC/EssayResponse/editQuestion.smoke.js +1 -1
  15. package/cypress/e2e/ILC/EssayResponseBasic/editQuestion.smoke.js +1 -1
  16. package/cypress/e2e/ILC/EssayResponseMath/editQuestion.smoke.js +1 -1
  17. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/Scoring/checkScoringLableBannerAndCorrectAnswer.js +84 -0
  18. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/checkAddAlternativeButton.js +33 -0
  19. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/clickAndDrop.js +2 -4
  20. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/draggableOptions.js +2 -8
  21. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/editQuestion.smoke.js +1 -1
  22. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/editTabBasicSection.js +32 -2
  23. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/headerSection.js +39 -6
  24. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViewInIncompleteAuthoring.smoke.js +119 -0
  25. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +91 -0
  26. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/checkAddAlternativeButton.js +37 -0
  27. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/dropdownOptionsSection.js +2 -2
  28. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editQuestion.smoke.js +3 -3
  29. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editTabBasicSection.js +36 -2
  30. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/headerSection.js +36 -6
  31. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/previewContentsForAllViewsInIncompleteAuthoring.smoke.js +103 -0
  32. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/editQuestion.smoke.js +1 -1
  33. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +96 -0
  34. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/checkAddAlternativeButton.js +38 -0
  35. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/dropdownOptionsSection.js +1 -1
  36. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editQuestion.smoke.js +2 -2
  37. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editTabBasicSection.js +39 -0
  38. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/headerSection.js +39 -8
  39. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/previewContentsForAllViews.smoke.js +1 -1
  40. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/previewContentsForAllViewsInIncompleteuthoring.smoke.js +106 -0
  41. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/supportedFileTypes.js +2 -3
  42. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/HeaderSection.js +38 -5
  43. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +88 -0
  44. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/allOrNothingForAllViews.smoke.js +1 -1
  45. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/checkAddAlternative.js +35 -0
  46. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/editQuestion.smoke.js +33 -1
  47. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/previewContentsForAllViewsInIncompleteAuthoring.js +97 -0
  48. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/supportedFileTypes.js +3 -4
  49. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +79 -0
  50. package/cypress/e2e/ILC/FillInTheGapsTextNew/checkAddAlternativeButton.js +32 -0
  51. package/cypress/e2e/ILC/FillInTheGapsTextNew/editQuestion.smoke.js +1 -1
  52. package/cypress/e2e/ILC/FillInTheGapsTextNew/editTabBasicSection.js +30 -2
  53. package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +35 -4
  54. package/cypress/e2e/ILC/FillInTheGapsTextNew/previewContentsForAllViewsInIncompleteAuthoring.smoke.js +99 -0
  55. package/cypress/e2e/ILC/GridFill/editQuestion.smoke.js +1 -1
  56. package/cypress/e2e/ILC/ImageHighlight/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +109 -0
  57. package/cypress/e2e/ILC/ImageHighlight/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternatePoints.js +45 -0
  58. package/cypress/e2e/ILC/ImageHighlight/Scoring/checkScoringLableBannerAndCorrectAnswer.js +96 -0
  59. package/cypress/e2e/ILC/ImageHighlight/checkAddAlternativeButton.js +39 -0
  60. package/cypress/e2e/ILC/ImageHighlight/editQuestion.smoke.js +76 -0
  61. package/cypress/e2e/ILC/ImageHighlight/editTabBasicSection.js +46 -0
  62. package/cypress/e2e/ILC/ImageHighlight/headerSection.js +35 -5
  63. package/cypress/e2e/ILC/ImageHighlight/previewContentForAllViewInIncompleteAuthoring.js +118 -0
  64. package/cypress/e2e/ILC/ListOrderingNew/editQuestion.smoke.js +3 -0
  65. package/cypress/e2e/ILC/Matching/editQuestion.smoke.js +1 -1
  66. package/cypress/e2e/ILC/Matching/styleAndLayoutCustomizationLayoutProperties.js +3 -3
  67. package/cypress/e2e/ILC/NumberLine/editQuestion.smoke.js +79 -0
  68. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/allOrNothingScoringForAllViews.smoke.js +5 -5
  69. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/editQuestion.smoke.js +72 -0
  70. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +1 -0
  71. package/cypress/e2e/ILC/NumberLineLabel/editQuestion.smoke.js +80 -0
  72. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/editQuestion.smoke.js +81 -0
  73. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +2 -2
  74. package/cypress/e2e/ILC/ShortTextResponseNew/editQuestion.smoke.js +56 -0
  75. package/cypress/e2e/ILC/ShortTextResponseNew/previewContentsForAllViews.smoke.js +5 -6
  76. package/cypress/e2e/ILC/SingleSelection/editQuestion.smoke.js +1 -1
  77. package/cypress/e2e/ILC/SingleSelection/editTabBasicSection.js +1 -1
  78. package/cypress/e2e/ILC/SingleSelectionGridNew/editQuestion.smoke.js +1 -1
  79. package/cypress/e2e/ILC/TextEntryMath/editQuestion.smoke.js +76 -0
  80. package/cypress/e2e/ILC/TextEntryMathWithImage/editQuestion.smoke.js +92 -0
  81. package/cypress/e2e/ILC/TextEntryMathWithImage/previewTabContentsForAllViews.smoke.js +1 -1
  82. package/cypress/e2e/ILC/TextSelection/editQuestion.smoke.js +0 -3
  83. package/cypress/e2e/ILC/ToolSettings/toolSettingsPreviewContents.smoke.js +3 -3
  84. package/cypress/e2e/ILC/chartsDotsPlot/allOrNothingForAllViews.smoke.js +9 -9
  85. package/cypress/e2e/ILC/chartsDotsPlot/gradingViewAndCorrectAnswerView.smoke.js +2 -2
  86. package/cypress/e2e/ILC/chartsDotsPlot/numberLineAxisSettings.js +1 -0
  87. package/cypress/e2e/ILC/chartsDotsPlot/previewContentsForAllViews.smoke.js +1 -1
  88. package/cypress/fixtures/uploadResponseFileType.js +1 -1
  89. package/cypress/pages/chartsBarPage.js +3 -0
  90. package/cypress/pages/chartsDotPlotPage.js +2 -0
  91. package/cypress/pages/chartsLinePage.js +38 -2
  92. package/cypress/pages/components/autoScoredScoringSectionMultiResponseType.js +2 -0
  93. package/cypress/pages/components/browseItemsPage.js +4 -4
  94. package/cypress/pages/components/fillInTheGapsDragAndDropCommonComponents.js +22 -1
  95. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +67 -0
  96. package/cypress/pages/components/fillInTheGapsTextCommonComponent.js +66 -0
  97. package/cypress/pages/components/layoutSectionComponent.js +1 -1
  98. package/cypress/pages/components/optionsWrapperComponent.js +1 -0
  99. package/cypress/pages/components/scoringSectionBaseEditTab.js +2 -1
  100. package/cypress/pages/createItemPage.js +7 -0
  101. package/cypress/pages/dialogBoxBase.js +13 -7
  102. package/cypress/pages/drawingResponsePage.js +73 -2
  103. package/cypress/pages/feedbackScalePage.js +2 -0
  104. package/cypress/pages/fillInTheGapsDragAndDropPage.js +71 -4
  105. package/cypress/pages/fillInTheGapsDropdownPage.js +21 -0
  106. package/cypress/pages/fillInTheGapsOverImageDragAndDropPage.js +2 -2
  107. package/cypress/pages/fillInTheGapsOverImageDropdownPage.js +22 -0
  108. package/cypress/pages/fillInTheGapsOverImageTextPage.js +22 -0
  109. package/cypress/pages/fillInTheGapsTextPage.js +24 -2
  110. package/cypress/pages/imageHighlightPage.js +106 -6
  111. package/cypress/pages/listOrderingPage.js +4 -2
  112. package/cypress/pages/menuBarPage.js +65 -65
  113. package/cypress/pages/multipleSelectionGridPage.js +68 -1
  114. package/cypress/pages/multipleSelectionPage.js +67 -0
  115. package/cypress/pages/numberLineLabelPage.js +4 -1
  116. package/cypress/pages/numberLinePage.js +2 -0
  117. package/cypress/pages/shortTextResponsePage.js +2 -0
  118. package/cypress/pages/singleSelectionGridPage.js +68 -1
  119. package/cypress/pages/singleSelectionPage.js +67 -0
  120. package/cypress/pages/textEntryMathPage.js +7 -3
  121. package/cypress/pages/textEntryMathWithImagePage.js +3 -0
  122. package/package.json +2 -2
@@ -23,7 +23,9 @@ const selectors = {
23
23
  ...figCommonStyleAndLayoutComponent,
24
24
  setForAllTextContainersLabel: () => cy.get('[data-ngie-testid="set-for-all-text-containers-checkbox"] .MuiFormControlLabel-label'),
25
25
  setForAllTextContainersCheckbox: () => cy.get('[data-ngie-testid="set-for-all-text-containers-checkbox"] input'),
26
- correctAnswerSectionWithoutEnumerationWrapper: () => cy.get('.no-numeration-correct-answers-wrapper .preview-question-text-wrapper')
26
+ correctAnswerSectionWithoutEnumerationWrapper: () => cy.get('.no-numeration-correct-answers-wrapper .preview-question-text-wrapper'),
27
+ answerStatusBanner: () => cy.get('[class*="AnswerStatusWrapper"]'),
28
+ correctAnswerSectionWrapper: () => cy.get('[class*="label-image-with-text-correct-answer-wrapper"]'),
27
29
  }
28
30
 
29
31
  const steps = {
@@ -142,7 +144,27 @@ const steps = {
142
144
  .should('have.attr', 'value', correctAnswer);
143
145
  });
144
146
  });
145
- }
147
+ },
148
+
149
+ verifyCorrectAnswerSectionNotExist: () => {
150
+ fillInTheGapsTextPage.correctAnswerSectionWrapper()
151
+ .should('not.exist');
152
+ },
153
+
154
+ verifyCorrectAnswerSectionExist: () => {
155
+ fillInTheGapsTextPage.correctAnswerSectionWrapper()
156
+ .should('exist');
157
+ },
158
+
159
+ verifyAnswerStatusBannerNotExist: () => {
160
+ fillInTheGapsTextPage.answerStatusBanner()
161
+ .should('not.exist');
162
+ },
163
+
164
+ verifyAnswerStatusBannerExist: () => {
165
+ fillInTheGapsTextPage.answerStatusBanner()
166
+ .should('be.visible');
167
+ },
146
168
  }
147
169
 
148
170
  const tests = {
@@ -1,5 +1,7 @@
1
1
  import utilities from "../support/helpers/utilities";
2
- import { additionalSettingsAccessibilitySectionComponent, additionalSettingsPanel, autoScoredScoringPreviewTab, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, autoScoredStudentViewSettings, backgroundImageUploadComponent, commonComponents, createQuestionBasePage, enableOuterBorderComponent, gradingViewEnumerationComponent, imageActionsComponent, imageCanvasComponent, questionInstructionsComponent, scoringSectionBaseEditTab, showAvailableOptionsToStudents, showStudentMaximumNumberOfPossibleSelections, singleMultipleSelectionModeComponent, colorPopupComponent } from "./components"
2
+ import { additionalSettingsAccessibilitySectionComponent, additionalSettingsPanel, autoScoredScoringPreviewTab, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, autoScoredStudentViewSettings, backgroundImageUploadComponent, commonComponents, createQuestionBasePage, enableOuterBorderComponent, gradingViewEnumerationComponent, imageActionsComponent, imageCanvasComponent, questionInstructionsComponent, scoringSectionBaseEditTab, showAvailableOptionsToStudents, showStudentMaximumNumberOfPossibleSelections, singleMultipleSelectionModeComponent, colorPopupComponent } from "./components";
3
+ import { createItemPage } from "./createItemPage";
4
+ import { dialogBoxBase } from "./dialogBoxBase";
3
5
  const css = Cypress.env('css');
4
6
  let imageWidth = 768;
5
7
  let imageHeight = 432;
@@ -104,6 +106,8 @@ const selectors = {
104
106
  ariaLabelInputField: () => cy.get('input[placeholder*="Enter ARIA label"]'),
105
107
  inputFieldNumeration: () => cy.get('.MuiInputAdornment-root'),
106
108
  ariaLabelSectionLabel: () => cy.get('[class*="styles__LabelWrapper"]').contains('ARIA'),
109
+ addAlternativeAnswerButton: () => cy.get('[class*="AddAlternateAnswer"] button'),
110
+ correctAnswerSection: () => cy.get('[class*="CorrectAnswerTextWrapper"]'),
107
111
  }
108
112
 
109
113
  const steps = {
@@ -122,6 +126,8 @@ const steps = {
122
126
  ...showStudentMaximumNumberOfPossibleSelections.steps,
123
127
  ...additionalSettingsPanel.steps,
124
128
  ...gradingViewEnumerationComponent.steps,
129
+ ...createItemPage.steps,
130
+ ...commonComponents.steps,
125
131
 
126
132
  //Specify possible options
127
133
  verifyToolbarDisabled: () => {
@@ -518,7 +524,7 @@ const steps = {
518
524
 
519
525
  /**
520
526
  * @param {number} index of highlight region
521
- * @description this functions highlights a region in set correct answer section
527
+ * @description this functions removes highlight for a region in set correct answer section
522
528
  */
523
529
  removeHighlightOfARegionInSetCorrectAnswerSection: (index) => {
524
530
  imageHighlightPage.specifyCorrectAnswerSectionHighlight()
@@ -1501,6 +1507,36 @@ const steps = {
1501
1507
  imageHighlightPage.popupBorderStyleButtons().eq(2)
1502
1508
  .should('have.attr', 'aria-pressed', 'true');
1503
1509
  },
1510
+
1511
+ checkAlternativeButtonDisabled: () => {
1512
+ imageHighlightPage.addAlternativeAnswerButton()
1513
+ .should('be.disabled');
1514
+ },
1515
+
1516
+ checkAlternativeButtonEnabled: () => {
1517
+ imageHighlightPage.addAlternativeAnswerButton()
1518
+ .should('be.enabled');
1519
+ },
1520
+
1521
+ verifyAnswerStatusBannerNotExist: () => {
1522
+ imageHighlightPage.correctIncorrectStatusMessageText()
1523
+ .should('not.exist');
1524
+ },
1525
+
1526
+ verifyAnswerStatusBannerExist: () => {
1527
+ imageHighlightPage.correctIncorrectStatusMessageText()
1528
+ .should('be.visible');
1529
+ },
1530
+
1531
+ verifyCorrectAnswerSectionExist: () => {
1532
+ imageHighlightPage.correctAnswerSection()
1533
+ .should('be.visible');
1534
+ },
1535
+
1536
+ verifyCorrectAnswerSectionNotExist: () => {
1537
+ imageHighlightPage.correctAnswerSection()
1538
+ .should('not.exist');
1539
+ },
1504
1540
  }
1505
1541
 
1506
1542
  const tests = {
@@ -1519,6 +1555,71 @@ const tests = {
1519
1555
  ...additionalSettingsPanel.tests,
1520
1556
  ...gradingViewEnumerationComponent.tests,
1521
1557
  ...additionalSettingsAccessibilitySectionComponent.tests,
1558
+ //TODO need to remove once Save as you go is available for all questions
1559
+ /**
1560
+ * @description Verifies the behavior of the 'Add alternative answer' button, warning popups, and validation error messages
1561
+ * in the 'Specify correct answer' section for alternative answers in auto-scored questions.
1562
+ * @param {string|null} questionType - The type of the question (e.g., 'list ordering'). Pass `null` if not applicable.
1563
+ * @example - verifyAutoScoredAddAlternativeAnswerButtonAndValidation();
1564
+ */
1565
+ verifyAutoScoredAddAlternativeAnswerButtonAndValidation: (questionType = null) => {
1566
+ it('\'+ Add alternative answer\' button should be present', () => {
1567
+ utilities.verifyInnerText(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), 'Add alternative answer');
1568
+ utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), 'visible');
1569
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
1570
+ .verifyPseudoClassBeforeProperty('content', '""');
1571
+ });
1572
+
1573
+ it('CSS of \'Add Alternative answer\' button', { tags: 'css' }, () => {
1574
+ utilities.verifyCSS(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton().find('p'), {
1575
+ 'color': css.color.activeButtons,
1576
+ 'font-size': css.fontSize.default,
1577
+ 'font-weight': css.fontWeight.regular
1578
+ });
1579
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
1580
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
1581
+ });
1582
+
1583
+ it('If user has not selected correct answer in the correct accordion, then the Add alternative answer button should be in enabled state', () => {
1584
+ utilities.verifyElementNotDisabled(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton());
1585
+ autoScoredSpecifyCorrectAnswerSection.steps.clickOnAddAlternativeAnswerButton();
1586
+ });
1587
+
1588
+ it('CSS of warning popup', { tags: 'css' }, () => {
1589
+ utilities.verifyCSS(dialogBoxBase.dialogBoxTitle(), {
1590
+ 'color': css.color.flyoutTitle,
1591
+ 'font-size': css.fontSize.heading,
1592
+ 'font-weight': css.fontWeight.semibold
1593
+ });
1594
+ utilities.verifyCSS(dialogBoxBase.dialogBoxContent(), {
1595
+ 'color': css.color.labels,
1596
+ 'font-size': css.fontSize.default,
1597
+ 'font-weight': css.fontWeight.regular
1598
+ });
1599
+ utilities.verifyCSS(dialogBoxBase.buttonClose().find('svg'), {
1600
+ 'fill': css.color.closeIcon
1601
+ });
1602
+ });
1603
+
1604
+ it('Accessibility of warning popup', { tags: 'a11y' }, () => {
1605
+ cy.checkAccessibility(dialogBoxBase.dialogBox());
1606
+ dialogBoxBase.steps.closeWarningPopup();
1607
+ });
1608
+ },
1609
+
1610
+ //TODO need to remove once Save as you go is available for all questions
1611
+ verifyWarningPopupAndAccordionNavigationWhenNoPointsAddedInAlternativeAccordion: () => {
1612
+ it('When user tries to expand correct accordion when all the mandatory fields are not filled in the alternative accordion, then a warning popup should be displayed and on closing the popup, alternative 2 accordion should be in expanded state', () => {
1613
+ autoScoredSpecifyCorrectAnswerSection.correctAnswerAccordion()
1614
+ .click();
1615
+ dialogBoxBase.steps.closeWarningPopup();
1616
+ //TODO: Need to add error message according to question types
1617
+ utilities.verifyElementVisibilityState(commonComponents.errorMessage(), 'exist');
1618
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion()
1619
+ .eq(1)
1620
+ .should('have.attr', 'aria-expanded', 'true');
1621
+ });
1622
+ },
1522
1623
 
1523
1624
  /**
1524
1625
  * @param {string} scoringType scoring type 'All or nothing| Partial equal weights| Partial different weights'
@@ -1550,17 +1651,16 @@ const tests = {
1550
1651
 
1551
1652
  it(`When the user has removed all the options from the dropzone in the ${accordionName} accordion, error message should not be thrown on the \'${accordionName}\' accordion`, () => {
1552
1653
  imageHighlightPage.steps.removeHighlightOfARegionInSetCorrectAnswerSection(1);
1553
- utilities.verifyElementVisibilityState(commonComponents.errorMessage(), 'visible')
1554
- utilities.verifyInnerText(commonComponents.errorMessage(), 'Error: Please set a correct answer.')
1654
+ utilities.verifyElementVisibilityState(commonComponents.errorMessage(), 'notExist')
1555
1655
  if (accordionName == 'Correct') {
1556
1656
  autoScoredSpecifyCorrectAnswerSection.correctAnswerAccordion()
1557
1657
  .within(() => {
1558
- utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.specifyCorrectAnswerErrorIcon(), 'visible');
1658
+ utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.specifyCorrectAnswerErrorIcon(), 'notExist');
1559
1659
  });
1560
1660
  } else {
1561
1661
  autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion()
1562
1662
  .within(() => {
1563
- utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.specifyCorrectAnswerErrorIcon(), 'visible');
1663
+ utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.specifyCorrectAnswerErrorIcon(), 'notExist');
1564
1664
  });
1565
1665
  };
1566
1666
  });
@@ -3,6 +3,7 @@ import utilities from "../support/helpers/utilities";
3
3
  import { autoScoredScoringPreviewTab, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, autoScoredStudentViewSettings, commonComponents, correctIncorrectAnswerLabelComponent, createQuestionBasePage, optionsWrapperComponent, questionInstructionsComponent, randomizeOptionsComponent, scoringSectionBaseEditTab, studentViewSettingsLabelComponent, additionalSettingsPanel, additionalSettingsAccessibilitySectionComponent, enableOuterBorderComponent, styleAndLayoutCustomizationAccordionComponent } from "./components"
4
4
  import { listOrderingCommonStyleAndLayoutComponent } from "./components/listOrderingCommonStyleAndLayoutComponent";
5
5
  import { createItemPage } from "./createItemPage";
6
+ import { dialogBoxBase } from "./dialogBoxBase";
6
7
  const options = ['sprout', 'plant', 'flower', 'seed'];
7
8
  const css = Cypress.env('css');
8
9
 
@@ -149,7 +150,8 @@ const steps = {
149
150
  ...enableOuterBorderComponent.steps,
150
151
  ...styleAndLayoutCustomizationAccordionComponent.steps,
151
152
  ...listOrderingCommonStyleAndLayoutComponent.steps,
152
- ...createItemPage.steps,
153
+ ...createItemPage.steps,
154
+ ...dialogBoxBase.steps,
153
155
 
154
156
  /**
155
157
  * Verifies the border value of specify correct answer section options
@@ -251,7 +253,7 @@ const steps = {
251
253
  break;
252
254
  case 'none':
253
255
  dragIcon
254
- .should('not.exist');
256
+ .should('not.be.visible');
255
257
  break;
256
258
  default:
257
259
  throw new Error('Invalid drag handle option');
@@ -1,66 +1,66 @@
1
1
  import { browseItemsPage, createQuestionBasePage } from "./components";
2
- import { createItemPage } from "./createItemPage";
3
-
4
- const selectors = {
5
- ...browseItemsPage,
6
- ...createItemPage,
7
- itemBankDataApiAccordion: () => cy.get('[role="button"]').contains('Item Bank'),
8
- fetchItemsButton: () => cy.get('[role="button"]').contains('Fetch Items'),
9
- browseItemsButton: () => cy.get('[role="button"]').contains('Browse Items'),
10
- exampleRequestBody: () => cy.get('pre[class="body-param__example microlight"]'),
11
- exampleResponseValue: () => cy.get('pre[class="example microlight"]'),
12
- exampleResponseBody: () => cy.get('pre[class="microlight"]'),
13
- responseStatus: () => cy.get('[class="response-col_status"]'),
14
- responseDescription: () => cy.get('.response-col_description__inner'),
15
- buttonTryItOut: () => cy.get('[class="btn try-out__btn"]'),
16
- responseTextArea: () => cy.get('textarea[class="body-param__text"]'),
17
- buttonExecute: () => cy.get('.execute'),
18
- requestLoader: () => cy.get('.loading-container')
19
- }
20
-
21
- const steps = {
22
- ...browseItemsPage.steps,
23
- ...createItemPage.steps,
24
- ...createQuestionBasePage.steps,
25
- expandItemBankDataApiAccordion: () => {
26
- menuBarPage.itemBankDataApiAccordion()
27
- .click()
28
- .parents('[role="button"]')
29
- .should('have.attr', 'aria-expanded', 'true');
30
- },
31
-
32
- clickFetchItemsButton: () => {
33
- menuBarPage.fetchItemsButton()
34
- .click()
35
- .parents('[role="button"]')
36
- .should('have.class', 'Mui-selected');
37
- cy.url()
38
- .should('eq', Cypress.config().baseUrl + '/item-engine/data-api/item-bank/fetch-items');
39
- },
40
-
41
- tryItOut: () => {
42
- menuBarPage.buttonTryItOut()
43
- .click();
44
- },
45
-
46
- enterTextInSampleRequestBody: (text) => {
47
- menuBarPage.responseTextArea()
48
- .clear()
49
- .fill(text);
50
- },
51
-
52
- execute: () => {
53
- menuBarPage.buttonExecute()
54
- .click();
55
- },
56
-
57
- navigateToBrowseItems: () => {
58
- menuBarPage.browseItemsButton()
59
- .click()
60
- }
61
- }
62
-
63
- export const menuBarPage = {
64
- ...selectors,
65
- steps
66
- }
2
+ import { createItemPage } from "./createItemPage";
3
+
4
+ const selectors = {
5
+ ...browseItemsPage,
6
+ ...createItemPage,
7
+ itemBankDataApiAccordion: () => cy.get('[role="button"]').contains('Item Bank'),
8
+ fetchItemsButton: () => cy.get('[role="button"]').contains('Fetch Items'),
9
+ browseItemsButton: () => cy.get('[role="button"]').contains('Browse Items'),
10
+ exampleRequestBody: () => cy.get('pre[class="body-param__example microlight"]'),
11
+ exampleResponseValue: () => cy.get('pre[class="example microlight"]'),
12
+ exampleResponseBody: () => cy.get('pre[class="microlight"]'),
13
+ responseStatus: () => cy.get('[class="response-col_status"]'),
14
+ responseDescription: () => cy.get('.response-col_description__inner'),
15
+ buttonTryItOut: () => cy.get('[class="btn try-out__btn"]'),
16
+ responseTextArea: () => cy.get('textarea[class="body-param__text"]'),
17
+ buttonExecute: () => cy.get('.execute'),
18
+ requestLoader: () => cy.get('.loading-container')
19
+ }
20
+
21
+ const steps = {
22
+ ...browseItemsPage.steps,
23
+ ...createItemPage.steps,
24
+ ...createQuestionBasePage.steps,
25
+ expandItemBankDataApiAccordion: () => {
26
+ menuBarPage.itemBankDataApiAccordion()
27
+ .click()
28
+ .parents('[role="button"]')
29
+ .should('have.attr', 'aria-expanded', 'true');
30
+ },
31
+
32
+ clickFetchItemsButton: () => {
33
+ menuBarPage.fetchItemsButton()
34
+ .click()
35
+ .parents('[role="button"]')
36
+ .should('have.class', 'Mui-selected');
37
+ cy.url()
38
+ .should('eq', Cypress.config().baseUrl + '/item-engine/data-api/item-bank/fetch-items');
39
+ },
40
+
41
+ tryItOut: () => {
42
+ menuBarPage.buttonTryItOut()
43
+ .click();
44
+ },
45
+
46
+ enterTextInSampleRequestBody: (text) => {
47
+ menuBarPage.responseTextArea()
48
+ .clear()
49
+ .fill(text);
50
+ },
51
+
52
+ execute: () => {
53
+ menuBarPage.buttonExecute()
54
+ .click();
55
+ },
56
+
57
+ navigateToBrowseItems: () => {
58
+ menuBarPage.browseItemsButton()
59
+ .click()
60
+ }
61
+ }
62
+
63
+ export const menuBarPage = {
64
+ ...selectors,
65
+ steps
66
+ }
@@ -184,7 +184,8 @@ const steps = {
184
184
 
185
185
  verifyCorrectAnswerSectionNotExist: () => {
186
186
  multipleSelectionGridPage.correctAnswerSection()
187
- .should('not.exist');},
187
+ .should('not.exist');
188
+ },
188
189
  /**
189
190
  * Verifies the contents of option fields within the options section.
190
191
  * @param {Array<string>} optionsTextArray - An array of strings representing the expected text content for each option field.
@@ -212,6 +213,72 @@ const tests = {
212
213
  ...additionalSettingsPanel.tests,
213
214
  ...additionalSettingsAccessibilitySectionComponent.tests,
214
215
  ...styleAndLayoutCustomizationAccordionComponent.tests,
216
+ //TODO need to remove once Save as you go is available for all questions
217
+ /**
218
+ * @description Verifies the behavior of the 'Add alternative answer' button, warning popups, and validation error messages
219
+ * in the 'Specify correct answer' section for alternative answers in auto-scored questions.
220
+ * @param {string|null} questionType - The type of the question (e.g., 'list ordering'). Pass `null` if not applicable.
221
+ * @example - verifyAutoScoredAddAlternativeAnswerButtonAndValidation();
222
+ */
223
+ verifyAutoScoredAddAlternativeAnswerButtonAndValidation: (questionType = null) => {
224
+ it('\'+ Add alternative answer\' button should be present', () => {
225
+ utilities.verifyInnerText(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), 'Add alternative answer');
226
+ utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), 'visible');
227
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
228
+ .verifyPseudoClassBeforeProperty('content', '""');
229
+ });
230
+
231
+ it('CSS of \'Add Alternative answer\' button', { tags: 'css' }, () => {
232
+ utilities.verifyCSS(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton().find('p'), {
233
+ 'color': css.color.activeButtons,
234
+ 'font-size': css.fontSize.default,
235
+ 'font-weight': css.fontWeight.regular
236
+ });
237
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
238
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
239
+ });
240
+
241
+ it('If user has not selected correct answer in the correct accordion, then the Add alternative answer button should be in enabled state', () => {
242
+ utilities.verifyElementNotDisabled(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton());
243
+ autoScoredSpecifyCorrectAnswerSection.steps.clickOnAddAlternativeAnswerButton();
244
+ });
245
+
246
+ it('CSS of warning popup', { tags: 'css' }, () => {
247
+ utilities.verifyCSS(dialogBoxBase.dialogBoxTitle(), {
248
+ 'color': css.color.flyoutTitle,
249
+ 'font-size': css.fontSize.heading,
250
+ 'font-weight': css.fontWeight.semibold
251
+ });
252
+ utilities.verifyCSS(dialogBoxBase.dialogBoxContent(), {
253
+ 'color': css.color.labels,
254
+ 'font-size': css.fontSize.default,
255
+ 'font-weight': css.fontWeight.regular
256
+ });
257
+ utilities.verifyCSS(dialogBoxBase.buttonClose().find('svg'), {
258
+ 'fill': css.color.closeIcon
259
+ });
260
+ });
261
+
262
+ it('Accessibility of warning popup', { tags: 'a11y' }, () => {
263
+ cy.checkAccessibility(dialogBoxBase.dialogBox());
264
+ dialogBoxBase.steps.closeWarningPopup();
265
+ });
266
+ },
267
+
268
+ //TODO need to remove once Save as you go is available for all questions
269
+ verifyWarningPopupAndAccordionNavigationWhenNoPointsAddedInAlternativeAccordion: () => {
270
+ it('When user tries to expand correct accordion when all the mandatory fields are not filled in the alternative accordion, then a warning popup should be displayed and on closing the popup, alternative 2 accordion should be in expanded state', () => {
271
+ autoScoredSpecifyCorrectAnswerSection.correctAnswerAccordion()
272
+ .click();
273
+ dialogBoxBase.steps.closeWarningPopup();
274
+ //TODO: Need to add error message according to question types
275
+ utilities.verifyElementVisibilityState(commonComponents.errorMessage(), 'exist');
276
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion()
277
+ .eq(1)
278
+ .should('have.attr', 'aria-expanded', 'true');
279
+ });
280
+ },
281
+
215
282
  /**
216
283
  * Verifies the contents and functionality of the 'Specify correct answer' accordion for multiple selection questions.
217
284
  * @param {{'Correct' | 'Alternative'}} accordionName - The name of the accordion to be used in the validation.
@@ -914,6 +914,73 @@ const tests = {
914
914
  ...ckEditorInsertTableComponent.tests,
915
915
  ...ckEditorInsertImageComponent.tests,
916
916
  ...ckEditorLinkComponent.tests,
917
+
918
+ //TODO need to remove once Save as you go is available for all questions
919
+ /**
920
+ * @description Verifies the behavior of the 'Add alternative answer' button, warning popups, and validation error messages
921
+ * in the 'Specify correct answer' section for alternative answers in auto-scored questions.
922
+ * @param {string|null} questionType - The type of the question (e.g., 'list ordering'). Pass `null` if not applicable.
923
+ * @example - verifyAutoScoredAddAlternativeAnswerButtonAndValidation();
924
+ */
925
+ verifyAutoScoredAddAlternativeAnswerButtonAndValidation: (questionType = null) => {
926
+ it('\'+ Add alternative answer\' button should be present', () => {
927
+ utilities.verifyInnerText(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), 'Add alternative answer');
928
+ utilities.verifyElementVisibilityState(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), 'visible');
929
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
930
+ .verifyPseudoClassBeforeProperty('content', '""');
931
+ });
932
+
933
+ it('CSS of \'Add Alternative answer\' button', { tags: 'css' }, () => {
934
+ utilities.verifyCSS(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton().find('p'), {
935
+ 'color': css.color.activeButtons,
936
+ 'font-size': css.fontSize.default,
937
+ 'font-weight': css.fontWeight.regular
938
+ });
939
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
940
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
941
+ });
942
+
943
+ it('If user has not selected correct answer in the correct accordion, then the Add alternative answer button should be in enabled state', () => {
944
+ utilities.verifyElementNotDisabled(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton());
945
+ autoScoredSpecifyCorrectAnswerSection.steps.clickOnAddAlternativeAnswerButton();
946
+ });
947
+
948
+ it('CSS of warning popup', { tags: 'css' }, () => {
949
+ utilities.verifyCSS(dialogBoxBase.dialogBoxTitle(), {
950
+ 'color': css.color.flyoutTitle,
951
+ 'font-size': css.fontSize.heading,
952
+ 'font-weight': css.fontWeight.semibold
953
+ });
954
+ utilities.verifyCSS(dialogBoxBase.dialogBoxContent(), {
955
+ 'color': css.color.labels,
956
+ 'font-size': css.fontSize.default,
957
+ 'font-weight': css.fontWeight.regular
958
+ });
959
+ utilities.verifyCSS(dialogBoxBase.buttonClose().find('svg'), {
960
+ 'fill': css.color.closeIcon
961
+ });
962
+ });
963
+
964
+ it('Accessibility of warning popup', { tags: 'a11y' }, () => {
965
+ cy.checkAccessibility(dialogBoxBase.dialogBox());
966
+ dialogBoxBase.steps.closeWarningPopup();
967
+ });
968
+ },
969
+
970
+ //TODO need to remove once Save as you go is available for all questions
971
+ verifyWarningPopupAndAccordionNavigationWhenNoPointsAddedInAlternativeAccordion: () => {
972
+ it('When user tries to expand correct accordion when all the mandatory fields are not filled in the alternative accordion, then a warning popup should be displayed and on closing the popup, alternative 2 accordion should be in expanded state', () => {
973
+ autoScoredSpecifyCorrectAnswerSection.correctAnswerAccordion()
974
+ .click();
975
+ dialogBoxBase.steps.closeWarningPopup();
976
+ //TODO: Need to add error message according to question types
977
+ utilities.verifyElementVisibilityState(commonComponents.errorMessage(), 'exist');
978
+ autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion()
979
+ .eq(1)
980
+ .should('have.attr', 'aria-expanded', 'true');
981
+ });
982
+ },
983
+
917
984
  verifyPreviewModesAndScoreWhenPointsAndCorrectAnswersIsNotSet: () => {
918
985
  it('When the user has not set correct answer option(s) and alloted points, \'Student view\' radio button should be checked, \'Grading view\' button should not be checked, 0 points should be displayed and no correct or incorrect icons should be displayed in the preview tab', () => {
919
986
  utilities.verifyInnerText(autoScoredScoringPreviewTab.studentViewRadioButtonLabel(), 'Student view');
@@ -1,6 +1,7 @@
1
1
  import constants from '../fixtures/constants';
2
2
  import utilities from '../support/helpers/utilities';
3
3
  import { createQuestionBasePage, questionInstructionsComponent, scoringSectionBaseEditTab, ckEditorToolbar, equationEditorFlyout, autoScoredScoringPreviewTab, autoScoredStudentViewSettings, numberLineCommonComponent, autoScoredSpecifyCorrectAnswerSection, autoScoredScoringSectionMultiResponseType, commonComponents, studentViewSettingsLabelComponent, randomizeOptionsComponent, additionalSettingsPanel, additionalSettingsAccessibilitySectionComponent, toolSettingsComponent, layoutSectionComponent } from './components';
4
+ import { createItemPage } from './createItemPage';
4
5
  const css = Cypress.env('css');
5
6
  const tolerance = 6.24;
6
7
 
@@ -57,6 +58,8 @@ const steps = {
57
58
  ...commonComponents.steps,
58
59
  ...layoutSectionComponent.steps,
59
60
  ...createQuestionBasePage.steps,
61
+ ...createItemPage.steps,
62
+
60
63
  navigateToLabelNumberLineTab: () => {
61
64
  numberLineLabelPage.labelNumberLineTab()
62
65
  .click();
@@ -823,7 +826,7 @@ const steps = {
823
826
  let containerHeight = $element[0].clientHeight;
824
827
  graphHeight = graphHeight - containerHeight - 32;
825
828
  const originY = graphHeight / 2 - tolerance / 2;
826
- const yPixel = originY - coordinate * ((graphHeight - tolerance) / range);
829
+ const yPixel = originY - y * ((graphHeight - tolerance) / range);
827
830
  cy.get(`.ngie-accordion .ngie-jxgbox svg ellipse[cy*="${Math.floor(yPixel)}"]:visible`)
828
831
  .should('not.exist');
829
832
  });
@@ -1,5 +1,6 @@
1
1
  import utilities from '../support/helpers/utilities';
2
2
  import { createQuestionBasePage, toolsAndControlsComponent, questionInstructionsComponent, resetPopupComponent, scoringSectionBaseEditTab, autoScoredScoringPreviewTab, autoScoredSpecifyCorrectAnswerSection, commonComponents, autoScoredScoringSectionMultiResponseType, toolSettingsComponent, additionalSettingsPanel, additionalSettingsAccessibilitySectionComponent, autoScoredStudentViewSettings, randomizeOptionsComponent, studentViewSettingsLabelComponent, defaultToolDropdown, layoutSectionComponent, numberLineCommonComponent } from './components';
3
+ import { createItemPage } from './createItemPage';
3
4
  import { dialogBoxBase } from './dialogBoxBase';
4
5
  const css = Cypress.env('css');
5
6
  const range = 22.18;
@@ -76,6 +77,7 @@ const steps = {
76
77
  ...defaultToolDropdown.steps,
77
78
  ...numberLineCommonComponent.steps,
78
79
  ...layoutSectionComponent.steps,
80
+ ...createItemPage.steps,
79
81
 
80
82
  /**
81
83
  * This function selects tool options
@@ -1,6 +1,7 @@
1
1
  import { createQuestionBasePage, autoScoredStudentViewSettings, autoScoredScoringPreviewTab, scoringSectionBaseEditTab, questionInstructionsComponent, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, commonComponents, additionalSettingsPanel, acceptedStudentInputComponent, studentViewSettingsLabelComponent, customizeSpecialCharacterComponent, studentResponseAndLayoutComponent } from "./components/";
2
2
  import { dialogBoxBase } from "./dialogBoxBase";
3
3
  import utilities from "../support/helpers/utilities";
4
+ import { createItemPage } from "./createItemPage";
4
5
  const css = Cypress.env('css');
5
6
 
6
7
  const selectors = {
@@ -104,6 +105,7 @@ const steps = {
104
105
  ...commonComponents.steps,
105
106
  ...additionalSettingsPanel.steps,
106
107
  ...autoScoredSpecifyCorrectAnswerSection.steps,
108
+ ...createItemPage.steps,
107
109
 
108
110
  verifyCorrectIcon: () => {
109
111
  utilities.verifyElementVisibilityState(autoScoredScoringPreviewTab.correctIcon(), 'visible');