itemengine-cypress-automation 1.0.381-fixes-r1-4b1054a.0 → 1.0.381-regressionFixes10June-8dc1710.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 (294) 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/ChartsBar/HorizontalOrientationBarChart/gradingViewAndCorrectAnswerView.smoke.js +1 -1
  8. package/cypress/e2e/ILC/ChartsBar/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +33 -0
  9. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightBasic.js +25 -25
  10. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +37 -36
  11. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +37 -36
  12. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +37 -36
  13. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +1 -0
  14. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightBasic.js +26 -25
  15. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +39 -38
  16. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +31 -30
  17. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +35 -34
  18. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePointsLocked.js +247 -0
  19. package/cypress/e2e/ILC/ChartsBar/editQuestion.smoke.js +1 -1
  20. package/cypress/e2e/ILC/ChartsBar/editTabBasicSection.js +37 -0
  21. package/cypress/e2e/ILC/ChartsBar/headerSection.js +50 -2
  22. package/cypress/e2e/ILC/ChartsBar/specifyCorrectAnswerSection.js +92 -0
  23. package/cypress/e2e/ILC/ChartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePointsLocked.js +220 -0
  24. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightBasic.js +25 -25
  25. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +47 -46
  26. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +25 -24
  27. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +25 -24
  28. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +1 -0
  29. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightBasic.js +25 -25
  30. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +24 -23
  31. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +21 -20
  32. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +48 -46
  33. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePointsLocked.js +249 -0
  34. package/cypress/e2e/ILC/ChartsLine/editQuestion.smoke.js +3 -1
  35. package/cypress/e2e/ILC/ChartsLine/headerSection.js +18 -1
  36. package/cypress/e2e/ILC/ChartsLine/specifyCorrectAnswerSection.js +94 -0
  37. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabAddFeatureRadioButton.js +2 -3
  38. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabAddTranscriptRadioButton .js +2 -4
  39. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabStudentViewSettings.js +3 -3
  40. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerHeaderSectionAndButtons.js +2 -2
  41. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTab.js +1 -1
  42. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTabSupportedFileTypes.js +6 -0
  43. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTabTranscript.js +2 -3
  44. package/cypress/e2e/ILC/CkEditorInsertImage/imageInfo.js +3 -3
  45. package/cypress/e2e/ILC/CkEditorInsertTable/tableDimension&FooterProperties.js +3 -3
  46. package/cypress/e2e/ILC/CkEditorInsertTable/tableStyle.js +11 -11
  47. package/cypress/e2e/ILC/CkEditorLink/uploadSection.js +1 -1
  48. package/cypress/e2e/ILC/ContentBlocks/editTabBasics.js +63 -4
  49. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/allOrNothingBasicForAllViews.smoke.js +116 -7
  50. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editTabBasicSection.js +1 -1
  51. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editTabScoring.js +1 -0
  52. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/headerSection.js +3 -3
  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/drawingResponsePreviewTabContents.smoke.js +1 -3
  59. package/cypress/e2e/ILC/EssayResponse/editTabBasicSections.js +23 -37
  60. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/allOrNothingForAllViews.smoke.js +210 -0
  61. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/draggableOptions.js +2 -0
  62. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/editTabBasicSection.js +1 -1
  63. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/headerSection.js +3 -3
  64. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViewInIncompleteAuthoring.smoke.js +7 -7
  65. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +11 -11
  66. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editQuestion.smoke.js +40 -0
  67. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editTabBasicSection.js +1 -1
  68. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/headerSection.js +3 -3
  69. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/allOrNothingForAllViews.smoke.js +216 -0
  70. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/headerSection.js +3 -3
  71. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editQuestion.smoke.js +45 -0
  72. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editTabBasicSection.js +1 -1
  73. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/headerSection.js +4 -4
  74. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/HeaderSection.js +4 -4
  75. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/editQuestion.smoke.js +1 -1
  76. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/responseAnswersAndAcceptedStudentInput.js +4 -0
  77. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/supportedFileTypes.js +3 -1
  78. package/cypress/e2e/ILC/FillInTheGapsTextNew/editTabBasicSection.js +1 -1
  79. package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +3 -3
  80. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +73 -0
  81. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +38 -0
  82. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +38 -0
  83. package/cypress/e2e/ILC/Graphing/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +87 -0
  84. package/cypress/e2e/ILC/Graphing/allOrNothingForAllViews.smoke.js +2 -2
  85. package/cypress/e2e/ILC/Graphing/checkAddAlternativeButton.js +35 -0
  86. package/cypress/e2e/ILC/Graphing/editQuestion.smoke.js +28 -0
  87. package/cypress/e2e/ILC/Graphing/editTabBasicSection.js +38 -0
  88. package/cypress/e2e/ILC/Graphing/editTabScoringSection.js +1 -0
  89. package/cypress/e2e/ILC/Graphing/headerSection.js +36 -4
  90. package/cypress/e2e/ILC/Graphing/layoutAndGridOptions.js +6 -3
  91. package/cypress/e2e/ILC/GridFill/addAlternateButton.js +40 -0
  92. package/cypress/e2e/ILC/GridFill/allOrNothingBasicForAllViews.smoke.js +210 -0
  93. package/cypress/e2e/ILC/GridFill/customizeLayoutFillImageBackgroundImage.js +2 -2
  94. package/cypress/e2e/ILC/GridFill/headerSection.js +4 -4
  95. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +39 -0
  96. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  97. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +39 -0
  98. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountAllOrNothingCorrectPointsGreaterThanAlternativePoints.js +37 -0
  99. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountallOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  100. package/cypress/e2e/ILC/GridFill/scoring/cellshadeCountAllOrNothingAlternativePointsGreaterThanCorrectPoints.js +36 -0
  101. package/cypress/e2e/ILC/GridFill/scoring/checkLabelSaveAsYouGo.js +75 -0
  102. package/cypress/e2e/ILC/GridFill/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +2 -1
  103. package/cypress/e2e/ILC/ImageHighlight/additionalSettingsBasic.js +1 -0
  104. package/cypress/e2e/ILC/ImageHighlight/allOrNothingForAllViews.smoke.js +212 -0
  105. package/cypress/e2e/ILC/ImageHighlight/customiseHighlightStyle.js +29 -0
  106. package/cypress/e2e/ILC/ImageHighlight/editTabBasicSection.js +1 -1
  107. package/cypress/e2e/ILC/ImageHighlight/headerSection.js +3 -3
  108. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +24 -0
  109. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +24 -0
  110. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +24 -0
  111. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +86 -0
  112. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/manuallyAndNonScored.js +2 -4
  113. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsBasic.js +1 -1
  114. package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +237 -1
  115. package/cypress/e2e/ILC/ListOrderingDropdown/checkAddAlternativeButton.js +35 -0
  116. package/cypress/e2e/ILC/ListOrderingDropdown/editTabBasicSection.js +24 -0
  117. package/cypress/e2e/ILC/ListOrderingDropdown/headerSection.js +108 -0
  118. package/cypress/e2e/ILC/ListOrderingDropdown/manuallyAndNonScoredEditTab.js +2 -1
  119. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +2 -4
  120. package/cypress/e2e/ILC/ListOrderingDropdown/specifyCorrectAnswerSection.js +7 -12
  121. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/specifyCorrectAnswerSection.js +10 -14
  122. package/cypress/e2e/ILC/ListOrderingNew/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +52 -0
  123. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +215 -0
  124. package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +23 -0
  125. package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +36 -9
  126. package/cypress/e2e/ILC/ListOrderingNew/manuallyAndNonScoredEditTab.js +2 -0
  127. package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +7 -23
  128. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +41 -0
  129. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +30 -0
  130. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +50 -0
  131. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +101 -0
  132. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/allOrNothingForAllViews.smoke.js +309 -0
  133. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/checkAddAlternativeButton.js +38 -0
  134. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabBasicSection.js +24 -0
  135. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabScoring.js +4 -1
  136. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/headerSection.js +38 -3
  137. package/cypress/e2e/ILC/Matching/Scoring/blankResponseScoring.js +38 -41
  138. package/cypress/e2e/ILC/Matching/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +98 -0
  139. package/cypress/e2e/ILC/Matching/allOrNothingScoringForAllViews.smoke.js +210 -0
  140. package/cypress/e2e/ILC/Matching/checkAlternativeButton.js +38 -0
  141. package/cypress/e2e/ILC/Matching/clickAndDrop.js +5 -5
  142. package/cypress/e2e/ILC/Matching/draggableOptions.js +7 -0
  143. package/cypress/e2e/ILC/Matching/editQuestion.smoke.js +3 -2
  144. package/cypress/e2e/ILC/Matching/editTabBasicSection.js +41 -0
  145. package/cypress/e2e/ILC/Matching/headerSection.js +38 -12
  146. package/cypress/e2e/ILC/Matching/questionInstructionsAndPromptSection.js +2 -15
  147. package/cypress/e2e/ILC/Matching/studentViewSettings.js +2 -0
  148. package/cypress/e2e/ILC/Matching/studentViewSettingsForGroupedLayout.js +1 -1
  149. package/cypress/e2e/ILC/MatchingDropdown/Scoring/blankResponseScoring.js +6 -6
  150. package/cypress/e2e/ILC/MatchingDropdown/allOrNothingScoringForAllViews.smoke.js +208 -0
  151. package/cypress/e2e/ILC/MultipleSelection/allOrNothingBasicForAllViews.smoke.js +2 -1
  152. package/cypress/e2e/ILC/MultipleSelection/editTabBasicSection.js +1 -1
  153. package/cypress/e2e/ILC/MultipleSelection/headerSection.js +3 -3
  154. package/cypress/e2e/ILC/MultipleSelectionGridNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +1 -0
  155. package/cypress/e2e/ILC/MultipleSelectionGridNew/editTabBasicSection.js +2 -2
  156. package/cypress/e2e/ILC/MultipleSelectionGridNew/headerSection.js +3 -3
  157. package/cypress/e2e/ILC/MultipleSelectionGridNew/previewContentsForAllViews.smoke.js +100 -69
  158. package/cypress/e2e/ILC/MultipleSelectionGridNew/styleAndLayoutCustomizationLayoutProperties.js +1 -0
  159. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithAlternatePointsGreaterThanCorrectPoints.js +79 -0
  160. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +42 -0
  161. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +42 -0
  162. package/cypress/e2e/ILC/NumberLine/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +75 -0
  163. package/cypress/e2e/ILC/NumberLine/checkAddAlternativeButton.js +32 -0
  164. package/cypress/e2e/ILC/NumberLine/editTabSection.js +38 -0
  165. package/cypress/e2e/ILC/NumberLine/headerSection.js +33 -4
  166. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +81 -0
  167. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +43 -0
  168. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +43 -0
  169. package/cypress/e2e/ILC/NumberLineLabel/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +76 -0
  170. package/cypress/e2e/ILC/NumberLineLabel/additionalSettingsBasic.js +1 -1
  171. package/cypress/e2e/ILC/NumberLineLabel/checkAddAlternativeButton.js +34 -0
  172. package/cypress/e2e/ILC/NumberLineLabel/editTabSection.js +38 -0
  173. package/cypress/e2e/ILC/NumberLineLabel/headerSection.js +37 -5
  174. package/cypress/e2e/ILC/NumberLineLabel/manuallyAndNonScoredEditTab.js +2 -1
  175. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/editQuestion.smoke.js +1 -1
  176. package/cypress/e2e/ILC/ShortTextResponseNew/allOrNothingBasicForAllViews.smoke.js +186 -0
  177. package/cypress/e2e/ILC/ShortTextResponseNew/editTabBasicSections.js +33 -49
  178. package/cypress/e2e/ILC/ShortTextResponseNew/headerSection.js +2 -4
  179. package/cypress/e2e/ILC/SingleSelection/editTabBasicSection.js +1 -1
  180. package/cypress/e2e/ILC/SingleSelection/headerSection.js +2 -2
  181. package/cypress/e2e/ILC/SingleSelectionGridNew/editTabBasicSection.js +2 -2
  182. package/cypress/e2e/ILC/SingleSelectionGridNew/headerSection.js +3 -3
  183. package/cypress/e2e/ILC/SingleSelectionGridNew/previewContentsForAllViews.smoke.js +101 -70
  184. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +86 -0
  185. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +86 -0
  186. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  187. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +3 -1
  188. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  189. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  190. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsScoringBasic.js +10 -3
  191. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +4 -2
  192. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +5 -3
  193. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  194. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsScoringBasic.js +4 -0
  195. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +64 -0
  196. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAddEvaluation.js +2 -0
  197. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAlternateAnswer.js +2 -0
  198. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +64 -0
  199. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  200. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  201. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  202. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  203. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsScoringBasic.js +8 -0
  204. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  205. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  206. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  207. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasic.js +1 -0
  208. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasicForAlternateAnswer.js +2 -0
  209. package/cypress/e2e/ILC/TextEntryMath/allOrNothingBasicForAllViewsFormulaTemplate.smoke.js +2 -0
  210. package/cypress/e2e/ILC/TextEntryMath/editTabBasicSection.js +27 -3
  211. package/cypress/e2e/ILC/TextEntryMath/headerSection.js +43 -0
  212. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +1 -0
  213. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +231 -0
  214. package/cypress/e2e/ILC/TextSelection/editTabBasicSection.js +2 -2
  215. package/cypress/e2e/ILC/TextSelection/headerSection.js +3 -3
  216. package/cypress/e2e/ILC/TextSelection/minimumScoringPenaltyPointsAndRoundingDropdown.js +1 -0
  217. package/cypress/e2e/ILC/ThinkSphere/createReviewItem.js +1 -1
  218. package/cypress/e2e/ILC/ThinkSphere/editTabBasicSection.js +1 -1
  219. package/cypress/e2e/ILC/ThinkSphere/editThinkSphereQuestion.smoke.js +145 -54
  220. package/cypress/e2e/ILC/ThinkSphere/equationEditorEditCategoryFlyOut.js +2 -0
  221. package/cypress/e2e/ILC/ThinkSphere/planPhase.js +45 -5
  222. package/cypress/e2e/ILC/ThinkSphere/previewTabPlanSection.js +8 -8
  223. package/cypress/e2e/ILC/ThinkSphere/previewTabReviewSection.js +97 -0
  224. package/cypress/e2e/ILC/ThinkSphere/previewTabSolveSection.js +36 -0
  225. package/cypress/e2e/ILC/ThinkSphere/solvePhase.js +3 -3
  226. package/cypress/e2e/ILC/ThinkSphere/studentViewPlanTabSection.js +393 -0
  227. package/cypress/e2e/ILC/ThinkSphere/studentViewReviewTabSection.js +141 -0
  228. package/cypress/e2e/ILC/ToolAudioPlayerNew/headerSection.js +90 -2
  229. package/cypress/e2e/ILC/UploadResponse/editTabBasicSection.js +34 -0
  230. package/cypress/e2e/ILC/UploadResponse/headerSection.js +38 -1
  231. package/cypress/e2e/ILC/UploadResponse/uploadResponsePreview.js +50 -13
  232. package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +14 -29
  233. package/cypress/e2e/ILC/chartsDotsPlot/headerSection.js +16 -1
  234. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsBasic.js +27 -28
  235. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  236. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +24 -24
  237. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsGreaterThanAlternativePoints.js +39 -37
  238. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsBasic.js +22 -23
  239. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  240. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +25 -24
  241. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +31 -31
  242. package/cypress/e2e/ILC/chartsDotsPlot/scoring/toleranceThresholdScoring.js +18 -19
  243. package/cypress/e2e/ILC/chartsDotsPlot/specifyCorrectAnswerSection.js +96 -0
  244. package/cypress/e2e/Sessions/fetchResponses.js +3 -3
  245. package/cypress/e2e/Sessions/saveResponseScores.js +2 -2
  246. package/cypress/fixtures/thinkSphereWhiteboardTools.js +66 -0
  247. package/cypress/pages/audioPlayerPage.js +47 -22
  248. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  249. package/cypress/pages/chartsBarPage.js +45 -0
  250. package/cypress/pages/chartsDotPlotPage.js +25 -0
  251. package/cypress/pages/chartsLinePage.js +28 -3
  252. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +5 -1
  253. package/cypress/pages/components/chartsCommonComponent.js +6 -2
  254. package/cypress/pages/components/ckEditorEquationEditorComponent.js +1 -0
  255. package/cypress/pages/components/ckEditorInsertImageComponent.js +3 -3
  256. package/cypress/pages/components/ckEditorInsertTableComponent.js +3 -3
  257. package/cypress/pages/components/ckEditorLinkComponent.js +8 -9
  258. package/cypress/pages/components/colorPopupComponent.js +6 -0
  259. package/cypress/pages/components/createQuestionBasePage.js +19 -6
  260. package/cypress/pages/components/desmosToolComponent.js +1 -1
  261. package/cypress/pages/components/draggableOptionsSectionComponent.js +2 -0
  262. package/cypress/pages/components/equationEditorSectionCommonComponent.js +10 -25
  263. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +31 -3
  264. package/cypress/pages/components/gridQuestionCommonComponent.js +55 -2
  265. package/cypress/pages/components/imageCanvasComponent.js +11 -5
  266. package/cypress/pages/components/questionInstructionsComponent.js +2 -0
  267. package/cypress/pages/components/scoringSectionBaseEditTab.js +3 -0
  268. package/cypress/pages/components/specifyRowsAndColumnsComponent.js +16 -0
  269. package/cypress/pages/contentBlocksPage.js +2 -0
  270. package/cypress/pages/desmos3DGraphingPage.js +149 -4
  271. package/cypress/pages/desmosGeometryPage.js +184 -4
  272. package/cypress/pages/drawingResponsePage.js +10 -1
  273. package/cypress/pages/fillInTheGapsDragAndDropPage.js +3 -8
  274. package/cypress/pages/gradingGridViewPage.js +64 -0
  275. package/cypress/pages/graphingPage.js +27 -8
  276. package/cypress/pages/gridFillPage.js +27 -9
  277. package/cypress/pages/imageHighlightPage.js +115 -15
  278. package/cypress/pages/index.js +1 -0
  279. package/cypress/pages/listOrderingPage.js +40 -1
  280. package/cypress/pages/matchingPage.js +29 -10
  281. package/cypress/pages/numberLineLabelPage.js +31 -8
  282. package/cypress/pages/numberLinePage.js +19 -7
  283. package/cypress/pages/singleSelectionPage.js +30 -1
  284. package/cypress/pages/textEntryMathPage.js +24 -1
  285. package/cypress/pages/textSelectionPage.js +2 -2
  286. package/cypress/pages/thinkSpherePage.js +928 -87
  287. package/cypress/pages/uploadResponsePage.js +17 -1
  288. package/cypress/pages/videoResponsePage.js +3 -0
  289. package/cypress/support/commands.js +9 -0
  290. package/cypress/support/helpers/createItem.js +22 -3
  291. package/cypress/support/helpers/utilities.js +14 -1
  292. package/package.json +2 -2
  293. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/checkAnswerFunctionalityForAllViews.js +0 -0
  294. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/editQuestion.smoke.js +0 -0
