itemengine-cypress-automation 1.0.377 → 1.0.378-fullExecutionFixes-5fff71f.0

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 (276) hide show
  1. package/Dockerfile +1 -0
  2. package/cypress/e2e/GradingGridView/gradingGridView.js +156 -0
  3. package/cypress/e2e/ILC/AudioResponseNew/barRecorderStyle.smoke.js +2 -0
  4. package/cypress/e2e/ILC/AudioResponseNew/compactRecorderStyle.smoke.js +4 -0
  5. package/cypress/e2e/ILC/AudioResponseNew/editTabBasicSection.js +4 -16
  6. package/cypress/e2e/ILC/BrainingCampManipulative/editTabBasicSection.js +1 -1
  7. package/cypress/e2e/ILC/BrowseItems/browseReviewItems.js +39 -7
  8. package/cypress/e2e/ILC/ChartsBar/HorizontalOrientationBarChart/gradingViewAndCorrectAnswerView.smoke.js +1 -1
  9. package/cypress/e2e/ILC/ChartsBar/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +33 -0
  10. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightBasic.js +25 -25
  11. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +37 -36
  12. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +37 -36
  13. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +37 -36
  14. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +1 -0
  15. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightBasic.js +26 -25
  16. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +39 -38
  17. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +31 -30
  18. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +35 -34
  19. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePointsLocked.js +247 -0
  20. package/cypress/e2e/ILC/ChartsBar/editQuestion.smoke.js +1 -1
  21. package/cypress/e2e/ILC/ChartsBar/editTabBasicSection.js +37 -0
  22. package/cypress/e2e/ILC/ChartsBar/headerSection.js +50 -2
  23. package/cypress/e2e/ILC/ChartsBar/specifyCorrectAnswerSection.js +92 -0
  24. package/cypress/e2e/ILC/ChartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePointsLocked.js +220 -0
  25. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightBasic.js +25 -25
  26. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +47 -46
  27. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +25 -24
  28. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +25 -24
  29. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +1 -0
  30. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightBasic.js +25 -25
  31. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +24 -23
  32. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +21 -20
  33. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +48 -46
  34. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePointsLocked.js +249 -0
  35. package/cypress/e2e/ILC/ChartsLine/editQuestion.smoke.js +3 -1
  36. package/cypress/e2e/ILC/ChartsLine/headerSection.js +18 -1
  37. package/cypress/e2e/ILC/ChartsLine/specifyCorrectAnswerSection.js +94 -0
  38. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabAddFeatureRadioButton.js +2 -3
  39. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabAddTranscriptRadioButton .js +2 -4
  40. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabStudentViewSettings.js +3 -3
  41. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerHeaderSectionAndButtons.js +2 -2
  42. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTab.js +1 -1
  43. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTabSupportedFileTypes.js +6 -0
  44. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTabTranscript.js +2 -3
  45. package/cypress/e2e/ILC/CkEditorEquationEditor/equationEditorBasicFile.js +4 -4
  46. package/cypress/e2e/ILC/CkEditorInsertImage/imageInfo.js +4 -4
  47. package/cypress/e2e/ILC/CkEditorInsertTable/tableDimension&FooterProperties.js +3 -3
  48. package/cypress/e2e/ILC/CkEditorInsertTable/tableStyle.js +11 -11
  49. package/cypress/e2e/ILC/CkEditorLink/uploadSection.js +1 -1
  50. package/cypress/e2e/ILC/ContentBlocks/editTabBasics.js +63 -4
  51. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/allOrNothingBasicForAllViews.smoke.js +116 -7
  52. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editTabScoring.js +1 -0
  53. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/pagination.js +1 -1
  54. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/studentViewSettingsForGroupedLayout.js +3 -0
  55. package/cypress/e2e/ILC/DrawingResponse/drawingResponseAdditionalSettings.js +1 -0
  56. package/cypress/e2e/ILC/DrawingResponse/drawingResponseBackground.js +2 -8
  57. package/cypress/e2e/ILC/DrawingResponse/drawingResponseCustomizeAdditionalOptions.js +1 -0
  58. package/cypress/e2e/ILC/DrawingResponse/drawingResponseEditTabBasicSection.js +3 -3
  59. package/cypress/e2e/ILC/DrawingResponse/drawingResponsePreviewTabContents.smoke.js +1 -3
  60. package/cypress/e2e/ILC/EssayResponse/createCustomCategory.smoke.js +2 -2
  61. package/cypress/e2e/ILC/EssayResponse/editCategoryFlyout.js +0 -1
  62. package/cypress/e2e/ILC/EssayResponse/editTabBasicSections.js +23 -37
  63. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/allOrNothingForAllViews.smoke.js +210 -0
  64. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/draggableOptions.js +2 -0
  65. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViewInIncompleteAuthoring.smoke.js +7 -7
  66. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editQuestion.smoke.js +40 -0
  67. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/allOrNothingForAllViews.smoke.js +216 -0
  68. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editQuestion.smoke.js +45 -0
  69. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/responseAnswersAndAcceptedStudentInput.js +3 -0
  70. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/supportedFileTypes.js +3 -1
  71. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +73 -0
  72. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +38 -0
  73. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +38 -0
  74. package/cypress/e2e/ILC/Graphing/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +87 -0
  75. package/cypress/e2e/ILC/Graphing/allOrNothingForAllViews.smoke.js +2 -2
  76. package/cypress/e2e/ILC/Graphing/checkAddAlternativeButton.js +35 -0
  77. package/cypress/e2e/ILC/Graphing/editQuestion.smoke.js +28 -0
  78. package/cypress/e2e/ILC/Graphing/editTabBasicSection.js +38 -0
  79. package/cypress/e2e/ILC/Graphing/editTabScoringSection.js +1 -0
  80. package/cypress/e2e/ILC/Graphing/headerSection.js +36 -4
  81. package/cypress/e2e/ILC/Graphing/layoutAndGridOptions.js +6 -3
  82. package/cypress/e2e/ILC/GridFill/addAlternateButton.js +40 -0
  83. package/cypress/e2e/ILC/GridFill/allOrNothingBasicForAllViews.smoke.js +210 -0
  84. package/cypress/e2e/ILC/GridFill/customizeLayoutFillImageBackgroundImage.js +2 -2
  85. package/cypress/e2e/ILC/GridFill/customizeLayoutSectionShadeCellsGridBorders.js +2 -0
  86. package/cypress/e2e/ILC/GridFill/editTabScoringSection.js +3 -0
  87. package/cypress/e2e/ILC/GridFill/headerSection.js +3 -3
  88. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +39 -0
  89. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  90. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +39 -0
  91. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountAllOrNothingCorrectPointsGreaterThanAlternativePoints.js +37 -0
  92. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountallOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  93. package/cypress/e2e/ILC/GridFill/scoring/cellshadeCountAllOrNothingAlternativePointsGreaterThanCorrectPoints.js +36 -0
  94. package/cypress/e2e/ILC/GridFill/scoring/checkLabelSaveAsYouGo.js +75 -0
  95. package/cypress/e2e/ILC/GridFill/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +2 -1
  96. package/cypress/e2e/ILC/ImageHighlight/allOrNothingForAllViews.smoke.js +212 -0
  97. package/cypress/e2e/ILC/ImageHighlight/customiseHighlightStyle.js +29 -0
  98. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +24 -0
  99. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +24 -0
  100. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +24 -0
  101. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +86 -0
  102. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/manuallyAndNonScored.js +2 -4
  103. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsBasic.js +1 -1
  104. package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +237 -1
  105. package/cypress/e2e/ILC/ListOrderingDropdown/checkAddAlternativeButton.js +35 -0
  106. package/cypress/e2e/ILC/ListOrderingDropdown/editTabBasicSection.js +24 -0
  107. package/cypress/e2e/ILC/ListOrderingDropdown/headerSection.js +108 -0
  108. package/cypress/e2e/ILC/ListOrderingDropdown/manuallyAndNonScoredEditTab.js +2 -1
  109. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +2 -4
  110. package/cypress/e2e/ILC/ListOrderingDropdown/specifyCorrectAnswerSection.js +7 -12
  111. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/specifyCorrectAnswerSection.js +10 -14
  112. package/cypress/e2e/ILC/ListOrderingNew/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +52 -0
  113. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +215 -0
  114. package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +23 -0
  115. package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +36 -9
  116. package/cypress/e2e/ILC/ListOrderingNew/manuallyAndNonScoredEditTab.js +2 -0
  117. package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +7 -23
  118. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +41 -0
  119. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +30 -0
  120. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +50 -0
  121. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +101 -0
  122. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/allOrNothingForAllViews.smoke.js +309 -0
  123. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/checkAddAlternativeButton.js +38 -0
  124. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabBasicSection.js +24 -0
  125. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabScoring.js +4 -1
  126. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/headerSection.js +36 -1
  127. package/cypress/e2e/ILC/Matching/Scoring/blankResponseScoring.js +38 -41
  128. package/cypress/e2e/ILC/Matching/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +98 -0
  129. package/cypress/e2e/ILC/Matching/allOrNothingScoringForAllViews.smoke.js +210 -0
  130. package/cypress/e2e/ILC/Matching/checkAlternativeButton.js +38 -0
  131. package/cypress/e2e/ILC/Matching/clickAndDrop.js +5 -5
  132. package/cypress/e2e/ILC/Matching/draggableOptions.js +7 -0
  133. package/cypress/e2e/ILC/Matching/editQuestion.smoke.js +3 -2
  134. package/cypress/e2e/ILC/Matching/editTabBasicSection.js +41 -0
  135. package/cypress/e2e/ILC/Matching/headerSection.js +38 -12
  136. package/cypress/e2e/ILC/Matching/questionInstructionsAndPromptSection.js +2 -15
  137. package/cypress/e2e/ILC/Matching/studentViewSettings.js +2 -0
  138. package/cypress/e2e/ILC/Matching/studentViewSettingsForGroupedLayout.js +1 -1
  139. package/cypress/e2e/ILC/MatchingDropdown/Scoring/blankResponseScoring.js +6 -6
  140. package/cypress/e2e/ILC/MatchingDropdown/allOrNothingScoringForAllViews.smoke.js +208 -0
  141. package/cypress/e2e/ILC/MultipleSelection/allOrNothingBasicForAllViews.smoke.js +2 -1
  142. package/cypress/e2e/ILC/MultipleSelectionGridNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +1 -0
  143. package/cypress/e2e/ILC/MultipleSelectionGridNew/previewContentsForAllViews.smoke.js +100 -69
  144. package/cypress/e2e/ILC/MultipleSelectionGridNew/styleAndLayoutCustomizationLayoutProperties.js +1 -0
  145. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithAlternatePointsGreaterThanCorrectPoints.js +79 -0
  146. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +42 -0
  147. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +42 -0
  148. package/cypress/e2e/ILC/NumberLine/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +75 -0
  149. package/cypress/e2e/ILC/NumberLine/checkAddAlternativeButton.js +32 -0
  150. package/cypress/e2e/ILC/NumberLine/editTabSection.js +38 -0
  151. package/cypress/e2e/ILC/NumberLine/headerSection.js +33 -4
  152. package/cypress/e2e/ILC/NumberLine/toolsAndControls.js +1 -1
  153. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +81 -0
  154. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +43 -0
  155. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +43 -0
  156. package/cypress/e2e/ILC/NumberLineLabel/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +76 -0
  157. package/cypress/e2e/ILC/NumberLineLabel/additionalSettingsBasic.js +1 -1
  158. package/cypress/e2e/ILC/NumberLineLabel/checkAddAlternativeButton.js +34 -0
  159. package/cypress/e2e/ILC/NumberLineLabel/editTabSection.js +38 -0
  160. package/cypress/e2e/ILC/NumberLineLabel/headerSection.js +37 -5
  161. package/cypress/e2e/ILC/NumberLineLabel/manuallyAndNonScoredEditTab.js +2 -1
  162. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/editQuestion.smoke.js +1 -1
  163. package/cypress/e2e/ILC/ShortTextResponseNew/allOrNothingBasicForAllViews.smoke.js +186 -0
  164. package/cypress/e2e/ILC/ShortTextResponseNew/editTabBasicSections.js +35 -51
  165. package/cypress/e2e/ILC/ShortTextResponseNew/headerSection.js +2 -4
  166. package/cypress/e2e/ILC/SingleSelectionGridNew/previewContentsForAllViews.smoke.js +101 -70
  167. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +86 -0
  168. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +86 -0
  169. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  170. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +3 -1
  171. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  172. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  173. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsScoringBasic.js +10 -3
  174. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +4 -2
  175. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +5 -3
  176. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  177. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsScoringBasic.js +4 -0
  178. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +64 -0
  179. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAddEvaluation.js +2 -0
  180. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAlternateAnswer.js +2 -0
  181. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +64 -0
  182. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  183. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  184. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  185. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  186. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsScoringBasic.js +8 -0
  187. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  188. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  189. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  190. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasic.js +1 -0
  191. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasicForAlternateAnswer.js +2 -0
  192. package/cypress/e2e/ILC/TextEntryMath/allOrNothingBasicForAllViewsFormulaTemplate.smoke.js +2 -0
  193. package/cypress/e2e/ILC/TextEntryMath/editTabBasicSection.js +27 -3
  194. package/cypress/e2e/ILC/TextEntryMath/headerSection.js +43 -0
  195. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +1 -0
  196. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +231 -0
  197. package/cypress/e2e/ILC/TextSelection/minimumScoringPenaltyPointsAndRoundingDropdown.js +1 -0
  198. package/cypress/e2e/ILC/ThinkSphere/createReviewItem.js +54 -1
  199. package/cypress/e2e/ILC/ThinkSphere/editTabBasicSection.js +53 -2
  200. package/cypress/e2e/ILC/ThinkSphere/editThinkSphereQuestion.smoke.js +145 -54
  201. package/cypress/e2e/ILC/ThinkSphere/equationEditorCreateCustomCategory.smoke.js +417 -0
  202. package/cypress/e2e/ILC/ThinkSphere/equationEditorEditCategoryFlyOut.js +291 -0
  203. package/cypress/e2e/ILC/ThinkSphere/planPhase.js +91 -9
  204. package/cypress/e2e/ILC/ThinkSphere/previewTabPlanSection.js +12 -12
  205. package/cypress/e2e/ILC/ThinkSphere/previewTabReviewSection.js +97 -0
  206. package/cypress/e2e/ILC/ThinkSphere/previewTabSolveSection.js +36 -0
  207. package/cypress/e2e/ILC/ThinkSphere/solvePhase.js +35 -2
  208. package/cypress/e2e/ILC/ThinkSphere/studentViewPlanTabSection.js +393 -0
  209. package/cypress/e2e/ILC/ThinkSphere/studentViewReviewTabSection.js +141 -0
  210. package/cypress/e2e/ILC/ToolAudioPlayerNew/headerSection.js +90 -2
  211. package/cypress/e2e/ILC/UploadResponse/editTabBasicSection.js +34 -0
  212. package/cypress/e2e/ILC/UploadResponse/headerSection.js +38 -1
  213. package/cypress/e2e/ILC/UploadResponse/uploadResponsePreview.js +50 -13
  214. package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +14 -29
  215. package/cypress/e2e/ILC/chartsDotsPlot/headerSection.js +16 -1
  216. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsBasic.js +27 -28
  217. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  218. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +24 -24
  219. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsGreaterThanAlternativePoints.js +39 -37
  220. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsBasic.js +22 -23
  221. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  222. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +25 -24
  223. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +31 -31
  224. package/cypress/e2e/ILC/chartsDotsPlot/scoring/toleranceThresholdScoring.js +18 -19
  225. package/cypress/e2e/ILC/chartsDotsPlot/specifyCorrectAnswerSection.js +96 -0
  226. package/cypress/e2e/Sessions/fetchResponses.js +3 -3
  227. package/cypress/e2e/Sessions/saveResponseScores.js +2 -2
  228. package/cypress/fixtures/thinkSphereWhiteboardTools.js +66 -0
  229. package/cypress/pages/audioPlayerPage.js +47 -22
  230. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  231. package/cypress/pages/chartsBarPage.js +45 -0
  232. package/cypress/pages/chartsDotPlotPage.js +25 -0
  233. package/cypress/pages/chartsLinePage.js +28 -3
  234. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +5 -1
  235. package/cypress/pages/components/browseItemsPage.js +109 -2
  236. package/cypress/pages/components/chartsCommonComponent.js +6 -2
  237. package/cypress/pages/components/ckEditorEquationEditorComponent.js +5 -4
  238. package/cypress/pages/components/ckEditorInsertImageComponent.js +2 -2
  239. package/cypress/pages/components/ckEditorInsertTableComponent.js +3 -3
  240. package/cypress/pages/components/ckEditorLinkComponent.js +8 -9
  241. package/cypress/pages/components/colorPopupComponent.js +6 -0
  242. package/cypress/pages/components/createQuestionBasePage.js +14 -1
  243. package/cypress/pages/components/draggableOptionsSectionComponent.js +2 -0
  244. package/cypress/pages/components/editCategoryFlyout.js +2 -2
  245. package/cypress/pages/components/equationEditorSectionCommonComponent.js +10 -25
  246. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +28 -0
  247. package/cypress/pages/components/gridQuestionCommonComponent.js +55 -2
  248. package/cypress/pages/components/imageCanvasComponent.js +4 -4
  249. package/cypress/pages/components/questionInstructionsComponent.js +2 -0
  250. package/cypress/pages/components/scoringSectionBaseEditTab.js +3 -0
  251. package/cypress/pages/components/specifyRowsAndColumnsComponent.js +7 -1
  252. package/cypress/pages/contentBlocksPage.js +2 -0
  253. package/cypress/pages/desmos3DGraphingPage.js +149 -4
  254. package/cypress/pages/desmosGeometryPage.js +184 -4
  255. package/cypress/pages/drawingResponsePage.js +2 -0
  256. package/cypress/pages/fillInTheGapsDragAndDropPage.js +3 -4
  257. package/cypress/pages/gradingGridViewPage.js +64 -0
  258. package/cypress/pages/graphingPage.js +27 -8
  259. package/cypress/pages/gridFillPage.js +15 -6
  260. package/cypress/pages/imageHighlightPage.js +115 -15
  261. package/cypress/pages/index.js +1 -0
  262. package/cypress/pages/listOrderingPage.js +40 -1
  263. package/cypress/pages/matchingPage.js +26 -7
  264. package/cypress/pages/numberLineLabelPage.js +31 -8
  265. package/cypress/pages/numberLinePage.js +19 -7
  266. package/cypress/pages/singleSelectionPage.js +30 -1
  267. package/cypress/pages/textEntryMathPage.js +24 -1
  268. package/cypress/pages/thinkSpherePage.js +1204 -48
  269. package/cypress/pages/uploadResponsePage.js +17 -1
  270. package/cypress/pages/videoResponsePage.js +3 -0
  271. package/cypress/support/commands.js +9 -0
  272. package/cypress/support/helpers/createItem.js +22 -3
  273. package/cypress/support/helpers/utilities.js +14 -1
  274. package/package.json +3 -3
  275. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/checkAnswerFunctionalityForAllViews.js +0 -0
  276. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/editQuestion.smoke.js +0 -0
@@ -1,15 +1,19 @@
1
1
  import utilities from "../support/helpers/utilities";
2
2
  import { browseItemsPage } from "../pages/components/browseItemsPage";
3
+ import { editCategoryFlyout } from "../pages/components/editCategoryFlyout";
3
4
  import { dialogBoxBase } from "../pages/dialogBoxBase";
4
- import { backgroundImageUploadComponent, createQuestionBasePage, scoringSectionBaseEditTab, commonComponents, additionalSettingsPanel, additionalSettingsAccessibilitySectionComponent, toolSettingsComponent, questionInstructionsComponent, studentViewSettingsLabelComponent, defaultToolDropdown, essayResponseCommonComponents, equationEditorSectionCommonComponent, equationEditorFlyout } from "./components"
5
+ import { backgroundImageUploadComponent, createQuestionBasePage, scoringSectionBaseEditTab, commonComponents, additionalSettingsPanel, additionalSettingsAccessibilitySectionComponent, toolSettingsComponent, questionInstructionsComponent, studentViewSettingsLabelComponent, defaultToolDropdown, essayResponseCommonComponents, equationEditorSectionCommonComponent, equationEditorFlyout, createCustomCategoryFlyout } from "./components"
5
6
  import { drawingResponsePage } from "./drawingResponsePage";
6
7
  import { optionsWrapperComponent } from "../pages/components/optionsWrapperComponent";
7
8
  import { selectQuestionResourceToolPage } from "./selectQuestionResourceToolPage";
8
9
  import { videoResponsePage } from "./videoResponsePage";
9
10
  import { singleSelectionPage } from "./singleSelectionPage";
11
+ import { essayResponsePage } from "./essayResponsePage";
12
+ import { equationEditorCategoriesAndSymbols } from "../fixtures/equationEditorCategoriesAndSymbols ";
10
13
  const css = Cypress.env('css');
11
14
 
12
15
  const selectors = {
16
+ ...essayResponsePage,
13
17
  ...backgroundImageUploadComponent,
14
18
  ...questionInstructionsComponent,
15
19
  ...commonComponents,
@@ -24,6 +28,10 @@ const selectors = {
24
28
  ...browseItemsPage,
25
29
  ...videoResponsePage,
26
30
  ...dialogBoxBase,
31
+ ...editCategoryFlyout,
32
+ ...createCustomCategoryFlyout,
33
+ ...createQuestionBasePage,
34
+
27
35
  editQuestionPencil: () => cy.get('[class*="Widgetstyles__HeaderContainer"] button.icon-pencil'),
28
36
  widgetHeaderQuestionTitle: () => cy.get('[class*="Widgetstyles__HeaderContainer"] [class*="Widgetstyles__QuestionTypeText"]'),
29
37
  imageUploadSection: () => cy.get('[class*="TabsComponentstyles__ImageUploadComponentWrapper"]'),
@@ -72,13 +80,13 @@ const selectors = {
72
80
  planStrategyListResetToDefault: () => cy.get('[class*="Planstyles__StrategiesWrapper"] [class*="Planstyles__DefaultResetWrapper"]'),
73
81
  planStrategyAddItemButton: () => cy.get('[class*="Planstyles__StrategiesWrapper"] [class*="ListOptionsComponentstyles__AddItemWrapper"] [role="button"]'),
74
82
  planStrategyCheckbox: () => cy.get('[class*="Planstyles__StrategiesWrapper"] .thinksphere-option-text-field-wrapper [data-ngie-testid*="-checkbox"]'),
75
- videoLinkComponent: () => utilities.getNthElement(cy.get('[class*="ListOptionsComponentstyles__UploadVideoWrapper"]'), 0),
83
+ videoLinkComponent: (nthElement = 0) => utilities.getNthElement(cy.get('[class*="ListOptionsComponentstyles__UploadVideoWrapper"]'), nthElement),
76
84
  uploadVideoLinkButton: () => cy.get('[class*="ListOptionsComponentstyles__UploadVideoTextWrapper"]'),
77
85
  planSentenceStarterSection: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"]'),
78
86
  planSentenceStarterListHeader: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] [class*="Planstyles__HeadingTextWrapper"]'),
79
87
  planSentenceStarterListResetToDefault: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] [class*="Planstyles__DefaultResetWrapper"]'),
80
88
  planSentenceStarterAddItemButton: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] [class*="ListOptionsComponentstyles__AddItemWrapper"] [role="button"]'),
81
- planSentenceStarterCheckbox : () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] .thinksphere-option-text-field-wrapper [data-ngie-testid*="-checkbox"]'),
89
+ planSentenceStarterCheckbox: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] .thinksphere-option-text-field-wrapper [data-ngie-testid*="-checkbox"]'),
82
90
  solvePhaseAccordian: () => cy.get('[class*="Planstyles__SolveAccordianWrapper"] [class~="MuiAccordionSummary-root"] [role="button"]'),
83
91
  solvePhaseAccordianLabel: () => cy.get('[class*="Solvestyles__AccordionLabel"]'),
84
92
  inputTypeVideoFile: () => cy.get('[class*="Planstyles__StrategiesWrapper"] input[type="file"]'),