@@ -31,7 +31,7 @@ const selectors = {
31
31
  ...editCategoryFlyout,
32
32
  ...createCustomCategoryFlyout,
33
33
  ...createQuestionBasePage,
34
-
34
+
35
35
  editQuestionPencil: () => cy.get('[class*="Widgetstyles__HeaderContainer"] button.icon-pencil'),
36
36
  widgetHeaderQuestionTitle: () => cy.get('[class*="Widgetstyles__HeaderContainer"] [class*="Widgetstyles__QuestionTypeText"]'),
37
37
  imageUploadSection: () => cy.get('[class*="TabsComponentstyles__ImageUploadComponentWrapper"]'),
@@ -80,13 +80,13 @@ const selectors = {
80
80
  planStrategyListResetToDefault: () => cy.get('[class*="Planstyles__StrategiesWrapper"] [class*="Planstyles__DefaultResetWrapper"]'),
81
81
  planStrategyAddItemButton: () => cy.get('[class*="Planstyles__StrategiesWrapper"] [class*="ListOptionsComponentstyles__AddItemWrapper"] [role="button"]'),
82
82
  planStrategyCheckbox: () => cy.get('[class*="Planstyles__StrategiesWrapper"] .thinksphere-option-text-field-wrapper [data-ngie-testid*="-checkbox"]'),
83
- videoLinkComponent: () => utilities.getNthElement(cy.get('[class*="ListOptionsComponentstyles__UploadVideoWrapper"]'), 0),
83
+ videoLinkComponent: (nthElement = 0) => utilities.getNthElement(cy.get('[class*="ListOptionsComponentstyles__UploadVideoWrapper"]'), nthElement),
84
84
  uploadVideoLinkButton: () => cy.get('[class*="ListOptionsComponentstyles__UploadVideoTextWrapper"]'),
85
85
  planSentenceStarterSection: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"]'),
86
86
  planSentenceStarterListHeader: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] [class*="Planstyles__HeadingTextWrapper"]'),
87
87
  planSentenceStarterListResetToDefault: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] [class*="Planstyles__DefaultResetWrapper"]'),