@@ -90,7 +98,7 @@ const selectors = {
90
98
  editVideoButton: () => cy.get('[aria-label*="Change video"]'),
91
99
  deleteVideoButton: () => cy.get('[aria-label*="Delete video"]'),
92
100
  listInputField: () => cy.get('.option-component textarea[placeholder]'),
93
- deleteButton: () => cy.get('button[aria-label*="Delete"]'),
101
+ deleteButton: () => cy.get('button[aria-label*="Delete"].ngie-icon-btn-cls'),
94
102
  optionNumeration: () => cy.get('[class*="MuiInputAdornment-positionStart"]'),
95
103
  iconPencil: () => cy.get('div[class*="icon-pencil"]'),
96
104
  iconXCircle: () => cy.get('div[class*="icon-x-circle"]'),
@@ -102,7 +110,8 @@ const selectors = {
102
110
  thinkSphereMathQuestionHeaderDeleteIcon: () => cy.get('[class*="Widgetstyles__HeaderContainer"] [class*="icon-Delete"]'),
103
111
  addCheckMathQuestionButton: () => cy.get('.ngie-btn-typography').contains(`Add 'Check your math' question`),
104
112
  firstAvailableItemLink: () => utilities.getNthElement(cy.get('.browse-item-styled-link'), 0),
105
- saveButton: () => cy.get('.ngie-btn-typography').contains('save',{matchCase: false}),
113
+ saveButton: () => cy.get('.ngie-btn-typography').contains('save', { matchCase: false }),
114
+ cancelButton: () => cy.get('.ngie-btn-typography').contains('cancel', { matchCase: false }),
106
115
  AddCheckMathQuestionHeader: () => cy.get('.browse-title-wrapper').contains(`Add 'Check your math' question`),
107
116
  singleOptionTextFieldWrapper: () => cy.get('[class*="SingleOptionstyle__TextFieldWrapper"]'),
108
117
  customizeStampComponent: () => cy.get('[class*="CustomizeStampstyles__CustomizeStampWrapper"]'),
@@ -127,7 +136,7 @@ const selectors = {
127
136
  imageUploadSectionQuestionImageCrossIcon: () => thinkSpherePage.imageUploadSection().find('div[class*="QuestionImageComponentstyle__CrossIcon"]'),
128
137
  imageRadioButtonParentSvg: () => thinkSpherePage.imageRadioButton().parent().find('svg'),
129
138
  solvePhaseAccordionSvg: () => thinkSpherePage.solvePhaseAccordion().find('svg'),
130
- customizeToolsAndControlsSvg: () => thinkSpherePage.customizeToolsAndControls().find('svg'),
139
+ customizeToolsAndControlsPath: () => thinkSpherePage.customizeToolsAndControls().find('path'),
131
140
  solvePhaseToolsAndControlsOptionsTilesFeatherCheckIcon: () => thinkSpherePage.solveToolsAndControlsOptionsTiles('Text').find('[data-name="Icon feather-check"]'),
132
141
  solvePhaseToolsAndControlsOptionsTilesRectangle: () => thinkSpherePage.solveToolsAndControlsOptionsTiles('Text').find('[data-name*="Rectangle"]'),
133
142
  solvePhaseToolsAndControlsOptionsTilesDragItemFlexWrapperSvg: () => thinkSpherePage.solveToolsAndControlsOptionsTiles('Text').find('.drag-item-flex-wrapper svg'),
@@ -141,9 +150,9 @@ const selectors = {
141
150
  popupTitle: () => cy.get('[class*="dialog-title-wrapper"]'),
142
151
  strategyNameLabel: () => cy.get('[class*="ThinkSpherePreviewstyles__StrategyNameTextWrapper"]'),
143
152
  strategyNameInputField: () => cy.get('[class*="new-strategy-name-field"]'),
144
- addStrategyPopupCancelButton: () =>
153
+ addStrategyPopupCancelButton: () =>
145
154
  cy.get('.dialog-content').contains('Cancel'),
146
- addStrategyPopupSaveButton: () =>
155
+ addStrategyPopupSaveButton: () =>
147
156
  cy.get('.dialog-content').contains('Save'),
148
157
  // preview tab plan section selection
149
158
  questionInstructionPreviewTexWrapper: () => cy.get('.question-instruction.question-text-wrapper'),
@@ -151,9 +160,9 @@ const selectors = {
151
160
  questionInstructionPreviewImageExpandButton: () => cy.get('[class*="ThinkSpherePreviewstyles__ExpandImageIconWrapper"]'),
152
161
  questionInstructionImagePopup: () => cy.get('[class*="QuestionTextstyle__ImagePopupDiv"]'),
153
162
  closeExpandImagePopupButton: () => cy.get('.close-popup-btn'),
154
- PlanningPreviewWrapper : () => cy.get('[class*="PlanningPreviewstyles__PlanningPreviewWrapper"]'),
163
+ PlanningPreviewWrapper: () => cy.get('[class*="PlanningPreviewstyles__PlanningPreviewWrapper"]'),
155
164
  planningPreviewHeading: () => cy.get('[class*="PlanningPreviewstyles__HeadingWrapper"]'),
156
- planningWriteWrapper : () => cy.get('[class*="PlanningPreviewstyles__WriteWrapper"]'),
165
+ planningWriteWrapper: () => cy.get('[class*="PlanningPreviewstyles__WriteWrapper"]'),
157
166
  problemAskingWrapper: () => cy.get('[class*="PlanningPreviewstyles__ProblemAskingWrapper"]'),
158
167
  contentEditableDiv: () => cy.get('[class*="PlanningPreviewstyles__ContentEditableDiv"]'),
159
168
  micIconWrapper: () => cy.get('[class*="PlanningPreviewstyles__MicIconWrapper"]'),
@@ -181,9 +190,71 @@ const selectors = {
181
190
  gridItemsWrapper: (number) => cy.get('[class*="DragAndDropGridstyles__GridItemsWrapper"]').eq(number),
182
191
  dragButton: (number) => cy.get('[type="button"]').eq(number),
183
192
  customizeStampsButton: (customizeStampPosition) => cy.get(`button[aria-label="Stamp ${customizeStampPosition}"]`),
193
+ buttonSave: () => cy.get('.action-btn-wrapper button').eq(1),
194
+ buttonCancel: () => cy.get('.action-btn-wrapper button').eq(0),
195
+ nextGenThinkSphereCreateItemWrapper: () => cy.get('#nextgen-thinkshpere-create-item'),
196
+ equationEditorSectionTitle: () => cy.get('.equation-editor-text-title'),
197
+ referenceIdWrapper: () => cy.get('.edit-item-reference-id-wrapper'),
198
+ editBoxWrapper: () => cy.get('.edit-box-wrapper'),
199
+ editBoxText: () => cy.get('.edit-box-text'),
200
+ editBoxTextInput: () => thinkSpherePage.editBoxWrapper().find('input'),
201
+ editIconPencil: () => cy.get('.icon-pencil'),
202
+ thinkSphereQuestionHeader: () => cy.get('.edit-question-header-title'),
203
+ filterSectionQuestionTypesAccordion: () => cy.get('.filter-section-expansion-panel-summary-root'),
204
+ filterSectionQuestionAccordion: () => cy.get('.expansion-item-expansion-panel-summary-content'),
205
+ checkBox: () => cy.get('.MuiCheckbox-root'),
206
+ browseItemQuestionItem: () => cy.get('.browse-item-question-item'),
207
+ ErrorMessageContainer: () => cy.get('.ErrorMessageContainer'),
208
+ categoriesDropDown: () => cy.get('.dropdown-form-control[label="Categories"]'),
209
+ categoriesDropDownLabelText: () => cy.get('.dropdown-label-text'),
210
+ categoriesDropDownMenuItem: () => cy.get('.dropdown-menu-item .dropdown-label-text'),
211
+ categoriesDropDownParent: () => cy.get('.drop-down-parent'),
212
+ cardWrapper: () => cy.get('.card-wrapper'),
213
+ cardLabel: () => cy.get('.widget-card-label'),
214
+ thinkSphereQuestionInstructionCKEditor: () => cy.get('div.cke_editable[contenteditable="true"]'),
215
+ reviewTab: () => cy.get('div[aria-label="Review tab"]'),
216
+ solveTab: () => cy.get('div[aria-label="Solve tab"]'),
217
+ planTab: () => cy.get('div[aria-label="Plan tab"]'),
218
+ checkYourMathHeading: () => utilities.getNthElement(cy.get('div[class*="ReviewTabstyles__CheckYourMathTextWrapper"]'), 0),
219
+ problemAskingToMeTextWrapper: () => utilities.getNthElement(cy.get('div[class*="ReviewTabstyles__ProblemAskingToMeTextWrapper"]'), 0),
220
+ reviewQuestionWrapper: () => utilities.getNthElement(cy.get('div[class*="ReviewTabstyles__QuestionWrapper"]'), 0),
221
+ reviewComponentWrapper: () => utilities.getNthElement(cy.get('div[class*="ReviewTabstyles__ComponentWrapper"]'), 0),
222
+ problemStatementWrapper: () => utilities.getNthElement(cy.get('div[class*="ReviewTabstyles__ProblemStatementWrapper"]'), 0),
223
+ gradingViewRadioButton: () => cy.get('label[aria-label="Grading View"]'),
224
+ studentViewRadioButton: () => cy.get('label[aria-label="Student View"]'),
225
+ correctAnswerLabelWrapper: () => cy.get('div[class*="CorrectAnswerLabelWrapper"]'),
226
+ whiteboardComponent: () => cy.get('.whiteboard'),
227
+ whiteBoardTools: () => cy.get('.tools'),
228
+ whiteBoardSubTools: () => cy.get('.subtools'),
229
+ whiteBoardCanvasContainer: () => cy.get('.canvas-container'),
230
+ whiteBoardFooter: () => cy.get('.footer-container'),
231
+ whiteBoardNewPage: () => cy.get('[data-testid=new-page]'),
232
+ whiteBoardPreviousPage: () => cy.get('[data-testid=previous]'),
233
+ whiteBoardNextPage: () => cy.get('[data-testid=next]'),
234
+ whiteBoardRecordOrPauseButton: () => cy.get('[data-testid=record]'),
235
+ whiteBoardStopButton: () => cy.get('[data-testid=stop]'),
236
+ whiteBoardPage: () => cy.get('.page'),
237
+ whiteboardRecordingStatus: () => cy.get('.status-container'),
238
+ whiteboardRecordingTimeStatus: () => cy.get('.timecode-container'),
239
+ whiteboardPlayBackStatus: () => cy.get('[class*=ReviewTabstyles__ThinkSphereWhiteboardPlayerContainer]'),
240
+ whiteboardPlayer: () => cy.get('[class*=ThinkSphereWhiteboardPlayerstyles__ThinkSphereWhiteboardPlayerWrapper]'),
241
+ whiteboardRecordingInProgressWarning: () => cy.get('[class*=whiteboard-recording-warning-popup]'),
242
+ whiteboardRecordingInProgressWarningOkButton: () => cy.get('[data-testid=accept-button]'),
243
+ whiteboardRecordingInProgressWarningHeader: () => cy.get('#alert-dialog-title'),
244
+ whiteboardRecordingInProgressWarningDescription: () => cy.get('#alert-dialog-description'),
245
+ whiteboardPlaybackPlayButton: () => cy.get('[data-testid=play]'),
246
+ whiteboardPlaybackPauseButton: () => cy.get('[data-testid=pause]'),
247
+ whiteboardPlaybackTime: () => cy.get('[data-testid=time]'),
248
+ whiteboardPlaybackSpeakerButton: () => cy.get('.speaker-button'),
249
+ whiteboardVolumeIcon: () => cy.get('.volume-icon'),
250
+ whiteboardMutedIcon: () => cy.get('.mute-icon'),
251
+ whiteboardVolumeSlider: () => cy.get('[class*=slider-container]'),
252
+ submitButton: () => cy.get('button[aria-label="Submit"]'),
253
+ goToGradingViewButton: () => cy.contains('button', 'GO TO GRADING VIEW'),
184
254
  };
185
255
 
186
256
  const steps = {
257
+ ...essayResponsePage.steps,
187
258
  ...backgroundImageUploadComponent.steps,
188
259
  ...questionInstructionsComponent.steps,
189
260
  ...scoringSectionBaseEditTab.steps,
@@ -200,6 +271,7 @@ const steps = {
200
271
  ...browseItemsPage.steps,
201
272
  ...videoResponsePage.steps,
202
273
  ...createQuestionBasePage.steps,
274
+ ...createCustomCategoryFlyout.steps,
203
275
 
204
276
  /**
205
277
  * Navigates to the ThinkSphere create question page.
@@ -271,12 +343,24 @@ const steps = {
271
343
  cy.wait('@setItem');
272
344
  },
273
345
 
346
+ clickOnCancelButton: () => {
347
+ cy.interceptGraphql('setItem');
348
+ thinkSpherePage.cancelButton()
349
+ .click();
350
+ },
351
+
274
352
  clickOnSwapButton: () => {
275
353
  thinkSpherePage.ThinkSphereMathQuestionHeaderSwapIcon()
276
354
  .click();
277
355
  cy.wait(2000);
278
356
  },
279
357
 
358
+ clickOnEditButton: () => {
359
+ thinkSpherePage.ThinkSphereMathQuestionHeaderPencilIcon()
360
+ .click();
361
+ cy.wait(2000);
362
+ },
363
+
280
364
  clickOnDeleteButton: () => {
281
365
  thinkSpherePage.thinkSphereMathQuestionHeaderDeleteIcon()
282
366
  .click();
@@ -320,20 +404,20 @@ const steps = {
320
404
  */
321
405
  uploadVideoFile: (file) => {
322
406
  const fileName = file.split('/').pop(); // Extracts only 'sample.mp4'
323
-
407
+
324
408
  cy.fixture(file, 'binary') // Read the file as binary
325
409
  .then(Cypress.Blob.binaryStringToBlob)
326
410
  .then((blob) => {
327
411
  const fileObj = new File([blob], fileName, { type: 'video/mp4' });
328
412
  const dataTransfer = new DataTransfer();
329
413
  dataTransfer.items.add(fileObj);
330
-
414
+
331
415
  thinkSpherePage.inputTypeVideoFile().then(($input) => {
332
416
  $input[0].files = dataTransfer.files;
333
417
  cy.wrap($input).trigger('change', { force: true });
334
418
  });
335
419
  });
336
-
420
+
337
421
  cy.wait(4000);
338
422
  },
339
423
 
@@ -409,13 +493,13 @@ const steps = {
409
493
  },
410
494
  expandSolvePhaseAccordion: () => {
411
495
  thinkSpherePage.solvePhaseAccordion()
412
- .click()
413
- .should('have.attr', 'aria-expanded', 'true');
496
+ .click()
497
+ .should('have.attr', 'aria-expanded', 'true');
414
498
  },
415
499
  expandCustomizeToolsAndControls: () => {
416
500
  thinkSpherePage.customizeToolsAndControls()
417
- .click()
418
- .should('have.attr', 'aria-expanded', 'true');
501
+ .click()
502
+ .should('have.attr', 'aria-expanded', 'true');
419
503
  },
420
504
  /**
421
505
  * Verifies the tools and controls options.
@@ -432,9 +516,9 @@ const steps = {
432
516
  */
433
517
  selectOptionFromToolsAndControls: (option) => {
434
518
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
435
- .click();
519
+ .click();
436
520
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
437
- .should('have.attr', 'data-aria-pressed', 'true');
521
+ .should('have.attr', 'data-aria-pressed', 'true');
438
522
  },
439
523
  /**
440
524
  * Deselects an option from tools and controls.
@@ -442,9 +526,9 @@ const steps = {
442
526
  */
443
527
  deselectOptionFromToolsAndControls: (option) => {
444
528
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
445
- .click();
529
+ .click();
446
530
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
447
- .should('have.attr', 'data-aria-pressed', 'false');
531
+ .should('have.attr', 'data-aria-pressed', 'false');
448
532
  },
449
533
  /**
450
534
  * Verifies if an option is selected.
@@ -452,7 +536,7 @@ const steps = {
452
536
  */
453
537
  verifyOptionIsSelected: (option) => {
454
538
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
455
- .should('have.attr', 'data-aria-pressed', 'true');
539
+ .should('have.attr', 'data-aria-pressed', 'true');
456
540
  },
457
541
  /**
458
542
  * Verifies if an option is not selected.
@@ -460,7 +544,7 @@ const steps = {
460
544
  */
461
545
  verifyOptionIsNotSelected: (option) => {
462
546
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
463
- .should('have.attr', 'data-aria-pressed', 'false');
547
+ .should('have.attr', 'data-aria-pressed', 'false');
464
548
  },
465
549
 
466
550
  /**
@@ -493,7 +577,7 @@ const steps = {
493
577
  utilities.getNthElement(thinkSpherePage.deleteButton(), index)
494
578
  .click();
495
579
  },
496
-
580
+
497
581
  /**
498
582
  * Verifies the delete option button disabled state.
499
583
  * @param {string} list - The list to verify ('strategy' or other).
@@ -543,7 +627,8 @@ const steps = {
543
627
  .click();
544
628
  } else {
545
629
  thinkSpherePage.planSentenceStarterAddItemButton()
546
- .click();
630
+ .click()
631
+ .trigger('mouseout', { force: true });
547
632
  }
548
633
  },
549
634
 
@@ -574,14 +659,14 @@ const steps = {
574
659
  .within(() => {
575
660
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
576
661
  .clear()
577
- .type(text);
662
+ .type(text, { delay: 500 });
578
663
  });
579
664
  } else {
580
665
  thinkSpherePage.planSentenceStarterSection()
581
666
  .within(() => {
582
667
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
583
668
  .clear()
584
- .type(text);
669
+ .type(text, { delay: 500 });
585
670
  });
586
671
  }
587
672
  },
@@ -708,9 +793,9 @@ const steps = {
708
793
  },
709
794
 
710
795
  verifyOptionAlignmentIsSelected: (direction) => {
711
- if(direction === 'topLeft') {
796
+ if (direction === 'topLeft') {
712
797
  thinkSpherePage.whiteBoardCanvas()
713
- .should('not.have.css', 'justify-content', 'start');
798
+ .should('not.have.css', 'justify-content', 'start');
714
799
  } else {
715
800
  thinkSpherePage.whiteBoardCanvas()
716
801
  .should('have.css', 'justify-content', (direction === 'center' || direction === 'flex-end') ? 'normal' : direction);
@@ -720,7 +805,7 @@ const steps = {
720
805
  }
721
806
  }
722
807
  },
723
-
808
+
724
809
  clickOnImageRadioButton: () => {
725
810
  thinkSpherePage.imageRadioButton()
726
811
  .click();
@@ -729,10 +814,11 @@ const steps = {
729
814
  clickOnEditQuestionIcon: () => {
730
815
  utilities.getNthElement(thinkSpherePage.editQuestionPencil(), 0)
731
816
  .click();
817
+ cy.wait(1000);
732
818
  },
733
819
 
734
820
  clickOnQuestionInstructionExpandImageButton: () => {
735
- thinkSpherePage.questionInstructionPreviewImageExpandButton()
821
+ utilities.getNthElement(thinkSpherePage.questionInstructionPreviewImageExpandButton(), 0)
736
822
  .click();
737
823
  },
738
824
 
@@ -855,9 +941,699 @@ const steps = {
855
941
  verifyCustomizeStampSelectedUnselected: (selected, customizeStampPosition) => {
856
942
  utilities.verifyElementAttribute(thinkSpherePage.customizeStampsButton(customizeStampPosition), 'aria-checked', selected ? 'true' : 'false');
857
943
  },
944
+
945
+ saveCustomCategory: () => {
946
+ thinkSpherePage.buttonSave()
947
+ .click();
948
+ },
949
+
950
+ cancelCustomCategory: () => {
951
+ thinkSpherePage.buttonCancel()
952
+ .click();
953
+ },
954
+
955
+ createCustomCategoryWithMultipleCategoryCharacters: () => {
956
+ cy.log('Creating a custom category by selecting \'Keypad\' category, partially selecting \'Basic\' and \'Greek\' categories')
957
+ createCustomCategoryFlyout.steps.openCreateCustomCategoryFlyout();
958
+ createCustomCategoryFlyout.steps.checkCategoryAccordionCheckbox(`${equationEditorCategoriesAndSymbols['primary'].displayName}`);
959
+ cy.wait(2000);
960
+ createCustomCategoryFlyout.steps.verifyPartiallyCheckedStateOfCategoryAccordionCheckbox(`${equationEditorCategoriesAndSymbols['matrices'].displayName}`);
961
+ createCustomCategoryFlyout.steps.expandCategoryAccordion(`Greek Symbols`);
962
+ createCustomCategoryFlyout.steps.selectASymbolInCreateCustomCategoryFlyout(`${equationEditorCategoriesAndSymbols['greek'].displayName}`, `${equationEditorCategoriesAndSymbols.greek.symbols.gamma.ariaLabel}`);
963
+ createCustomCategoryFlyout.steps.selectASymbolInCreateCustomCategoryFlyout(`${equationEditorCategoriesAndSymbols['greek'].displayName}`, `${equationEditorCategoriesAndSymbols.greek.symbols.delta.ariaLabel}`);
964
+ createCustomCategoryFlyout.steps.addInputToCustomCategoryNameInputField('Custom category with name.');
965
+ thinkSpherePage.steps.saveCustomCategory();
966
+ utilities.verifyElementVisibilityState(dialogBoxBase.dialogBox(), 'notExist');
967
+ },
968
+
969
+ createCustomCategoryWithNameAndIcon: () => {
970
+ cy.log('Creating a category by selecting \'Arrows\' category')
971
+ createCustomCategoryFlyout.steps.openCreateCustomCategoryFlyout();
972
+ createCustomCategoryFlyout.steps.checkCategoryAccordionCheckbox(`${equationEditorCategoriesAndSymbols['geo'].displayName}`);
973
+ createCustomCategoryFlyout.steps.addInputToCustomCategoryNameInputField('Custom category with name and icon.');
974
+ createCustomCategoryFlyout.steps.addInputToCategoryIconInputField('#');
975
+ thinkSpherePage.steps.saveCustomCategory();
976
+ },
977
+
978
+ verifyCategoryCharactersAndUnSelectedState: (arrayOfSymbolsAriaLabel) => {
979
+ thinkSpherePage.categoryCharacters()
980
+ .then(($symbols) => {
981
+ for (let index = 10; index < $symbols.length - 1; index++) {
982
+ editCategoryFlyout.categoryCharacters()
983
+ .eq(index)
984
+ .should('not.have.class', 'Mui-selected')
985
+ .invoke('attr', 'aria-label')
986
+ .then((ariaLabel) => {
987
+ const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
988
+ editCategoryFlyout.categoryCharacters()
989
+ .eq(index)
990
+ .verifyTooltip(tooltipText);
991
+ });
992
+ }
993
+ });
994
+ },
995
+
996
+ verifyCategoryCharactersAndSelectedState: (arrayOfSymbolsAriaLabel) => {
997
+ editCategoryFlyout.categoryCharacters()
998
+ .then(($symbols) => {
999
+ for (let index = 0; index < arrayOfSymbolsAriaLabel.length - 1; index++) {
1000
+ editCategoryFlyout.categoryCharacters()
1001
+ .eq(index)
1002
+ .should('have.class', 'Mui-selected')
1003
+ .invoke('attr', 'aria-label')
1004
+ .then((ariaLabel) => {
1005
+ const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
1006
+ editCategoryFlyout.categoryCharacters()
1007
+ .eq(index)
1008
+ .verifyTooltip(tooltipText);
1009
+ });
1010
+ }
1011
+ });
1012
+ },
1013
+
1014
+ expandDropdown: () => {
1015
+ thinkSpherePage.categoriesDropDownParent()
1016
+ .click();
1017
+ },
1018
+
1019
+ verifyDropdownOptions: (dropDownListArray) => {
1020
+ thinkSpherePage.categoriesDropDownMenuItem().should('have.length', dropDownListArray.length).each(($item) => {
1021
+ cy.wrap($item)
1022
+ .invoke('text')
1023
+ .then((text) => {
1024
+ const trimmedText = text.trim();
1025
+ expect(dropDownListArray).to.include(trimmedText);
1026
+ });
1027
+ });
1028
+ },
1029
+
1030
+ clickOnDropDownCategory: (index) => {
1031
+ thinkSpherePage.categoriesDropDownMenuItem().eq(index).click();
1032
+ },
1033
+
1034
+ clickOnQuestionTypesAccordion: () => {
1035
+ thinkSpherePage.filterSectionQuestionTypesAccordion()
1036
+ .click()
1037
+ },
1038
+
1039
+ typeInSearchBar: (input) => {
1040
+ thinkSpherePage.searchBar()
1041
+ .clear()
1042
+ .type(input)
1043
+ .should('have.value', input);
1044
+ },
1045
+
1046
+ searchInSearchBar: (input) => {
1047
+ thinkSpherePage.searchBar()
1048
+ .clear()
1049
+ .type(input)
1050
+ .should('have.value', input)
1051
+ .type('{enter}');
1052
+ },
1053
+
1054
+ clickOnSolvePhaseAccordionIcon: (element) => {
1055
+ thinkSpherePage.solvePhaseAccordionExpandIcon()
1056
+ .click();
1057
+ },
1058
+
1059
+ verifyElementDoesNotHaveExpandedClass: (element) => {
1060
+ element.should('not.have.class', 'Mui-expanded');
1061
+ },
1062
+
1063
+ verifyElementDoesNotHaveCheckedClass: (element) => {
1064
+ element.should('not.have.class', 'Mui-checked');
1065
+ },
1066
+
1067
+ verifyThinkSphereSearchBarPlaceholder: () => {
1068
+ thinkSpherePage.searchBar().should('have.attr', 'placeholder', 'Search by title, tags and content');
1069
+ },
1070
+
1071
+ verifyReviewItemSearchBarPlaceholder: () => {
1072
+ thinkSpherePage.searchBar().should('have.attr', 'placeholder', 'Search by question type');
1073
+ },
1074
+
1075
+ verifyEquationEditorSectionCategoryNotPressed: () => {
1076
+ thinkSpherePage.equationEditorSectionCategories().eq(1).should('have.attr', 'data-aria-pressed', 'false');
1077
+ },
1078
+
1079
+ verifyEquationEditorSectionCategoryIsPressed: () => {
1080
+ thinkSpherePage.equationEditorSectionCategories().eq(10).should('have.attr', 'data-aria-pressed', 'true');
1081
+ },
1082
+
1083
+ verifyTypeCheckBoxStrategy: () => {
1084
+ utilities.getNthElement(thinkSpherePage.planStrategyCheckbox(), 5)
1085
+ .find('input').should('have.attr', 'type', 'checkbox');
1086
+ },
1087
+
1088
+ verifyTypeCheckBoxSentenceStarter: () => {
1089
+ utilities.getNthElement(thinkSpherePage.planSentenceStarterCheckbox(), 5)
1090
+ .find('input').should('have.attr', 'type', 'checkbox');
1091
+ },
1092
+
1093
+ verifyStrategyCheckBoxNotChecked: () => {
1094
+ utilities.getNthElement(thinkSpherePage.planStrategyCheckbox(), 5)
1095
+ .find('input').should('not.have.attr', 'checked');
1096
+ },
1097
+
1098
+ verifySentenceStrategyCheckBoxNotChecked: () => {
1099
+ utilities.getNthElement(thinkSpherePage.planSentenceStarterCheckbox(), 5)
1100
+ .find('input').should('not.have.attr', 'checked');
1101
+ },
1102
+
1103
+ verifyTextIsNotEmpty: (element) => {
1104
+ element.invoke('text')
1105
+ .should('not.be.empty');
1106
+ },
1107
+
1108
+ verifyLength: (element, length) => {
1109
+ element.should('have.length', length);
1110
+ },
1111
+
1112
+ verifyFilterSectionExpanded: () => {
1113
+ thinkSpherePage.filterSectionQuestionTypesAccordion().should('have.class', 'Mui-expanded');
1114
+ },
1115
+
1116
+ verifyFilterSectionCollapsed: () => {
1117
+ thinkSpherePage.filterSectionQuestionTypesAccordion().should('not.have.class', 'Mui-expanded');
1118
+ },
1119
+
1120
+ verifySolvePhaseAccordionExpanded: () => {
1121
+ thinkSpherePage.solvePhaseAccordionExpandIcon().should('have.class', 'Mui-expanded');
1122
+ },
1123
+
1124
+ verifySolvePhaseAccordionCollapsed: () => {
1125
+ thinkSpherePage.solvePhaseAccordionExpandIcon().should('not.have.class', 'Mui-expanded');
1126
+ },
1127
+
1128
+ addQuestionInstructionInnerHTML: (innerHTML) => {
1129
+ thinkSpherePage.thinkSphereQuestionInstructionCKEditor()
1130
+ .invoke('html', innerHTML);
1131
+ },
1132
+
1133
+ verifyQuestionInstructionIncreasedHeightAndScrollBar: () => {
1134
+ thinkSpherePage.thinkSphereQuestionInstructionCKEditor()
1135
+ .invoke('height') // Get the height of the element
1136
+ .should('be.gt', 198);
1137
+
1138
+ thinkSpherePage.thinkSphereQuestionInstructionCKEditor()
1139
+ .should(($el) => {
1140
+ const scrollWidth = $el[0].scrollWidth;
1141
+ const clientWidth = $el[0].clientWidth;
1142
+
1143
+ // Assert that horizontal scroll is present
1144
+ expect(scrollWidth).to.be.greaterThan(clientWidth);
1145
+ });
1146
+ },
1147
+
1148
+ verifyQuestionImagePopup: () => {
1149
+ thinkSpherePage.dialogBoxRoot()
1150
+ .within(() => {
1151
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionImagePopup(), 'visible');
1152
+ utilities.verifyElementVisibilityState(thinkSpherePage.closeExpandImagePopupButton(), 'visible');
1153
+ });
1154
+ },
1155
+
1156
+ verifyAddNewStrategyPopupCloseFunctionality: () => {
1157
+ let countBeforeOpeningPopup, countAfterClosingPopup;
1158
+ cy.get(thinkSpherePage.strategiesBoxPreviewTab())
1159
+ .its('length')
1160
+ .then((count) => {
1161
+ countBeforeOpeningPopup = count;
1162
+ cy.log('Count before opening popup:', countBeforeOpeningPopup);
1163
+ });
1164
+ thinkSpherePage.addNewStrategyButton().click();
1165
+ thinkSpherePage.addStrategyPopupCancelButton().click();
1166
+ cy.get(thinkSpherePage.strategiesBoxPreviewTab())
1167
+ .its('length')
1168
+ .then((count) => {
1169
+ countAfterClosingPopup = count;
1170
+ cy.log('Count after closing popup:', countAfterClosingPopup);
1171
+ expect(countAfterClosingPopup).to.equal(countBeforeOpeningPopup);
1172
+ });
1173
+ },
1174
+
1175
+ verifyAddNewStrategyPopupSaveFunctionality: () => {
1176
+ let countBeforeOpeningPopup, countAfterClosingPopup;
1177
+ thinkSpherePage.strategiesBoxPreviewTab()
1178
+ .its('length')
1179
+ .then((count) => {
1180
+ countBeforeOpeningPopup = count;
1181
+ cy.log('Count before opening popup:', countBeforeOpeningPopup);
1182
+ });
1183
+ thinkSpherePage.addNewStrategyButton().click();
1184
+ thinkSpherePage.strategyNameInputField().type('Test Strategy');
1185
+ thinkSpherePage.addStrategyPopupSaveButton().click();
1186
+ thinkSpherePage.strategiesBoxPreviewTab()
1187
+ .its('length')
1188
+ .then((count) => {
1189
+ countAfterClosingPopup = count;
1190
+ cy.log('Count after closing popup:', countAfterClosingPopup);
1191
+ expect(countAfterClosingPopup).to.equal(countBeforeOpeningPopup + 1);
1192
+ });
1193
+ },
1194
+
1195
+ verifyVideoPopupDialogBox: () => {
1196
+ thinkSpherePage.dialogBoxRoot()
1197
+ .within(() => {
1198
+ utilities.verifyElementVisibilityState(thinkSpherePage.dialogBoxTitle(), 'visible');
1199
+ utilities.verifyInnerText(thinkSpherePage.dialogBoxTitle(), 'Create_a_model');
1200
+ utilities.verifyElementVisibilityState(thinkSpherePage.buttonClose(), 'visible');
1201
+ });
1202
+ },
1203
+
1204
+ verifySentenceStartersDropdown: () => {
1205
+ thinkSpherePage.chooseStarterTextIconWrapper()
1206
+ .within(() => {
1207
+ utilities.verifyElementVisibilityState(thinkSpherePage.starterIocn(), 'visible');
1208
+ utilities.verifyInnerText(thinkSpherePage.starterTextWrapper(), 'Starters');
1209
+ });
1210
+ thinkSpherePage.chooseStarterDropdown()
1211
+ .verifyPseudoClassBeforeProperty('content', '""');
1212
+ },
1213
+
1214
+ verifySentenceStartersDropdownOptions: (sentenceStartersTextDefault) => {
1215
+ sentenceStartersTextDefault.forEach((label, index) => {
1216
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.chooseStartersListOptionLabels(), index), label);
1217
+ });
1218
+ },
1219
+
1220
+ verifySentenceStartersDropdownFunctionality: () => {
1221
+ thinkSpherePage.writePlanWrapper()
1222
+ .within(() => {
1223
+ thinkSpherePage.contentEditableDiv().clear();
1224
+ });
1225
+ thinkSpherePage.steps.expandChooseStarterDropdown();
1226
+ utilities.getNthElement(thinkSpherePage.chooseStartersListOptions(), 1).click();
1227
+ thinkSpherePage.writePlanWrapper()
1228
+ .within(() => {
1229
+ thinkSpherePage.contentEditableDiv().should('have.value', 'First, I will ');
1230
+ thinkSpherePage.contentEditableDiv().clear();
1231
+ });
1232
+ },
1233
+
1234
+ verifyProblemAskingHeading: () => {
1235
+ thinkSpherePage.problemAskingWrapper()
1236
+ .within(() => {
1237
+ utilities.verifyInnerText(thinkSpherePage.subheadingWrapper(), 'The problem is asking me to');
1238
+ utilities.verifyElementVisibilityState(thinkSpherePage.subheadingWrapper(), 'visible');
1239
+ });
1240
+ },
1241
+
1242
+ verifyProblemAskingTextArea: () => {
1243
+ thinkSpherePage.problemAskingWrapper()
1244
+ .within(() => {
1245
+ utilities.verifyElementVisibilityState(thinkSpherePage.contentEditableDiv(), 'visible');
1246
+ utilities.verifyElementAttribute(thinkSpherePage.contentEditableDiv(), 'placeholder', 'Enter your text here');
1247
+ });
1248
+ },
1249
+
1250
+ verifyProblemAskingMicSection: (isGrading=false) => {
1251
+ thinkSpherePage.problemAskingWrapper()
1252
+ .within(() => {
1253
+ utilities.verifyElementVisibilityState(thinkSpherePage.micIconWrapper(), 'visible');
1254
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'role', 'button');
1255
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'aria-label', 'Mic button');
1256
+ if(isGrading) {
1257
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'tabindex', -1);
1258
+ }
1259
+ });
1260
+ },
1261
+
1262
+ verifyProblemAskingTextAreaFunctionality: (textToEnter) => {
1263
+ thinkSpherePage.problemAskingWrapper()
1264
+ .within(() => {
1265
+ thinkSpherePage.contentEditableDiv().type(textToEnter);
1266
+ thinkSpherePage.contentEditableDiv().should('have.value', textToEnter);
1267
+ });
1268
+ },
1269
+
1270
+ verifyStrategiesToPlanHeading: () => {
1271
+ thinkSpherePage.strategiesToPlanWrapper()
1272
+ .within(() => {
1273
+ utilities.verifyInnerText(thinkSpherePage.subheadingWrapper(), 'Add strategies to plan');
1274
+ utilities.verifyElementVisibilityState(thinkSpherePage.subheadingWrapper(), 'visible');
1275
+ });
1276
+ },
1277
+
1278
+ verifyWritePlanHeading: () => {
1279
+ thinkSpherePage.writePlanWrapper()
1280
+ .within(() => {
1281
+ utilities.verifyInnerText(thinkSpherePage.subheadingWrapper(), 'Write your plan');
1282
+ utilities.verifyElementVisibilityState(thinkSpherePage.subheadingWrapper(), 'visible');
1283
+ });
1284
+ },
1285
+
1286
+ verifyWritePlanTextArea: () => {
1287
+ thinkSpherePage.writePlanWrapper()
1288
+ .within(() => {
1289
+ utilities.verifyElementVisibilityState(thinkSpherePage.contentEditableDiv(), 'visible');
1290
+ utilities.verifyElementAttribute(thinkSpherePage.contentEditableDiv(), 'placeholder', 'Enter your plan here');
1291
+ });
1292
+ },
1293
+
1294
+ verifyWritePlanMicSection: (isGrading=false) => {
1295
+ thinkSpherePage.writePlanWrapper()
1296
+ .within(() => {
1297
+ utilities.verifyElementVisibilityState(thinkSpherePage.micIconWrapper(), 'visible');
1298
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'role', 'button');
1299
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'aria-label', 'Mic button');
1300
+ if(isGrading) {
1301
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'tabindex', -1);
1302
+ }
1303
+ });
1304
+ },
1305
+
1306
+ verifyWritePlanTextAreaFunctionality: (planTextToEnter) => {
1307
+ thinkSpherePage.writePlanWrapper()
1308
+ .within(() => {
1309
+ thinkSpherePage.contentEditableDiv().type(planTextToEnter);
1310
+ thinkSpherePage.contentEditableDiv().should('have.value', planTextToEnter);
1311
+ thinkSpherePage.contentEditableDiv().clear();
1312
+ });
1313
+ },
1314
+
1315
+ verifyStrategyChipClickFunctionality: () => {
1316
+ thinkSpherePage.writePlanWrapper()
1317
+ .within(() => {
1318
+ thinkSpherePage.contentEditableDiv().clear();
1319
+ });
1320
+ thinkSpherePage.strategyChip().click();
1321
+ thinkSpherePage.writePlanWrapper()
1322
+ .within(() => {
1323
+ thinkSpherePage.contentEditableDiv().should('have.value', 'look for a pattern ');
1324
+ });
1325
+ },
1326
+ clickUploadVideoButton: () => {
1327
+ thinkSpherePage.uploadVideoLinkButton()
1328
+ .click();
1329
+ },
1330
+
1331
+ verifyPreAuthoredVideoTitles: (defaultStrategyTexts) => {
1332
+ defaultStrategyTexts.forEach((text, index) => {
1333
+ thinkSpherePage.videoLinkComponent(index)
1334
+ .within(() => {
1335
+ utilities.verifyInnerText(thinkSpherePage.uploadVideoLinkButton(), text);
1336
+ })
1337
+ });
1338
+ },
1339
+
1340
+ verifyPreAuthoredVideos: (preAuthoredVideos) => {
1341
+ preAuthoredVideos.forEach(({ duration }, optionIndex) => {
1342
+ thinkSpherePage.videoLinkComponent(optionIndex)
1343
+ .within(thinkSpherePage.steps.clickUploadVideoButton);
1344
+ thinkSpherePage.steps.startPlayback();
1345
+ thinkSpherePage.steps.waitForPlaybackToBegin();
1346
+ thinkSpherePage.playerTimer()
1347
+ .should('contain', `/${duration}`);
1348
+ thinkSpherePage.steps.closeVideoPopup();
1349
+ })
1350
+ },
1351
+
1352
+ clickOnReviewTab: () => {
1353
+ thinkSpherePage.reviewTab()
1354
+ .click();
1355
+ },
1356
+
1357
+ clickOnSolveTab: () => {
1358
+ thinkSpherePage.solveTab()
1359
+ .click();
1360
+ },
1361
+
1362
+ clickOnPlanTab: () => {
1363
+ thinkSpherePage.planTab()
1364
+ .click();
1365
+ },
1366
+
1367
+ switchToGradingView: () => {
1368
+ thinkSpherePage.gradingViewRadioButton()
1369
+ .click();
1370
+ },
1371
+
1372
+ switchToStudentView: () => {
1373
+ thinkSpherePage.studentViewRadioButton()
1374
+ .click();
1375
+ },
1376
+
1377
+ verifyCorrectAnswerLabel: () => {
1378
+ utilities.verifyElementVisibilityState(thinkSpherePage.correctAnswerLabelWrapper(), 'visible');
1379
+ },
1380
+
1381
+ addImageAlternativeTextInputFieldText: (alternateTextForImage) => {
1382
+ thinkSpherePage.imageAlternativeTextInputField().type(alternateTextForImage);
1383
+ cy.wait(2000);
1384
+ },
1385
+
1386
+ stepsBeforeGradingView: () => {
1387
+ thinkSpherePage.steps.expandChooseStarterDropdown();
1388
+ utilities.getNthElement(thinkSpherePage.chooseStartersListOptions(), 1).click();
1389
+ thinkSpherePage.problemAskingWrapper().first()
1390
+ .within(() => {
1391
+ thinkSpherePage.contentEditableDiv().type('This is a test text for the problem.');
1392
+ });
1393
+ thinkSpherePage.strategyChip().click();
1394
+ thinkSpherePage.submitButton().click();
1395
+ thinkSpherePage.goToGradingViewButton().click();
1396
+ },
1397
+
1398
+ verifyAddStrategiesButtonDisabled: () => {
1399
+ thinkSpherePage.addNewStrategyButton().should('have.attr', 'tabindex', '-1');
1400
+ thinkSpherePage.addNewStrategyButton().click({ force: true });
1401
+ utilities.verifyElementVisibilityState(thinkSpherePage.popupTitle(), 'notExist');
1402
+ },
1403
+
1404
+ verifyStrategiesListButtonDisabled: () => {
1405
+ utilities.getNthElement(thinkSpherePage.strategiesPreviewListLI(), 0).should('have.attr', 'tabindex', '-1');
1406
+ utilities.getNthElement(thinkSpherePage.strategiesPreviewListLI(), 0).should('have.attr', 'aria-disabled', 'true');
1407
+ },
1408
+
1409
+ verifySentenceStarterDropDownDisabled: () => {
1410
+ thinkSpherePage.chooseStarterDropdown().should('have.attr', 'aria-disabled', 'true');
1411
+ },
1412
+
1413
+ verifyDisabledProblemTextContainer: (textToEnter) => {
1414
+ thinkSpherePage.problemAskingWrapper()
1415
+ .within(() => {
1416
+ thinkSpherePage.contentEditableDiv().should('have.attr', 'readonly');
1417
+ thinkSpherePage.contentEditableDiv().should('have.value', textToEnter);
1418
+ });
1419
+ },
1420
+
1421
+ verifyDisabledWriteYourPlanTextContainer: (textToEnter) => {
1422
+ thinkSpherePage.writePlanWrapper()
1423
+ .within(() => {
1424
+ thinkSpherePage.contentEditableDiv().should('have.attr', 'readonly');
1425
+ thinkSpherePage.contentEditableDiv().should('have.value', textToEnter);
1426
+ });
1427
+ },
1428
+
1429
+ verifyDisabledStrategyChip: () => {
1430
+ thinkSpherePage.strategyChip().should('have.attr', 'tabindex', -1);
1431
+ },
1432
+
1433
+ verifyQuestionInstructionPreviewTexWrapperVisibility: (instructionText) => {
1434
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionPreviewTexWrapper(), 'visible');
1435
+ utilities.verifyInnerText(thinkSpherePage.questionInstructionPreviewTexWrapper(), instructionText);
1436
+ },
1437
+
1438
+ verifyQuestionInstructionPreviewImageWrapperVisibility: () => {
1439
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionPreviewImageWrapper(), 'visible');
1440
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionPreviewImageExpandButton(), 'visible');
1441
+ },
1442
+
1443
+ verifyWhiteBoardVisibility: () => {
1444
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardComponent(), 'visible');
1445
+ },
1446
+
1447
+ verifyWhiteBoardSectionsVisibility: () => {
1448
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardTools(), 'visible');
1449
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardSubTools(), 'visible');
1450
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardCanvasContainer(), 'visible');
1451
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardFooter(), 'visible');
1452
+ },
1453
+
1454
+ /**
1455
+ * Verifies that the inner text of the whiteboard's page label matches the expected text.
1456
+ *
1457
+ * @param {string} text - The exact text expected to be present in the page label element (e.g., "Page1 / 1").
1458
+ */
1459
+
1460
+ verifyInnerTextOfPageLabel: (text) => {
1461
+ thinkSpherePage.whiteBoardPage()
1462
+ .should('have.text', text);
1463
+ },
1464
+
1465
+ clickOnWhiteBoardNewPageButton: () => {
1466
+ thinkSpherePage.whiteBoardNewPage()
1467
+ .click();
1468
+ },
1469
+
1470
+ clickOnPreviousButton: () => {
1471
+ thinkSpherePage.whiteBoardPreviousPage()
1472
+ .click();
1473
+ },
1474
+
1475
+ clickOnNextButton: () => {
1476
+ thinkSpherePage.whiteBoardNextPage()
1477
+ .click();
1478
+ },
1479
+
1480
+ verifyPreviousButtonDisabled: () => {
1481
+ thinkSpherePage.whiteBoardPreviousPage()
1482
+ .should('have.attr', 'disabled');
1483
+ },
1484
+
1485
+ verifyNextButtonDisabled: () => {
1486
+ thinkSpherePage.whiteBoardNextPage()
1487
+ .should('have.attr', 'disabled');
1488
+ },
1489
+
1490
+ /**
1491
+ * Verifies that the inner text of the whiteboard's recording status matches the expected text.
1492
+ *
1493
+ * @param {string} text - The exact text expected to be present in the recording status element (e.g., "Ready").
1494
+ */
1495
+
1496
+ verifyRecordingStatus: (text) => {
1497
+ thinkSpherePage.whiteboardRecordingStatus()
1498
+ .should('have.text', text);
1499
+ },
1500
+
1501
+ verifyRecordingTimeStatusNotPresent: () => {
1502
+ thinkSpherePage.whiteboardRecordingTimeStatus()
1503
+ .should('have.text', '');
1504
+ },
1505
+
1506
+ verifyRecordingTimeStatusPresent: () => {
1507
+ thinkSpherePage.whiteboardRecordingTimeStatus()
1508
+ .invoke('text')
1509
+ .should('not.be.empty');
1510
+ },
1511
+
1512
+ clickOnRecordingOrPauseButton: () => {
1513
+ thinkSpherePage.whiteBoardRecordOrPauseButton()
1514
+ .click();
1515
+ },
1516
+
1517
+ clickOnStopButton: () => {
1518
+ thinkSpherePage.whiteBoardStopButton()
1519
+ .click();
1520
+ },
1521
+
1522
+ /**
1523
+ * Verifies that the inner text of the whiteboard's playback element matches the expected text.
1524
+ *
1525
+ * @param {string} text - The exact text expected to be present in the playback element (e.g., "Watch your recordingNo recording available.").
1526
+ */
1527
+
1528
+ verifyPlayBackNotAvailable: (text) => {
1529
+ thinkSpherePage.whiteboardPlayBackStatus().should('have.text', text);
1530
+ },
1531
+
1532
+ verifyWhiteBoardPlayer: () => {
1533
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardPlayer(), 'visible');
1534
+ },
1535
+
1536
+ verifyWhiteBoardRecordingInprogressWarning: () => {
1537
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardRecordingInProgressWarning(), 'visible');
1538
+ },
1539
+
1540
+ verifyWhiteBoardRecordingInprogressWarningNotVisible: () => {
1541
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardRecordingInProgressWarning(), 'not.be.visible');
1542
+ },
1543
+
1544
+ clickOnWhiteBoardRecordingInProgressWarningOkButton: () => {
1545
+ thinkSpherePage.whiteboardRecordingInProgressWarningOkButton()
1546
+ .click();
1547
+ },
1548
+
1549
+ /**
1550
+ * Verifies that the inner text of the whiteboard's warning text header matches the expected text.
1551
+ *
1552
+ * @param {string} text - The exact text expected to be present in the warning text header element (e.g., "Recording in Progress").
1553
+ */
1554
+
1555
+ verifyWhiteboardWarningHeaderText: (text) => {
1556
+ thinkSpherePage.whiteboardRecordingInProgressWarningHeader()
1557
+ .should('have.text', text);
1558
+ },
1559
+
1560
+ /**
1561
+ * Verifies that the inner text of the whiteboard's whiteboard warning description matches the expected text.
1562
+ *
1563
+ * @param {string} expected - The exact text expected to be present in the whiteboard warning description element (e.g., "You're currently recording your work. To avoid losing progress, please return and click Stop to save the recording.").
1564
+ */
1565
+
1566
+ verifyWhiteboardWarningDescriptionText: (expected) => {
1567
+ thinkSpherePage.whiteboardRecordingInProgressWarningDescription()
1568
+ .invoke('text')
1569
+ .then((text) => {
1570
+ const cleanText = text.replace(/\s+/g, ' ').trim();
1571
+ expect(cleanText).to.eq(expected);
1572
+ });
1573
+ },
1574
+
1575
+ clickOnWhiteBoardPlaybackPlayButton: () => {
1576
+ thinkSpherePage.whiteboardPlaybackPlayButton()
1577
+ .click();
1578
+ },
1579
+
1580
+ clickOnWhiteBoardPlaybackPauseButton: () => {
1581
+ thinkSpherePage.whiteboardPlaybackPauseButton()
1582
+ .click();
1583
+ },
1584
+
1585
+ verifyWhiteBoardPlayerPauseButtonVisible: () => {
1586
+ thinkSpherePage.whiteboardPlaybackPauseButton()
1587
+ .should('be.visible')
1588
+ cy.wait(1000);
1589
+ },
1590
+
1591
+ verifyWhiteBoardPlayerPlayButtonVisible: () => {
1592
+ thinkSpherePage.whiteboardPlaybackPlayButton()
1593
+ .should('be.visible');
1594
+ },
1595
+
1596
+ /**
1597
+ * Verifies that the inner text of the whiteboard's player time status matches the expected text.
1598
+ *
1599
+ * @param {string} time - The exact text expected to be present in the player time status element (e.g., "00:00").
1600
+ */
1601
+
1602
+ verifyWhiteBoardPlayerTimeStatus: (time) => {
1603
+ thinkSpherePage.whiteboardPlaybackTime()
1604
+ .invoke('text')
1605
+ .then((text) => {
1606
+ const currentTime = text.split('/')[0].trim(); // get part before "/"
1607
+ expect(currentTime).to.eq(time);
1608
+ });
1609
+ },
1610
+
1611
+ clickOnWhiteBoardPlaybackSpeakerButton: () => {
1612
+ thinkSpherePage.whiteboardPlaybackSpeakerButton()
1613
+ .click();
1614
+ },
1615
+
1616
+ verifyWhiteBoardPlayerVolumeMuted: () => {
1617
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardMutedIcon(), 'visible');
1618
+ },
1619
+
1620
+ verifyWhiteBoardPlayerVolumeUnmuted: () => {
1621
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardVolumeIcon(), 'visible');
1622
+ },
1623
+
1624
+ hoverOverWhiteBoardPlaybackSpeakerButton: () => {
1625
+ thinkSpherePage.whiteboardPlaybackSpeakerButton()
1626
+ .realHover({ position: 'top' });
1627
+ },
1628
+
1629
+ verifyWhiteBoardPlayerVolumeSliderVisible: () => {
1630
+ thinkSpherePage.whiteboardVolumeSlider()
1631
+ .should('be.visible');
1632
+ }
858
1633
  };
859
1634
 
860
1635
  const tests = {
1636
+ ...essayResponsePage.tests,
861
1637
  ...createQuestionBasePage.tests,
862
1638
  ...backgroundImageUploadComponent.tests,
863
1639
  ...questionInstructionsComponent.tests,
@@ -869,6 +1645,7 @@ const tests = {
869
1645
  ...studentViewSettingsLabelComponent.tests,
870
1646
  ...defaultToolDropdown.tests,
871
1647
  ...optionsWrapperComponent.tests,
1648
+ ...equationEditorFlyout.tests,
872
1649
 
873
1650
  /**
874
1651
  * Verifies the ThinkSphere cancel button functionality.
@@ -967,7 +1744,7 @@ const tests = {
967
1744
  utilities.verifyElementVisibilityState(thinkSpherePage.tooltipText(), 'notExist');
968
1745
  });
969
1746
  },
970
-
1747
+
971
1748
  /**
972
1749
  * Verifies the add option functionality.
973
1750
  * @param {string} list - The list to add the option to ('strategy' or other).
@@ -983,13 +1760,13 @@ const tests = {
983
1760
  initialOptionCount = count;
984
1761
  });
985
1762
  });
986
-
1763
+
987
1764
  thinkSpherePage.steps.addOption(list);
988
1765
  thinkSpherePage.planStrategySection()
989
1766
  .within(() => {
990
1767
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
991
1768
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter strategy name');
992
- });
1769
+ });
993
1770
  thinkSpherePage.steps.deleteOption(5);
994
1771
  } else {
995
1772
  thinkSpherePage.planSentenceStarterSection()
@@ -998,13 +1775,13 @@ const tests = {
998
1775
  initialOptionCount = count;
999
1776
  });
1000
1777
  });
1001
-
1778
+
1002
1779
  thinkSpherePage.steps.addOption(list);
1003
1780
  thinkSpherePage.planSentenceStarterSection()
1004
1781
  .within(() => {
1005
1782
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1006
1783
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter sentence starter name');
1007
- });
1784
+ });
1008
1785
  thinkSpherePage.steps.deleteOption(10);
1009
1786
  }
1010
1787
  });
@@ -1083,7 +1860,7 @@ const tests = {
1083
1860
  }
1084
1861
  });
1085
1862
  },
1086
-
1863
+
1087
1864
  /**
1088
1865
  * Verifies the drag handle tooltip.
1089
1866
  * @param {number} NthElement - The index of the drag handle.
@@ -1233,17 +2010,17 @@ const tests = {
1233
2010
  thinkSpherePage.steps.selectOption(list, 1);
1234
2011
  utilities.verifyCSS(
1235
2012
  utilities.getNthElement(thinkSpherePage.planStrategyCheckbox().find('svg'), 1), {
1236
- 'fill': css.color.uncheckedCheckbox,
1237
- 'width': '12px',
1238
- 'height': '12px',
2013
+ 'fill': css.color.uncheckedCheckbox,
2014
+ 'width': '12px',
2015
+ 'height': '12px',
1239
2016
  });
1240
2017
  } else {
1241
2018
  thinkSpherePage.steps.selectOption(list, 1);
1242
2019
  utilities.verifyCSS(
1243
2020
  utilities.getNthElement(thinkSpherePage.planSentenceStarterCheckbox().find('svg'), 1), {
1244
- 'fill': css.color.uncheckedCheckbox,
1245
- 'width': '12px',
1246
- 'height': '12px',
2021
+ 'fill': css.color.uncheckedCheckbox,
2022
+ 'width': '12px',
2023
+ 'height': '12px',
1247
2024
  });
1248
2025
  }
1249
2026
  });
@@ -1298,7 +2075,7 @@ const tests = {
1298
2075
  thinkSpherePage.steps.addOptionText(list, optionIndex, inputFieldText);
1299
2076
  });
1300
2077
  });
1301
-
2078
+
1302
2079
  it('When the user hovers over the disabled delete buttons of the options then \'Minimum one option is required\' message should be displayed on a tooltip and the tooltip should disappear if focus is removed from the delete button', () => {
1303
2080
  utilities.getNthElement(thinkSpherePage.deleteButton(), list === 'strategy' ? 0 : 5)
1304
2081
  .trigger('mouseover', { force: true });
@@ -1362,9 +2139,12 @@ const tests = {
1362
2139
  it('When user clicks on \'Reset to default\' button then the sentence starter list should be reset to default', () => {
1363
2140
  thinkSpherePage.planSentenceStarterListResetToDefault()
1364
2141
  .click();
1365
- optionList.forEach((option, index) => {
1366
- thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
1367
- });
2142
+ thinkSpherePage.planSentenceStarterSection()
2143
+ .within(() => {
2144
+ optionList.forEach((option, index) => {
2145
+ thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
2146
+ });
2147
+ })
1368
2148
  });
1369
2149
  }
1370
2150
  },
@@ -1501,7 +2281,7 @@ const tests = {
1501
2281
  utilities.verifyElementVisibilityState(thinkSpherePage.deleteVideoButton(), 'visible');
1502
2282
  });
1503
2283
  });
1504
-
2284
+
1505
2285
  it('CSS of edit video button and delete video button', { tags: 'css' }, () => {
1506
2286
  thinkSpherePage.videoLinkComponent().within(() => {
1507
2287
  utilities.verifyCSS(thinkSpherePage.editVideoButton(), {
@@ -1550,6 +2330,382 @@ const tests = {
1550
2330
  cy.checkAccessibility(thinkSpherePage.singleOptionTextFieldWrapper());
1551
2331
  });
1552
2332
  },
2333
+
2334
+ verifyErrorMessageCSSAndA11y: () => {
2335
+ it('CSS of error message', { tags: 'css' }, () => {
2336
+ utilities.verifyCSS(commonComponents.errorMessage(), {
2337
+ 'color': css.color.errorText,
2338
+ 'font-size': css.fontSize.small,
2339
+ 'font-weight': css.fontWeight.regular
2340
+ });
2341
+ });
2342
+
2343
+ it('Accessibility of error message', { tags: 'a11y' }, () => {
2344
+ cy.checkAccessibility(thinkSpherePage.nextGenThinkSphereCreateItemWrapper());
2345
+ });
2346
+ },
2347
+
2348
+ verifyQuestionAccordion: () => {
2349
+ it('Author should be able to expand and collapse the question accordion by clicking on the expand icon', () => {
2350
+ thinkSpherePage.filterSectionQuestionAccordion().each(($accordion) => {
2351
+ cy.wrap($accordion).find('.expansion-item-icon-wrapper').click();
2352
+ cy.wrap($accordion).should('have.class', 'Mui-expanded');
2353
+ });
2354
+
2355
+ thinkSpherePage.filterSectionQuestionAccordion().each(($accordion) => {
2356
+ cy.wrap($accordion).find('.expansion-item-icon-wrapper').click();
2357
+ cy.wrap($accordion).should('not.have.class', 'Mui-expanded');
2358
+ });
2359
+ });
2360
+ },
2361
+
2362
+ verifyCreateItemHeaderSection: () => {
2363
+ it('The page displays a unique Reference ID at the top left corner in the format "Ref ID:"', () => {
2364
+ utilities.verifyElementVisibilityState(thinkSpherePage.referenceIdWrapper(), 'visible');
2365
+ utilities.verifyInnerText(thinkSpherePage.referenceIdWrapper().children('div').first(), 'Ref ID:\u00A0');
2366
+ const initialRefId = thinkSpherePage.referenceIdWrapper().children('div').eq(1).invoke('text');
2367
+ initialRefId.then((refId) => {
2368
+ expect(refId).to.be.a('string').and.not.be.empty;
2369
+ cy.reload();
2370
+ thinkSpherePage.referenceIdWrapper().children('div').eq(1).invoke('text').should((newRefId) => {
2371
+ expect(newRefId).to.be.a('string').and.not.be.empty;
2372
+ expect(newRefId).to.not.equal(refId);
2373
+ });
2374
+ });
2375
+ });
2376
+
2377
+ it('Edit text box and edit icon pencil should exist, and on clicking the edit input field with placeholder \'Enter title\ should allow the user to add title', () => {
2378
+ utilities.verifyElementVisibilityState(thinkSpherePage.editBoxTextInput(), 'visible');
2379
+ thinkSpherePage.editBoxTextInput().blur();
2380
+ utilities.verifyElementVisibilityState(thinkSpherePage.editIconPencil(), 'visible');
2381
+ thinkSpherePage.editIconPencil().click();
2382
+ thinkSpherePage.editBoxTextInput().should('have.attr', 'placeholder', 'Enter title');
2383
+ thinkSpherePage.editBoxTextInput().type('Test Title');
2384
+ thinkSpherePage.editBoxTextInput().blur();
2385
+ utilities.verifyInnerText(thinkSpherePage.editBoxText(), 'Test Title');
2386
+ });
2387
+ },
2388
+
2389
+ verifyDefaultTab: () => {
2390
+ it('By default edit tab should be selected', () => {
2391
+ thinkSpherePage.editTab().should('have.class', 'Mui-selected');
2392
+ });
2393
+ },
2394
+
2395
+ /**
2396
+ * Verifies the functionality of editing, selecting, and unselecting strategies and sentence starters.
2397
+ * Ensures that changes are saved successfully and reflected in the preview section.
2398
+ *
2399
+ * @param {Object} sentenceStartersObject - The object containing strategies and sentence starters data.
2400
+ * @param {Array<string>} sentenceStartersObject.editedStrategies - The list of edited strategies to verify.
2401
+ * @param {Array<string>} sentenceStartersObject.editedSentenceStarters - The list of edited sentence starters to verify.
2402
+ * @param {Array<string>} sentenceStartersObject.selectStrategies - The list of strategies to select and verify.
2403
+ * @param {Array<string>} sentenceStartersObject.selectSentenceStarters - The list of sentence starters to select and verify.
2404
+ */
2405
+ verifyStrategiesAndSentenceStartersSection: (sentenceStartersObject) => {
2406
+ const {
2407
+ editedStrategies, editedSentenceStarters, selectStrategies, selectSentenceStarters
2408
+ } = sentenceStartersObject || {};
2409
+ it('When user edits the strategies and sentence starers, then the changes should be saved successfully and edited strategies and sentence starers should get displayed in preview side', () => {
2410
+ thinkSpherePage.steps.switchToEditTab();
2411
+ thinkSpherePage.steps.clickOnEditQuestionIcon();
2412
+ editedStrategies.forEach((strategy, index) => {
2413
+ thinkSpherePage.steps.addOptionText('strategy', index, strategy);
2414
+ });
2415
+ editedSentenceStarters.forEach((sentenceStarter, index) => {
2416
+ thinkSpherePage.steps.addOptionText('sentenceStarter', index, sentenceStarter);
2417
+ });
2418
+ thinkSpherePage.steps.saveAQuestionAndVerifySnackbar();
2419
+ thinkSpherePage.steps.switchToPreviewTab();
2420
+ editedStrategies.forEach((label, index) => {
2421
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.strategyTextWrapper(), index), label);
2422
+ });
2423
+ thinkSpherePage.steps.expandChooseStarterDropdown();
2424
+ editedSentenceStarters.forEach((label, index) => {
2425
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.chooseStartersListOptionLabels(), index), label);
2426
+ });
2427
+ utilities.clickOnBody();
2428
+ });
2429
+
2430
+ it('When user select unselect the strategies and sentence starers, then the changes should be saved successfully and selected strategies and sentence starers should get displayed in preview side', () => {
2431
+ thinkSpherePage.steps.switchToEditTab();
2432
+ thinkSpherePage.steps.clickOnEditQuestionIcon();
2433
+ editedStrategies.forEach((strategy, index) => {
2434
+ if (!selectStrategies.includes(strategy)) {
2435
+ thinkSpherePage.steps.selectOption('strategy', index);
2436
+ }
2437
+ });
2438
+ cy.wait(2000);
2439
+ editedSentenceStarters.forEach((sentenceStarter, index) => {
2440
+ if (!selectSentenceStarters.includes(sentenceStarter)) {
2441
+ thinkSpherePage.steps.selectOption('sentenceStarter', index);
2442
+ }
2443
+ });
2444
+ cy.wait(2000);
2445
+ thinkSpherePage.steps.saveAQuestionAndVerifySnackbar();
2446
+ thinkSpherePage.steps.switchToPreviewTab();
2447
+ selectStrategies.forEach((label, index) => {
2448
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.strategyTextWrapper(), index), label);
2449
+ });
2450
+ thinkSpherePage.steps.expandChooseStarterDropdown();
2451
+ selectSentenceStarters.forEach((label, index) => {
2452
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.chooseStartersListOptionLabels(), index), label);
2453
+ });
2454
+ utilities.clickOnBody();
2455
+ });
2456
+ },
2457
+
2458
+ verifyWhiteBoardAndSections: () => {
2459
+ it('Whiteboard should be present in the solve tab', () => {
2460
+ thinkSpherePage.steps.verifyWhiteBoardVisibility();
2461
+ });
2462
+
2463
+ it('Whiteboard should contain toolbar, subtools, whiteboard canvas and footer sections', () => {
2464
+ thinkSpherePage.steps.verifyWhiteBoardSectionsVisibility();
2465
+ });
2466
+
2467
+ it('CSS of whiteboard sections', { tags: 'css' }, () => {
2468
+ utilities.verifyCSS(thinkSpherePage.whiteBoardTools(), {
2469
+ 'padding': '5px 8px',
2470
+ 'position': 'static',
2471
+ 'display': 'flex',
2472
+ 'flex-wrap': 'wrap'
2473
+ });
2474
+ utilities.verifyCSS(thinkSpherePage.whiteBoardSubTools(), {
2475
+ 'margin': '0px 8px',
2476
+ 'padding': '4px 8px',
2477
+ 'borderTop': `1px solid ${css.color.secondaryBtnBorder}`,
2478
+ 'minHeight': '49px',
2479
+ });
2480
+ });
2481
+
2482
+ it('Accessibility of Whiteboard', { tags: 'a11y' }, () => {
2483
+ cy.checkAccessibility(thinkSpherePage.whiteboardComponent());
2484
+ });
2485
+ },
2486
+
2487
+ /**
2488
+ * Verifies default visibility, selection, and behavior of whiteboard tools and their subtools.
2489
+ *
2490
+ * @param {Array<Object>} whiteBoardTools - An array of tool objects, where each object contains:
2491
+ * @param {string} whiteBoardTools[].name - Display name of the tool.
2492
+ * @param {string} whiteBoardTools[].dataTestId - The `data-testid` used to locate the tool in the DOM.
2493
+ * @param {boolean} [whiteBoardTools[].isDefault] - Whether the tool is visible by default.
2494
+ * @param {string[]} [whiteBoardTools[].subToolS] - An array of subtool identifiers (data-testid, data-name, or class).
2495
+ * @param {string} [whiteBoardTools[].popupSelector] - A selector used to locate popup elements that appear after tool interaction.
2496
+ * @param {string[]} [whiteBoardTools[].popupContent] - Optional array of class names used to verify the popup’s inner content.
2497
+ *
2498
+ * @param {string[]} editSectionWhiteBoardToolButtons - A list of tool names that will be enabled during edit phase.
2499
+ */
2500
+
2501
+ verifyWhiteboardToolsAndSubTools: (whiteBoardTools, editSectionWhiteBoardToolButtons) => {
2502
+ const allToolIds = whiteBoardTools.map(tool => tool.dataTestId);
2503
+
2504
+ const defaultToolIds = whiteBoardTools.filter(tool => tool.isDefault).map(tool => tool.dataTestId);
2505
+
2506
+ it(`${defaultToolIds.join(', ')} should be visible in the whiteboard by default`, () => {
2507
+ defaultToolIds.forEach((toolId) => {
2508
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2509
+ });
2510
+ });
2511
+
2512
+ it('All tools should be visible in the whiteboard after selected by the author', () => {
2513
+ thinkSpherePage.steps.switchToEditTab();
2514
+ thinkSpherePage.steps.clickOnSolvePhaseAccordionIcon();
2515
+ thinkSpherePage.steps.expandCustomizeToolsAndControls();
2516
+ editSectionWhiteBoardToolButtons.forEach((toolName) => {
2517
+ thinkSpherePage.steps.selectOptionFromToolsAndControls(toolName);
2518
+ })
2519
+ thinkSpherePage.steps.switchToPreviewTab();
2520
+ thinkSpherePage.steps.clickOnSolveTab();
2521
+ allToolIds.forEach((toolId) => {
2522
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2523
+ });
2524
+ })
2525
+
2526
+ whiteBoardTools.forEach((tool) => {
2527
+ it(`When user clicks on "${tool.name}" tool it should display its sub tools`, () => {
2528
+ // Click the main tool by data-testid
2529
+ cy.get(`[data-testid="${tool.dataTestId}"]`)
2530
+ .and('be.visible')
2531
+ .first()
2532
+ .click({ force: true }) // force in case some are behind overlays
2533
+ cy.wait(1000); // Wait for any animations or transitions to complete
2534
+
2535
+ // If the tool has subtools, verify each
2536
+ if (tool.subToolS && tool.subToolS.length > 0) {
2537
+ tool.subToolS.forEach((subTool) => {
2538
+ // Try data-testid first, fall back to data-name if needed
2539
+ cy.get(`[data-testid="${subTool}"], [data-name="${subTool}"], [class*="${subTool}"]`)
2540
+ .should('exist')
2541
+ .and('be.visible');
2542
+ });
2543
+ }
2544
+
2545
+ if(tool.popupSelector) {
2546
+ // Verify the popup selector if it exists
2547
+ if(tool.popupSelector === 'eraser-width-picker') {
2548
+ cy.get(`[data-name="ERASER_THICKNESS"]`)
2549
+ .should('exist')
2550
+ .and('be.visible')
2551
+ .first()
2552
+ .click({ force: true });
2553
+ cy.get(`[class*="${tool.popupSelector}"]`).should('exist').and('be.visible');
2554
+ } else {
2555
+ cy.get(`[data-testid="${tool.popupSelector}"]`).should('exist').and('be.visible');
2556
+ }
2557
+ if(tool.popupContent) {
2558
+ // Verify the content inside the popup
2559
+ tool.popupContent.forEach((content) => {
2560
+ cy.get(`[class="${content}"]`).should('exist').and('be.visible');
2561
+ });
2562
+ }
2563
+ }
2564
+
2565
+ if(tool.name === 'simple calculator' || tool.name ==='scientific calculator') {
2566
+ cy.get(`[data-testid="${tool.dataTestId}"]`)
2567
+ .and('be.visible')
2568
+ .first()
2569
+ .click({ force: true }) // force in case some are behind overlays
2570
+ cy.wait(1000);
2571
+ }
2572
+ });
2573
+ });
2574
+ },
2575
+
2576
+ verifyWhiteboardPageNavigation: () => {
2577
+ it('By default "Previous" and "Next" page buttons should be disabled', () => {
2578
+ thinkSpherePage.steps.verifyPreviousButtonDisabled();
2579
+ thinkSpherePage.steps.verifyNextButtonDisabled();
2580
+ });
2581
+ it('When user clicks on "New Page" button it should create new page', () => {
2582
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page1 / 1');
2583
+ thinkSpherePage.steps.clickOnWhiteBoardNewPageButton();
2584
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page2 / 2');
2585
+ thinkSpherePage.steps.verifyNextButtonDisabled();
2586
+ });
2587
+ it('When user clicks on "Previous" button then it should navigate to the previous page', () => {
2588
+ thinkSpherePage.steps.clickOnPreviousButton();
2589
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page1 / 2');
2590
+ thinkSpherePage.steps.verifyPreviousButtonDisabled();
2591
+ });
2592
+ it('When user clicks on "Next" button then it should navigate to the next page', () => {
2593
+ thinkSpherePage.steps.clickOnNextButton();
2594
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page2 / 2');
2595
+ thinkSpherePage.steps.verifyNextButtonDisabled();
2596
+ });
2597
+ },
2598
+
2599
+ /**
2600
+ * Verifies the full recording and playback functionality of the whiteboard, including status changes,
2601
+ * UI updates, warnings, and accessibility features.
2602
+ *
2603
+ * @param {Array<Object>} whiteBoardTools - An array of whiteboard tool objects used to simulate interactions during recording.
2604
+ * @param {string} whiteBoardTools[].dataTestId - The `data-testid` used to identify the tool.
2605
+ */
2606
+
2607
+ verifyWhiteboardRecordingAndPlayback: (whiteBoardTools) => {
2608
+ it('By default the recording status should be "Ready" and there should be no time status of recording', () => {
2609
+ thinkSpherePage.steps.verifyRecordingStatus('Ready');
2610
+ thinkSpherePage.steps.verifyRecordingTimeStatusNotPresent();
2611
+ });
2612
+
2613
+ it('By default "Review" tab should contain "Watch your recording No recording available." before recording', () => {
2614
+ thinkSpherePage.steps.clickOnReviewTab();
2615
+ thinkSpherePage.steps.verifyPlayBackNotAvailable('Watch your recordingNo recording available.');
2616
+ thinkSpherePage.steps.clickOnSolveTab();
2617
+ });
2618
+
2619
+ it('When the user clicks on the recording button, the recording status should be "Recording"', () => {
2620
+ thinkSpherePage.steps.clickOnRecordingOrPauseButton();
2621
+ thinkSpherePage.steps.verifyRecordingStatus('Recording');
2622
+ thinkSpherePage.steps.verifyRecordingTimeStatusPresent();
2623
+ });
2624
+
2625
+ it('When the user clicks on the pause button, the recording status should be "Paused"', () => {
2626
+ thinkSpherePage.steps.clickOnRecordingOrPauseButton();
2627
+ thinkSpherePage.steps.verifyRecordingStatus('Paused');
2628
+ });
2629
+
2630
+ it('When the user click on Plan, or Review tab while recording, it should show a warning popup to the user', () => {
2631
+ thinkSpherePage.steps.clickOnRecordingOrPauseButton();
2632
+ thinkSpherePage.steps.clickOnReviewTab();
2633
+ thinkSpherePage.steps.verifyWhiteBoardRecordingInprogressWarning();
2634
+ thinkSpherePage.steps.clickOnWhiteBoardRecordingInProgressWarningOkButton();
2635
+ thinkSpherePage.steps.clickOnPlanTab();
2636
+ thinkSpherePage.steps.verifyWhiteboardWarningHeaderText('Recording in Progress');
2637
+ thinkSpherePage.steps.verifyWhiteboardWarningDescriptionText("You're currently recording your work. To avoid losing progress, please return and click Stop to save the recording.");
2638
+ });
2639
+
2640
+ it('CSS of Recording in Progress warning', { tags: 'css' }, () => {
2641
+ utilities.verifyCSS(thinkSpherePage.whiteboardRecordingInProgressWarningHeader(), {
2642
+ 'border-bottom': `1px solid ${css.color.secondaryBtnBorder}`,
2643
+ 'padding': '20px 0px',
2644
+ 'margin': '0px 16px',
2645
+ 'text-align': 'left',
2646
+ });
2647
+ utilities.verifyCSS(thinkSpherePage.whiteboardRecordingInProgressWarningDescription(), {
2648
+ 'padding': '0px 16px',
2649
+ 'font-size': '16px',
2650
+ 'color': css.color.sectionHeading,
2651
+ 'line-height': '22px',
2652
+ 'font-weight': '400',
2653
+ });
2654
+ utilities.verifyCSS(thinkSpherePage.whiteboardRecordingInProgressWarningOkButton(), {
2655
+ 'color': css.color.primaryBtn,
2656
+ 'font-size': css.fontSize.default,
2657
+ 'font-weight': css.fontWeight.semibold,
2658
+ 'background-color': css.color.primaryBtnBg
2659
+ });
2660
+ });
2661
+
2662
+ it('Accessibility of whiteboard warning popup', { tags: 'a11y' }, () => {
2663
+ cy.checkAccessibility(thinkSpherePage.whiteboardRecordingInProgressWarning());
2664
+ thinkSpherePage.steps.clickOnWhiteBoardRecordingInProgressWarningOkButton();
2665
+ });
2666
+
2667
+
2668
+ it('The user should be able to switch to Review tab without warning after stopping the recording and the Review tab should contain the Playback option', () => {
2669
+ cy.get(`[data-testid="${whiteBoardTools[0].dataTestId}"]`)
2670
+ .should('exist')
2671
+ .and('be.visible')
2672
+ .first()
2673
+ .click({ force: true });
2674
+ cy.get('.upper-canvas').click({ force: true });
2675
+ cy.focused().type('Test text for recording');
2676
+ thinkSpherePage.steps.clickOnStopButton();
2677
+ thinkSpherePage.steps.clickOnReviewTab();
2678
+ thinkSpherePage.steps.verifyWhiteBoardRecordingInprogressWarningNotVisible();
2679
+ thinkSpherePage.steps.verifyWhiteBoardPlayer();
2680
+ });
2681
+
2682
+ it('By default the user should see the playback time as 00:00 / total duration', () => {
2683
+ thinkSpherePage.steps.verifyWhiteBoardPlayerTimeStatus('00:00');
2684
+ });
2685
+
2686
+ it('When the user clicks on the Play button, it should play the recording', () => {
2687
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackPlayButton();
2688
+ thinkSpherePage.steps.verifyWhiteBoardPlayerPauseButtonVisible();
2689
+ thinkSpherePage.steps.verifyWhiteBoardPlayerTimeStatus('00:01');
2690
+ });
2691
+
2692
+ it('When the user clicks on the Pause button, it should pause the recording', () => {
2693
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackPauseButton();
2694
+ thinkSpherePage.steps.verifyWhiteBoardPlayerPlayButtonVisible();
2695
+ });
2696
+
2697
+ it('When the user hovers over the speaker button, it should display the volume slider', () => {
2698
+ thinkSpherePage.steps.hoverOverWhiteBoardPlaybackSpeakerButton();
2699
+ thinkSpherePage.steps.verifyWhiteBoardPlayerVolumeSliderVisible();
2700
+ });
2701
+
2702
+ it('When the user clicks on the speaker button, it should mute the volume, and when the user clicks on it again, it should unmute the volume', () => {
2703
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackSpeakerButton();
2704
+ thinkSpherePage.steps.verifyWhiteBoardPlayerVolumeMuted();
2705
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackSpeakerButton();
2706
+ thinkSpherePage.steps.verifyWhiteBoardPlayerVolumeUnmuted();
2707
+ });
2708
+ }
1553
2709
  };
1554
2710
 
1555
2711
  export const thinkSpherePage = {