88
88
  planSentenceStarterAddItemButton: () => cy.get('[class*="Planstyles__SentenceFramesWrapper"] [class*="ListOptionsComponentstyles__AddItemWrapper"] [role="button"]'),
89
- 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"]'),
90
90
  solvePhaseAccordian: () => cy.get('[class*="Planstyles__SolveAccordianWrapper"] [class~="MuiAccordionSummary-root"] [role="button"]'),
91
91
  solvePhaseAccordianLabel: () => cy.get('[class*="Solvestyles__AccordionLabel"]'),
92
92
  inputTypeVideoFile: () => cy.get('[class*="Planstyles__StrategiesWrapper"] input[type="file"]'),
@@ -98,7 +98,7 @@ const selectors = {
98
98
  editVideoButton: () => cy.get('[aria-label*="Change video"]'),
99
99
  deleteVideoButton: () => cy.get('[aria-label*="Delete video"]'),
100
100
  listInputField: () => cy.get('.option-component textarea[placeholder]'),
101
- deleteButton: () => cy.get('button[aria-label*="Delete"]'),
101
+ deleteButton: () => cy.get('button[aria-label*="Delete"].ngie-icon-btn-cls'),
102
102
  optionNumeration: () => cy.get('[class*="MuiInputAdornment-positionStart"]'),
103
103
  iconPencil: () => cy.get('div[class*="icon-pencil"]'),
104
104
  iconXCircle: () => cy.get('div[class*="icon-x-circle"]'),
@@ -110,8 +110,8 @@ const selectors = {
110
110
  thinkSphereMathQuestionHeaderDeleteIcon: () => cy.get('[class*="Widgetstyles__HeaderContainer"] [class*="icon-Delete"]'),
111
111
  addCheckMathQuestionButton: () => cy.get('.ngie-btn-typography').contains(`Add 'Check your math' question`),
112
112
  firstAvailableItemLink: () => utilities.getNthElement(cy.get('.browse-item-styled-link'), 0),
113
- saveButton: () => cy.get('.ngie-btn-typography').contains('save',{matchCase: false}),
114
- cancelButton: () => cy.get('.ngie-btn-typography').contains('cancel',{matchCase: false}),
113
+ saveButton: () => cy.get('.ngie-btn-typography').contains('save', { matchCase: false }),
114
+ cancelButton: () => cy.get('.ngie-btn-typography').contains('cancel', { matchCase: false }),
115
115
  AddCheckMathQuestionHeader: () => cy.get('.browse-title-wrapper').contains(`Add 'Check your math' question`),
116
116
  singleOptionTextFieldWrapper: () => cy.get('[class*="SingleOptionstyle__TextFieldWrapper"]'),
117
117
  customizeStampComponent: () => cy.get('[class*="CustomizeStampstyles__CustomizeStampWrapper"]'),
@@ -150,9 +150,9 @@ const selectors = {
150
150
  popupTitle: () => cy.get('[class*="dialog-title-wrapper"]'),
151
151
  strategyNameLabel: () => cy.get('[class*="ThinkSpherePreviewstyles__StrategyNameTextWrapper"]'),
152
152
  strategyNameInputField: () => cy.get('[class*="new-strategy-name-field"]'),
153
- addStrategyPopupCancelButton: () =>
153
+ addStrategyPopupCancelButton: () =>
154
154
  cy.get('.dialog-content').contains('Cancel'),
155
- addStrategyPopupSaveButton: () =>
155
+ addStrategyPopupSaveButton: () =>
156
156
  cy.get('.dialog-content').contains('Save'),
157
157
  // preview tab plan section selection
158
158
  questionInstructionPreviewTexWrapper: () => cy.get('.question-instruction.question-text-wrapper'),
@@ -160,9 +160,9 @@ const selectors = {
160
160
  questionInstructionPreviewImageExpandButton: () => cy.get('[class*="ThinkSpherePreviewstyles__ExpandImageIconWrapper"]'),
161
161
  questionInstructionImagePopup: () => cy.get('[class*="QuestionTextstyle__ImagePopupDiv"]'),
162
162
  closeExpandImagePopupButton: () => cy.get('.close-popup-btn'),
163
- PlanningPreviewWrapper : () => cy.get('[class*="PlanningPreviewstyles__PlanningPreviewWrapper"]'),
163
+ PlanningPreviewWrapper: () => cy.get('[class*="PlanningPreviewstyles__PlanningPreviewWrapper"]'),
164
164
  planningPreviewHeading: () => cy.get('[class*="PlanningPreviewstyles__HeadingWrapper"]'),
165
- planningWriteWrapper : () => cy.get('[class*="PlanningPreviewstyles__WriteWrapper"]'),
165
+ planningWriteWrapper: () => cy.get('[class*="PlanningPreviewstyles__WriteWrapper"]'),
166
166
  problemAskingWrapper: () => cy.get('[class*="PlanningPreviewstyles__ProblemAskingWrapper"]'),
167
167
  contentEditableDiv: () => cy.get('[class*="PlanningPreviewstyles__ContentEditableDiv"]'),
168
168
  micIconWrapper: () => cy.get('[class*="PlanningPreviewstyles__MicIconWrapper"]'),
@@ -212,6 +212,45 @@ const selectors = {
212
212
  cardWrapper: () => cy.get('.card-wrapper'),
213
213
  cardLabel: () => cy.get('.widget-card-label'),
214
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'),
215
254
  };
216
255
 
217
256
  const steps = {
@@ -365,20 +404,20 @@ const steps = {
365
404
  */
366
405
  uploadVideoFile: (file) => {
367
406
  const fileName = file.split('/').pop(); // Extracts only 'sample.mp4'
368
-
407
+
369
408
  cy.fixture(file, 'binary') // Read the file as binary
370
409
  .then(Cypress.Blob.binaryStringToBlob)
371
410
  .then((blob) => {
372
411
  const fileObj = new File([blob], fileName, { type: 'video/mp4' });
373
412
  const dataTransfer = new DataTransfer();
374
413
  dataTransfer.items.add(fileObj);
375
-
414
+
376
415
  thinkSpherePage.inputTypeVideoFile().then(($input) => {
377
416
  $input[0].files = dataTransfer.files;
378
417
  cy.wrap($input).trigger('change', { force: true });
379
418
  });
380
419
  });
381
-
420
+
382
421
  cy.wait(4000);
383
422
  },
384
423
 
@@ -454,13 +493,13 @@ const steps = {
454
493
  },
455
494
  expandSolvePhaseAccordion: () => {
456
495
  thinkSpherePage.solvePhaseAccordion()
457
- .click()
458
- .should('have.attr', 'aria-expanded', 'true');
496
+ .click()
497
+ .should('have.attr', 'aria-expanded', 'true');
459
498
  },
460
499
  expandCustomizeToolsAndControls: () => {
461
500
  thinkSpherePage.customizeToolsAndControls()
462
- .click()
463
- .should('have.attr', 'aria-expanded', 'true');
501
+ .click()
502
+ .should('have.attr', 'aria-expanded', 'true');
464
503
  },
465
504
  /**
466
505
  * Verifies the tools and controls options.
@@ -477,9 +516,9 @@ const steps = {
477
516
  */
478
517
  selectOptionFromToolsAndControls: (option) => {
479
518
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
480
- .click();
519
+ .click();
481
520
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
482
- .should('have.attr', 'data-aria-pressed', 'true');
521
+ .should('have.attr', 'data-aria-pressed', 'true');
483
522
  },
484
523
  /**
485
524
  * Deselects an option from tools and controls.
@@ -487,9 +526,9 @@ const steps = {
487
526
  */
488
527
  deselectOptionFromToolsAndControls: (option) => {
489
528
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
490
- .click();
529
+ .click();
491
530
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
492
- .should('have.attr', 'data-aria-pressed', 'false');
531
+ .should('have.attr', 'data-aria-pressed', 'false');
493
532
  },
494
533
  /**
495
534
  * Verifies if an option is selected.
@@ -497,7 +536,7 @@ const steps = {
497
536
  */
498
537
  verifyOptionIsSelected: (option) => {
499
538
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
500
- .should('have.attr', 'data-aria-pressed', 'true');
539
+ .should('have.attr', 'data-aria-pressed', 'true');
501
540
  },
502
541
  /**
503
542
  * Verifies if an option is not selected.
@@ -505,7 +544,7 @@ const steps = {
505
544
  */
506
545
  verifyOptionIsNotSelected: (option) => {
507
546
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
508
- .should('have.attr', 'data-aria-pressed', 'false');
547
+ .should('have.attr', 'data-aria-pressed', 'false');
509
548
  },
510
549
 
511
550
  /**
@@ -538,7 +577,7 @@ const steps = {
538
577
  utilities.getNthElement(thinkSpherePage.deleteButton(), index)
539
578
  .click();
540
579
  },
541
-
580
+
542
581
  /**
543
582
  * Verifies the delete option button disabled state.
544
583
  * @param {string} list - The list to verify ('strategy' or other).
@@ -620,14 +659,14 @@ const steps = {
620
659
  .within(() => {
621
660
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
622
661
  .clear()
623
- .type(text);
662
+ .type(text, { delay: 500 });
624
663
  });
625
664
  } else {
626
665
  thinkSpherePage.planSentenceStarterSection()
627
666
  .within(() => {
628
667
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
629
668
  .clear()
630
- .type(text);
669
+ .type(text, { delay: 500 });
631
670
  });
632
671
  }
633
672
  },
@@ -754,9 +793,9 @@ const steps = {
754
793
  },
755
794
 
756
795
  verifyOptionAlignmentIsSelected: (direction) => {
757
- if(direction === 'topLeft') {
796
+ if (direction === 'topLeft') {
758
797
  thinkSpherePage.whiteBoardCanvas()
759
- .should('not.have.css', 'justify-content', 'start');
798
+ .should('not.have.css', 'justify-content', 'start');
760
799
  } else {
761
800
  thinkSpherePage.whiteBoardCanvas()
762
801
  .should('have.css', 'justify-content', (direction === 'center' || direction === 'flex-end') ? 'normal' : direction);
@@ -766,7 +805,7 @@ const steps = {
766
805
  }
767
806
  }
768
807
  },
769
-
808
+
770
809
  clickOnImageRadioButton: () => {
771
810
  thinkSpherePage.imageRadioButton()
772
811
  .click();
@@ -775,10 +814,11 @@ const steps = {
775
814
  clickOnEditQuestionIcon: () => {
776
815
  utilities.getNthElement(thinkSpherePage.editQuestionPencil(), 0)
777
816
  .click();
817
+ cy.wait(1000);
778
818
  },
779
819
 
780
820
  clickOnQuestionInstructionExpandImageButton: () => {
781
- thinkSpherePage.questionInstructionPreviewImageExpandButton()
821
+ utilities.getNthElement(thinkSpherePage.questionInstructionPreviewImageExpandButton(), 0)
782
822
  .click();
783
823
  },
784
824
 
@@ -937,20 +977,20 @@ const steps = {
937
977
 
938
978
  verifyCategoryCharactersAndUnSelectedState: (arrayOfSymbolsAriaLabel) => {
939
979
  thinkSpherePage.categoryCharacters()
940
- .then(($symbols) => {
941
- for (let index = 10; index < $symbols.length - 1; index++) {
942
- editCategoryFlyout.categoryCharacters()
943
- .eq(index)
944
- .should('not.have.class', 'Mui-selected')
945
- .invoke('attr', 'aria-label')
946
- .then((ariaLabel) => {
947
- const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
980
+ .then(($symbols) => {
981
+ for (let index = 10; index < $symbols.length - 1; index++) {
948
982
  editCategoryFlyout.categoryCharacters()
949
983
  .eq(index)
950
- .verifyTooltip(tooltipText);
951
- });
952
- }
953
- });
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
+ });
954
994
  },
955
995
 
956
996
  verifyCategoryCharactersAndSelectedState: (arrayOfSymbolsAriaLabel) => {
@@ -958,15 +998,15 @@ const steps = {
958
998
  .then(($symbols) => {
959
999
  for (let index = 0; index < arrayOfSymbolsAriaLabel.length - 1; index++) {
960
1000
  editCategoryFlyout.categoryCharacters()
961
- .eq(index)
962
- .should('have.class', 'Mui-selected')
963
- .invoke('attr', 'aria-label')
964
- .then((ariaLabel) => {
965
- const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
966
- editCategoryFlyout.categoryCharacters()
967
- .eq(index)
968
- .verifyTooltip(tooltipText);
969
- });
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
+ });
970
1010
  }
971
1011
  });
972
1012
  },
@@ -978,12 +1018,12 @@ const steps = {
978
1018
 
979
1019
  verifyDropdownOptions: (dropDownListArray) => {
980
1020
  thinkSpherePage.categoriesDropDownMenuItem().should('have.length', dropDownListArray.length).each(($item) => {
981
- cy.wrap($item)
982
- .invoke('text')
983
- .then((text) => {
984
- const trimmedText = text.trim();
985
- expect(dropDownListArray).to.include(trimmedText);
986
- });
1021
+ cy.wrap($item)
1022
+ .invoke('text')
1023
+ .then((text) => {
1024
+ const trimmedText = text.trim();
1025
+ expect(dropDownListArray).to.include(trimmedText);
1026
+ });
987
1027
  });
988
1028
  },
989
1029
 
@@ -993,22 +1033,22 @@ const steps = {
993
1033
 
994
1034
  clickOnQuestionTypesAccordion: () => {
995
1035
  thinkSpherePage.filterSectionQuestionTypesAccordion()
996
- .click()
1036
+ .click()
997
1037
  },
998
1038
 
999
1039
  typeInSearchBar: (input) => {
1000
1040
  thinkSpherePage.searchBar()
1001
- .clear()
1002
- .type(input)
1003
- .should('have.value', input);
1041
+ .clear()
1042
+ .type(input)
1043
+ .should('have.value', input);
1004
1044
  },
1005
1045
 
1006
1046
  searchInSearchBar: (input) => {
1007
1047
  thinkSpherePage.searchBar()
1008
- .clear()
1009
- .type(input)
1010
- .should('have.value', input)
1011
- .type('{enter}');
1048
+ .clear()
1049
+ .type(input)
1050
+ .should('have.value', input)
1051
+ .type('{enter}');
1012
1052
  },
1013
1053
 
1014
1054
  clickOnSolvePhaseAccordionIcon: (element) => {
@@ -1062,7 +1102,7 @@ const steps = {
1062
1102
 
1063
1103
  verifyTextIsNotEmpty: (element) => {
1064
1104
  element.invoke('text')
1065
- .should('not.be.empty');
1105
+ .should('not.be.empty');
1066
1106
  },
1067
1107
 
1068
1108
  verifyLength: (element, length) => {
@@ -1104,6 +1144,492 @@ const steps = {
1104
1144
  expect(scrollWidth).to.be.greaterThan(clientWidth);
1105
1145
  });
1106
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
+ }
1107
1633
  };
1108
1634
 
1109
1635
  const tests = {
@@ -1218,7 +1744,7 @@ const tests = {
1218
1744
  utilities.verifyElementVisibilityState(thinkSpherePage.tooltipText(), 'notExist');
1219
1745
  });
1220
1746
  },
1221
-
1747
+
1222
1748
  /**
1223
1749
  * Verifies the add option functionality.
1224
1750
  * @param {string} list - The list to add the option to ('strategy' or other).
@@ -1234,13 +1760,13 @@ const tests = {
1234
1760
  initialOptionCount = count;
1235
1761
  });
1236
1762
  });
1237
-
1763
+
1238
1764
  thinkSpherePage.steps.addOption(list);
1239
1765
  thinkSpherePage.planStrategySection()
1240
1766
  .within(() => {
1241
1767
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1242
1768
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter strategy name');
1243
- });
1769
+ });
1244
1770
  thinkSpherePage.steps.deleteOption(5);
1245
1771
  } else {
1246
1772
  thinkSpherePage.planSentenceStarterSection()
@@ -1249,13 +1775,13 @@ const tests = {
1249
1775
  initialOptionCount = count;
1250
1776
  });
1251
1777
  });
1252
-
1778
+
1253
1779
  thinkSpherePage.steps.addOption(list);
1254
1780
  thinkSpherePage.planSentenceStarterSection()
1255
1781
  .within(() => {
1256
1782
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1257
1783
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter sentence starter name');
1258
- });
1784
+ });
1259
1785
  thinkSpherePage.steps.deleteOption(10);
1260
1786
  }
1261
1787
  });
@@ -1334,7 +1860,7 @@ const tests = {
1334
1860
  }
1335
1861
  });
1336
1862
  },
1337
-
1863
+
1338
1864
  /**
1339
1865
  * Verifies the drag handle tooltip.
1340
1866
  * @param {number} NthElement - The index of the drag handle.
@@ -1484,17 +2010,17 @@ const tests = {
1484
2010
  thinkSpherePage.steps.selectOption(list, 1);
1485
2011
  utilities.verifyCSS(
1486
2012
  utilities.getNthElement(thinkSpherePage.planStrategyCheckbox().find('svg'), 1), {
1487
- 'fill': css.color.uncheckedCheckbox,
1488
- 'width': '12px',
1489
- 'height': '12px',
2013
+ 'fill': css.color.uncheckedCheckbox,
2014
+ 'width': '12px',
2015
+ 'height': '12px',
1490
2016
  });
1491
2017
  } else {
1492
2018
  thinkSpherePage.steps.selectOption(list, 1);
1493
2019
  utilities.verifyCSS(
1494
2020
  utilities.getNthElement(thinkSpherePage.planSentenceStarterCheckbox().find('svg'), 1), {
1495
- 'fill': css.color.uncheckedCheckbox,
1496
- 'width': '12px',
1497
- 'height': '12px',
2021
+ 'fill': css.color.uncheckedCheckbox,
2022
+ 'width': '12px',
2023
+ 'height': '12px',
1498
2024
  });
1499
2025
  }
1500
2026
  });
@@ -1549,7 +2075,7 @@ const tests = {
1549
2075
  thinkSpherePage.steps.addOptionText(list, optionIndex, inputFieldText);
1550
2076
  });
1551
2077
  });
1552
-
2078
+
1553
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', () => {
1554
2080
  utilities.getNthElement(thinkSpherePage.deleteButton(), list === 'strategy' ? 0 : 5)
1555
2081
  .trigger('mouseover', { force: true });
@@ -1614,11 +2140,11 @@ const tests = {
1614
2140
  thinkSpherePage.planSentenceStarterListResetToDefault()
1615
2141
  .click();
1616
2142
  thinkSpherePage.planSentenceStarterSection()
1617
- .within(() => {
1618
- optionList.forEach((option, index) => {
1619
- thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
1620
- });
1621
- })
2143
+ .within(() => {
2144
+ optionList.forEach((option, index) => {
2145
+ thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
2146
+ });
2147
+ })
1622
2148
  });
1623
2149
  }
1624
2150
  },
@@ -1755,7 +2281,7 @@ const tests = {
1755
2281
  utilities.verifyElementVisibilityState(thinkSpherePage.deleteVideoButton(), 'visible');
1756
2282
  });
1757
2283
  });
1758
-
2284
+
1759
2285
  it('CSS of edit video button and delete video button', { tags: 'css' }, () => {
1760
2286
  thinkSpherePage.videoLinkComponent().within(() => {
1761
2287
  utilities.verifyCSS(thinkSpherePage.editVideoButton(), {
@@ -1848,7 +2374,7 @@ const tests = {
1848
2374
  });
1849
2375
  });
1850
2376
 
1851
- 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' , () => {
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', () => {
1852
2378
  utilities.verifyElementVisibilityState(thinkSpherePage.editBoxTextInput(), 'visible');
1853
2379
  thinkSpherePage.editBoxTextInput().blur();
1854
2380
  utilities.verifyElementVisibilityState(thinkSpherePage.editIconPencil(), 'visible');
@@ -1856,7 +2382,7 @@ const tests = {
1856
2382
  thinkSpherePage.editBoxTextInput().should('have.attr', 'placeholder', 'Enter title');
1857
2383
  thinkSpherePage.editBoxTextInput().type('Test Title');
1858
2384
  thinkSpherePage.editBoxTextInput().blur();
1859
- utilities.verifyInnerText(thinkSpherePage.editBoxText(),'Test Title');
2385
+ utilities.verifyInnerText(thinkSpherePage.editBoxText(), 'Test Title');
1860
2386
  });
1861
2387
  },
1862
2388
 
@@ -1865,6 +2391,321 @@ const tests = {
1865
2391
  thinkSpherePage.editTab().should('have.class', 'Mui-selected');
1866
2392
  });
1867
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
+ }
1868
2709
  };
1869
2710
 
1870
2711
  export const thinkSpherePage = {