itemengine-cypress-automation 1.0.379-IEI-5744-ecb0cd7.0 → 1.0.379-fullExecutionFixes-683b689.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 (267) 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/editTabScoring.js +1 -0
  51. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/pagination.js +1 -1
  52. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/studentViewSettingsForGroupedLayout.js +3 -0
  53. package/cypress/e2e/ILC/DrawingResponse/drawingResponseAdditionalSettings.js +1 -0
  54. package/cypress/e2e/ILC/DrawingResponse/drawingResponseBackground.js +2 -8
  55. package/cypress/e2e/ILC/DrawingResponse/drawingResponseCustomizeAdditionalOptions.js +1 -0
  56. package/cypress/e2e/ILC/DrawingResponse/drawingResponseEditTabBasicSection.js +3 -3
  57. package/cypress/e2e/ILC/DrawingResponse/drawingResponsePreviewTabContents.smoke.js +1 -3
  58. package/cypress/e2e/ILC/EssayResponse/createCustomCategory.smoke.js +2 -2
  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/previewContentsForAllViewInIncompleteAuthoring.smoke.js +7 -7
  63. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editQuestion.smoke.js +40 -0
  64. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/allOrNothingForAllViews.smoke.js +216 -0
  65. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editQuestion.smoke.js +45 -0
  66. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/responseAnswersAndAcceptedStudentInput.js +3 -0
  67. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/supportedFileTypes.js +3 -1
  68. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +73 -0
  69. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +38 -0
  70. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +38 -0
  71. package/cypress/e2e/ILC/Graphing/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +87 -0
  72. package/cypress/e2e/ILC/Graphing/allOrNothingForAllViews.smoke.js +2 -2
  73. package/cypress/e2e/ILC/Graphing/checkAddAlternativeButton.js +35 -0
  74. package/cypress/e2e/ILC/Graphing/editQuestion.smoke.js +28 -0
  75. package/cypress/e2e/ILC/Graphing/editTabBasicSection.js +38 -0
  76. package/cypress/e2e/ILC/Graphing/editTabScoringSection.js +1 -0
  77. package/cypress/e2e/ILC/Graphing/headerSection.js +36 -4
  78. package/cypress/e2e/ILC/Graphing/layoutAndGridOptions.js +6 -3
  79. package/cypress/e2e/ILC/GridFill/addAlternateButton.js +40 -0
  80. package/cypress/e2e/ILC/GridFill/allOrNothingBasicForAllViews.smoke.js +210 -0
  81. package/cypress/e2e/ILC/GridFill/customizeLayoutFillImageBackgroundImage.js +2 -2
  82. package/cypress/e2e/ILC/GridFill/headerSection.js +3 -3
  83. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +39 -0
  84. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  85. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +39 -0
  86. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountAllOrNothingCorrectPointsGreaterThanAlternativePoints.js +37 -0
  87. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountallOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  88. package/cypress/e2e/ILC/GridFill/scoring/cellshadeCountAllOrNothingAlternativePointsGreaterThanCorrectPoints.js +36 -0
  89. package/cypress/e2e/ILC/GridFill/scoring/checkLabelSaveAsYouGo.js +75 -0
  90. package/cypress/e2e/ILC/GridFill/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +2 -1
  91. package/cypress/e2e/ILC/ImageHighlight/allOrNothingForAllViews.smoke.js +212 -0
  92. package/cypress/e2e/ILC/ImageHighlight/customiseHighlightStyle.js +29 -0
  93. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +24 -0
  94. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +24 -0
  95. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +24 -0
  96. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +86 -0
  97. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/manuallyAndNonScored.js +2 -4
  98. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsBasic.js +1 -1
  99. package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +237 -1
  100. package/cypress/e2e/ILC/ListOrderingDropdown/checkAddAlternativeButton.js +35 -0
  101. package/cypress/e2e/ILC/ListOrderingDropdown/editTabBasicSection.js +24 -0
  102. package/cypress/e2e/ILC/ListOrderingDropdown/headerSection.js +108 -0
  103. package/cypress/e2e/ILC/ListOrderingDropdown/manuallyAndNonScoredEditTab.js +2 -1
  104. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +2 -4
  105. package/cypress/e2e/ILC/ListOrderingDropdown/specifyCorrectAnswerSection.js +7 -12
  106. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/specifyCorrectAnswerSection.js +10 -14
  107. package/cypress/e2e/ILC/ListOrderingNew/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +52 -0
  108. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +215 -0
  109. package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +23 -0
  110. package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +36 -9
  111. package/cypress/e2e/ILC/ListOrderingNew/manuallyAndNonScoredEditTab.js +2 -0
  112. package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +7 -23
  113. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +41 -0
  114. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +30 -0
  115. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +50 -0
  116. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +101 -0
  117. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/allOrNothingForAllViews.smoke.js +309 -0
  118. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/checkAddAlternativeButton.js +38 -0
  119. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabBasicSection.js +24 -0
  120. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabScoring.js +4 -1
  121. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/headerSection.js +36 -1
  122. package/cypress/e2e/ILC/Matching/Scoring/blankResponseScoring.js +38 -41
  123. package/cypress/e2e/ILC/Matching/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +98 -0
  124. package/cypress/e2e/ILC/Matching/allOrNothingScoringForAllViews.smoke.js +210 -0
  125. package/cypress/e2e/ILC/Matching/checkAlternativeButton.js +38 -0
  126. package/cypress/e2e/ILC/Matching/clickAndDrop.js +5 -5
  127. package/cypress/e2e/ILC/Matching/draggableOptions.js +7 -0
  128. package/cypress/e2e/ILC/Matching/editQuestion.smoke.js +3 -2
  129. package/cypress/e2e/ILC/Matching/editTabBasicSection.js +41 -0
  130. package/cypress/e2e/ILC/Matching/headerSection.js +38 -12
  131. package/cypress/e2e/ILC/Matching/questionInstructionsAndPromptSection.js +2 -15
  132. package/cypress/e2e/ILC/Matching/studentViewSettings.js +2 -0
  133. package/cypress/e2e/ILC/Matching/studentViewSettingsForGroupedLayout.js +1 -1
  134. package/cypress/e2e/ILC/MatchingDropdown/Scoring/blankResponseScoring.js +6 -6
  135. package/cypress/e2e/ILC/MatchingDropdown/allOrNothingScoringForAllViews.smoke.js +208 -0
  136. package/cypress/e2e/ILC/MultipleSelection/allOrNothingBasicForAllViews.smoke.js +2 -1
  137. package/cypress/e2e/ILC/MultipleSelectionGridNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +1 -0
  138. package/cypress/e2e/ILC/MultipleSelectionGridNew/previewContentsForAllViews.smoke.js +100 -69
  139. package/cypress/e2e/ILC/MultipleSelectionGridNew/styleAndLayoutCustomizationLayoutProperties.js +1 -0
  140. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithAlternatePointsGreaterThanCorrectPoints.js +79 -0
  141. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +42 -0
  142. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +42 -0
  143. package/cypress/e2e/ILC/NumberLine/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +75 -0
  144. package/cypress/e2e/ILC/NumberLine/checkAddAlternativeButton.js +32 -0
  145. package/cypress/e2e/ILC/NumberLine/editTabSection.js +38 -0
  146. package/cypress/e2e/ILC/NumberLine/headerSection.js +33 -4
  147. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +81 -0
  148. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +43 -0
  149. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +43 -0
  150. package/cypress/e2e/ILC/NumberLineLabel/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +76 -0
  151. package/cypress/e2e/ILC/NumberLineLabel/additionalSettingsBasic.js +1 -1
  152. package/cypress/e2e/ILC/NumberLineLabel/checkAddAlternativeButton.js +34 -0
  153. package/cypress/e2e/ILC/NumberLineLabel/editTabSection.js +38 -0
  154. package/cypress/e2e/ILC/NumberLineLabel/headerSection.js +37 -5
  155. package/cypress/e2e/ILC/NumberLineLabel/manuallyAndNonScoredEditTab.js +2 -1
  156. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/editQuestion.smoke.js +1 -1
  157. package/cypress/e2e/ILC/ShortTextResponseNew/allOrNothingBasicForAllViews.smoke.js +186 -0
  158. package/cypress/e2e/ILC/ShortTextResponseNew/editTabBasicSections.js +35 -51
  159. package/cypress/e2e/ILC/ShortTextResponseNew/headerSection.js +2 -4
  160. package/cypress/e2e/ILC/SingleSelectionGridNew/previewContentsForAllViews.smoke.js +101 -70
  161. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +86 -0
  162. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +86 -0
  163. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  164. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +3 -1
  165. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  166. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  167. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsScoringBasic.js +10 -3
  168. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +4 -2
  169. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +5 -3
  170. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  171. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsScoringBasic.js +4 -0
  172. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +64 -0
  173. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAddEvaluation.js +2 -0
  174. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAlternateAnswer.js +2 -0
  175. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +64 -0
  176. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  177. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  178. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  179. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  180. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsScoringBasic.js +8 -0
  181. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  182. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  183. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  184. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasic.js +1 -0
  185. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasicForAlternateAnswer.js +2 -0
  186. package/cypress/e2e/ILC/TextEntryMath/allOrNothingBasicForAllViewsFormulaTemplate.smoke.js +2 -0
  187. package/cypress/e2e/ILC/TextEntryMath/editTabBasicSection.js +27 -3
  188. package/cypress/e2e/ILC/TextEntryMath/headerSection.js +43 -0
  189. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +1 -0
  190. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +231 -0
  191. package/cypress/e2e/ILC/TextSelection/minimumScoringPenaltyPointsAndRoundingDropdown.js +1 -0
  192. package/cypress/e2e/ILC/ThinkSphere/createReviewItem.js +1 -1
  193. package/cypress/e2e/ILC/ThinkSphere/editTabBasicSection.js +7 -1
  194. package/cypress/e2e/ILC/ThinkSphere/editThinkSphereQuestion.smoke.js +145 -54
  195. package/cypress/e2e/ILC/ThinkSphere/equationEditorEditCategoryFlyOut.js +2 -0
  196. package/cypress/e2e/ILC/ThinkSphere/planPhase.js +45 -5
  197. package/cypress/e2e/ILC/ThinkSphere/previewTabPlanSection.js +12 -12
  198. package/cypress/e2e/ILC/ThinkSphere/previewTabReviewSection.js +97 -0
  199. package/cypress/e2e/ILC/ThinkSphere/previewTabSolveSection.js +36 -0
  200. package/cypress/e2e/ILC/ThinkSphere/solvePhase.js +4 -4
  201. package/cypress/e2e/ILC/ThinkSphere/studentViewPlanTabSection.js +393 -0
  202. package/cypress/e2e/ILC/ThinkSphere/studentViewReviewTabSection.js +141 -0
  203. package/cypress/e2e/ILC/ToolAudioPlayerNew/headerSection.js +90 -2
  204. package/cypress/e2e/ILC/UploadResponse/editTabBasicSection.js +34 -0
  205. package/cypress/e2e/ILC/UploadResponse/headerSection.js +38 -1
  206. package/cypress/e2e/ILC/UploadResponse/uploadResponsePreview.js +50 -13
  207. package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +14 -29
  208. package/cypress/e2e/ILC/chartsDotsPlot/headerSection.js +16 -1
  209. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsBasic.js +27 -28
  210. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  211. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +24 -24
  212. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsGreaterThanAlternativePoints.js +39 -37
  213. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsBasic.js +22 -23
  214. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  215. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +25 -24
  216. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +31 -31
  217. package/cypress/e2e/ILC/chartsDotsPlot/scoring/toleranceThresholdScoring.js +18 -19
  218. package/cypress/e2e/ILC/chartsDotsPlot/specifyCorrectAnswerSection.js +96 -0
  219. package/cypress/e2e/Sessions/fetchResponses.js +3 -3
  220. package/cypress/e2e/Sessions/saveResponseScores.js +2 -2
  221. package/cypress/fixtures/thinkSphereWhiteboardTools.js +66 -0
  222. package/cypress/pages/audioPlayerPage.js +47 -22
  223. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  224. package/cypress/pages/chartsBarPage.js +45 -0
  225. package/cypress/pages/chartsDotPlotPage.js +25 -0
  226. package/cypress/pages/chartsLinePage.js +28 -3
  227. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +5 -1
  228. package/cypress/pages/components/chartsCommonComponent.js +6 -2
  229. package/cypress/pages/components/ckEditorEquationEditorComponent.js +1 -0
  230. package/cypress/pages/components/ckEditorInsertImageComponent.js +3 -3
  231. package/cypress/pages/components/ckEditorInsertTableComponent.js +3 -3
  232. package/cypress/pages/components/ckEditorLinkComponent.js +8 -9
  233. package/cypress/pages/components/colorPopupComponent.js +6 -0
  234. package/cypress/pages/components/createQuestionBasePage.js +14 -1
  235. package/cypress/pages/components/draggableOptionsSectionComponent.js +2 -0
  236. package/cypress/pages/components/equationEditorSectionCommonComponent.js +10 -25
  237. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +28 -0
  238. package/cypress/pages/components/gridQuestionCommonComponent.js +55 -2
  239. package/cypress/pages/components/imageCanvasComponent.js +4 -4
  240. package/cypress/pages/components/questionInstructionsComponent.js +2 -0
  241. package/cypress/pages/components/scoringSectionBaseEditTab.js +3 -0
  242. package/cypress/pages/components/specifyRowsAndColumnsComponent.js +7 -1
  243. package/cypress/pages/contentBlocksPage.js +2 -0
  244. package/cypress/pages/desmos3DGraphingPage.js +149 -4
  245. package/cypress/pages/desmosGeometryPage.js +184 -4
  246. package/cypress/pages/drawingResponsePage.js +2 -0
  247. package/cypress/pages/fillInTheGapsDragAndDropPage.js +3 -4
  248. package/cypress/pages/gradingGridViewPage.js +64 -0
  249. package/cypress/pages/graphingPage.js +27 -8
  250. package/cypress/pages/gridFillPage.js +15 -6
  251. package/cypress/pages/imageHighlightPage.js +115 -15
  252. package/cypress/pages/index.js +1 -0
  253. package/cypress/pages/listOrderingPage.js +40 -1
  254. package/cypress/pages/matchingPage.js +26 -7
  255. package/cypress/pages/numberLineLabelPage.js +31 -8
  256. package/cypress/pages/numberLinePage.js +19 -7
  257. package/cypress/pages/singleSelectionPage.js +30 -1
  258. package/cypress/pages/textEntryMathPage.js +24 -1
  259. package/cypress/pages/thinkSpherePage.js +951 -89
  260. package/cypress/pages/uploadResponsePage.js +17 -1
  261. package/cypress/pages/videoResponsePage.js +3 -0
  262. package/cypress/support/commands.js +9 -0
  263. package/cypress/support/helpers/createItem.js +22 -3
  264. package/cypress/support/helpers/utilities.js +14 -1
  265. package/package.json +2 -2
  266. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/checkAnswerFunctionalityForAllViews.js +0 -0
  267. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/editQuestion.smoke.js +0 -0
@@ -9,7 +9,7 @@ import { selectQuestionResourceToolPage } from "./selectQuestionResourceToolPage
9
9
  import { videoResponsePage } from "./videoResponsePage";
10
10
  import { singleSelectionPage } from "./singleSelectionPage";
11
11
  import { essayResponsePage } from "./essayResponsePage";
12
- import { equationEditorCategoriesAndSymbols } from "../fixtures/equationEditorCategoriesAndSymbols";
12
+ import { equationEditorCategoriesAndSymbols } from "../fixtures/equationEditorCategoriesAndSymbols ";
13
13
  const css = Cypress.env('css');
14
14
 
15
15
  const selectors = {
@@ -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"]'),
@@ -136,7 +136,7 @@ const selectors = {
136
136
  imageUploadSectionQuestionImageCrossIcon: () => thinkSpherePage.imageUploadSection().find('div[class*="QuestionImageComponentstyle__CrossIcon"]'),
137
137
  imageRadioButtonParentSvg: () => thinkSpherePage.imageRadioButton().parent().find('svg'),
138
138
  solvePhaseAccordionSvg: () => thinkSpherePage.solvePhaseAccordion().find('svg'),
139
- customizeToolsAndControlsSvg: () => thinkSpherePage.customizeToolsAndControls().find('path'),
139
+ customizeToolsAndControlsPath: () => thinkSpherePage.customizeToolsAndControls().find('path'),
140
140
  solvePhaseToolsAndControlsOptionsTilesFeatherCheckIcon: () => thinkSpherePage.solveToolsAndControlsOptionsTiles('Text').find('[data-name="Icon feather-check"]'),
141
141
  solvePhaseToolsAndControlsOptionsTilesRectangle: () => thinkSpherePage.solveToolsAndControlsOptionsTiles('Text').find('[data-name*="Rectangle"]'),
142
142
  solvePhaseToolsAndControlsOptionsTilesDragItemFlexWrapperSvg: () => thinkSpherePage.solveToolsAndControlsOptionsTiles('Text').find('.drag-item-flex-wrapper svg'),
@@ -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"]'),
@@ -211,6 +211,46 @@ const selectors = {
211
211
  categoriesDropDownParent: () => cy.get('.drop-down-parent'),
212
212
  cardWrapper: () => cy.get('.card-wrapper'),
213
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'),
214
254
  };
215
255
 
216
256
  const steps = {
@@ -364,20 +404,20 @@ const steps = {
364
404
  */
365
405
  uploadVideoFile: (file) => {
366
406
  const fileName = file.split('/').pop(); // Extracts only 'sample.mp4'
367
-
407
+
368
408
  cy.fixture(file, 'binary') // Read the file as binary
369
409
  .then(Cypress.Blob.binaryStringToBlob)
370
410
  .then((blob) => {
371
411
  const fileObj = new File([blob], fileName, { type: 'video/mp4' });
372
412
  const dataTransfer = new DataTransfer();
373
413
  dataTransfer.items.add(fileObj);
374
-
414
+
375
415
  thinkSpherePage.inputTypeVideoFile().then(($input) => {
376
416
  $input[0].files = dataTransfer.files;
377
417
  cy.wrap($input).trigger('change', { force: true });
378
418
  });
379
419
  });
380
-
420
+
381
421
  cy.wait(4000);
382
422
  },
383
423
 
@@ -453,13 +493,13 @@ const steps = {
453
493
  },
454
494
  expandSolvePhaseAccordion: () => {
455
495
  thinkSpherePage.solvePhaseAccordion()
456
- .click()
457
- .should('have.attr', 'aria-expanded', 'true');
496
+ .click()
497
+ .should('have.attr', 'aria-expanded', 'true');
458
498
  },
459
499
  expandCustomizeToolsAndControls: () => {
460
500
  thinkSpherePage.customizeToolsAndControls()
461
- .click()
462
- .should('have.attr', 'aria-expanded', 'true');
501
+ .click()
502
+ .should('have.attr', 'aria-expanded', 'true');
463
503
  },
464
504
  /**
465
505
  * Verifies the tools and controls options.
@@ -476,9 +516,9 @@ const steps = {
476
516
  */
477
517
  selectOptionFromToolsAndControls: (option) => {
478
518
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
479
- .click();
519
+ .click();
480
520
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
481
- .should('have.attr', 'data-aria-pressed', 'true');
521
+ .should('have.attr', 'data-aria-pressed', 'true');
482
522
  },
483
523
  /**
484
524
  * Deselects an option from tools and controls.
@@ -486,9 +526,9 @@ const steps = {
486
526
  */
487
527
  deselectOptionFromToolsAndControls: (option) => {
488
528
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
489
- .click();
529
+ .click();
490
530
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
491
- .should('have.attr', 'data-aria-pressed', 'false');
531
+ .should('have.attr', 'data-aria-pressed', 'false');
492
532
  },
493
533
  /**
494
534
  * Verifies if an option is selected.
@@ -496,7 +536,7 @@ const steps = {
496
536
  */
497
537
  verifyOptionIsSelected: (option) => {
498
538
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
499
- .should('have.attr', 'data-aria-pressed', 'true');
539
+ .should('have.attr', 'data-aria-pressed', 'true');
500
540
  },
501
541
  /**
502
542
  * Verifies if an option is not selected.
@@ -504,7 +544,7 @@ const steps = {
504
544
  */
505
545
  verifyOptionIsNotSelected: (option) => {
506
546
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
507
- .should('have.attr', 'data-aria-pressed', 'false');
547
+ .should('have.attr', 'data-aria-pressed', 'false');
508
548
  },
509
549
 
510
550
  /**
@@ -537,7 +577,7 @@ const steps = {
537
577
  utilities.getNthElement(thinkSpherePage.deleteButton(), index)
538
578
  .click();
539
579
  },
540
-
580
+
541
581
  /**
542
582
  * Verifies the delete option button disabled state.
543
583
  * @param {string} list - The list to verify ('strategy' or other).
@@ -619,14 +659,14 @@ const steps = {
619
659
  .within(() => {
620
660
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
621
661
  .clear()
622
- .type(text);
662
+ .type(text, { delay: 500 });
623
663
  });
624
664
  } else {
625
665
  thinkSpherePage.planSentenceStarterSection()
626
666
  .within(() => {
627
667
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
628
668
  .clear()
629
- .type(text);
669
+ .type(text, { delay: 500 });
630
670
  });
631
671
  }
632
672
  },
@@ -753,9 +793,9 @@ const steps = {
753
793
  },
754
794
 
755
795
  verifyOptionAlignmentIsSelected: (direction) => {
756
- if(direction === 'topLeft') {
796
+ if (direction === 'topLeft') {
757
797
  thinkSpherePage.whiteBoardCanvas()
758
- .should('not.have.css', 'justify-content', 'start');
798
+ .should('not.have.css', 'justify-content', 'start');
759
799
  } else {
760
800
  thinkSpherePage.whiteBoardCanvas()
761
801
  .should('have.css', 'justify-content', (direction === 'center' || direction === 'flex-end') ? 'normal' : direction);
@@ -765,7 +805,7 @@ const steps = {
765
805
  }
766
806
  }
767
807
  },
768
-
808
+
769
809
  clickOnImageRadioButton: () => {
770
810
  thinkSpherePage.imageRadioButton()
771
811
  .click();
@@ -774,10 +814,11 @@ const steps = {
774
814
  clickOnEditQuestionIcon: () => {
775
815
  utilities.getNthElement(thinkSpherePage.editQuestionPencil(), 0)
776
816
  .click();
817
+ cy.wait(1000);
777
818
  },
778
819
 
779
820
  clickOnQuestionInstructionExpandImageButton: () => {
780
- thinkSpherePage.questionInstructionPreviewImageExpandButton()
821
+ utilities.getNthElement(thinkSpherePage.questionInstructionPreviewImageExpandButton(), 0)
781
822
  .click();
782
823
  },
783
824
 
@@ -936,20 +977,20 @@ const steps = {
936
977
 
937
978
  verifyCategoryCharactersAndUnSelectedState: (arrayOfSymbolsAriaLabel) => {
938
979
  thinkSpherePage.categoryCharacters()
939
- .then(($symbols) => {
940
- for (let index = 10; index < $symbols.length - 1; index++) {
941
- editCategoryFlyout.categoryCharacters()
942
- .eq(index)
943
- .should('not.have.class', 'Mui-selected')
944
- .invoke('attr', 'aria-label')
945
- .then((ariaLabel) => {
946
- const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
980
+ .then(($symbols) => {
981
+ for (let index = 10; index < $symbols.length - 1; index++) {
947
982
  editCategoryFlyout.categoryCharacters()
948
983
  .eq(index)
949
- .verifyTooltip(tooltipText);
950
- });
951
- }
952
- });
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
+ });
953
994
  },
954
995
 
955
996
  verifyCategoryCharactersAndSelectedState: (arrayOfSymbolsAriaLabel) => {
@@ -957,15 +998,15 @@ const steps = {
957
998
  .then(($symbols) => {
958
999
  for (let index = 0; index < arrayOfSymbolsAriaLabel.length - 1; index++) {
959
1000
  editCategoryFlyout.categoryCharacters()
960
- .eq(index)
961
- .should('have.class', 'Mui-selected')
962
- .invoke('attr', 'aria-label')
963
- .then((ariaLabel) => {
964
- const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
965
- editCategoryFlyout.categoryCharacters()
966
- .eq(index)
967
- .verifyTooltip(tooltipText);
968
- });
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
+ });
969
1010
  }
970
1011
  });
971
1012
  },
@@ -977,12 +1018,12 @@ const steps = {
977
1018
 
978
1019
  verifyDropdownOptions: (dropDownListArray) => {
979
1020
  thinkSpherePage.categoriesDropDownMenuItem().should('have.length', dropDownListArray.length).each(($item) => {
980
- cy.wrap($item)
981
- .invoke('text')
982
- .then((text) => {
983
- const trimmedText = text.trim();
984
- expect(dropDownListArray).to.include(trimmedText);
985
- });
1021
+ cy.wrap($item)
1022
+ .invoke('text')
1023
+ .then((text) => {
1024
+ const trimmedText = text.trim();
1025
+ expect(dropDownListArray).to.include(trimmedText);
1026
+ });
986
1027
  });
987
1028
  },
988
1029
 
@@ -992,22 +1033,22 @@ const steps = {
992
1033
 
993
1034
  clickOnQuestionTypesAccordion: () => {
994
1035
  thinkSpherePage.filterSectionQuestionTypesAccordion()
995
- .click()
1036
+ .click()
996
1037
  },
997
1038
 
998
1039
  typeInSearchBar: (input) => {
999
1040
  thinkSpherePage.searchBar()
1000
- .clear()
1001
- .type(input)
1002
- .should('have.value', input);
1041
+ .clear()
1042
+ .type(input)
1043
+ .should('have.value', input);
1003
1044
  },
1004
1045
 
1005
1046
  searchInSearchBar: (input) => {
1006
1047
  thinkSpherePage.searchBar()
1007
- .clear()
1008
- .type(input)
1009
- .should('have.value', input)
1010
- .type('{enter}');
1048
+ .clear()
1049
+ .type(input)
1050
+ .should('have.value', input)
1051
+ .type('{enter}');
1011
1052
  },
1012
1053
 
1013
1054
  clickOnSolvePhaseAccordionIcon: (element) => {
@@ -1061,7 +1102,7 @@ const steps = {
1061
1102
 
1062
1103
  verifyTextIsNotEmpty: (element) => {
1063
1104
  element.invoke('text')
1064
- .should('not.be.empty');
1105
+ .should('not.be.empty');
1065
1106
  },
1066
1107
 
1067
1108
  verifyLength: (element, length) => {
@@ -1083,6 +1124,512 @@ const steps = {
1083
1124
  verifySolvePhaseAccordionCollapsed: () => {
1084
1125
  thinkSpherePage.solvePhaseAccordionExpandIcon().should('not.have.class', 'Mui-expanded');
1085
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
+ }
1086
1633
  };
1087
1634
 
1088
1635
  const tests = {
@@ -1197,7 +1744,7 @@ const tests = {
1197
1744
  utilities.verifyElementVisibilityState(thinkSpherePage.tooltipText(), 'notExist');
1198
1745
  });
1199
1746
  },
1200
-
1747
+
1201
1748
  /**
1202
1749
  * Verifies the add option functionality.
1203
1750
  * @param {string} list - The list to add the option to ('strategy' or other).
@@ -1213,13 +1760,13 @@ const tests = {
1213
1760
  initialOptionCount = count;
1214
1761
  });
1215
1762
  });
1216
-
1763
+
1217
1764
  thinkSpherePage.steps.addOption(list);
1218
1765
  thinkSpherePage.planStrategySection()
1219
1766
  .within(() => {
1220
1767
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1221
1768
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter strategy name');
1222
- });
1769
+ });
1223
1770
  thinkSpherePage.steps.deleteOption(5);
1224
1771
  } else {
1225
1772
  thinkSpherePage.planSentenceStarterSection()
@@ -1228,13 +1775,13 @@ const tests = {
1228
1775
  initialOptionCount = count;
1229
1776
  });
1230
1777
  });
1231
-
1778
+
1232
1779
  thinkSpherePage.steps.addOption(list);
1233
1780
  thinkSpherePage.planSentenceStarterSection()
1234
1781
  .within(() => {
1235
1782
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1236
1783
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter sentence starter name');
1237
- });
1784
+ });
1238
1785
  thinkSpherePage.steps.deleteOption(10);
1239
1786
  }
1240
1787
  });
@@ -1313,7 +1860,7 @@ const tests = {
1313
1860
  }
1314
1861
  });
1315
1862
  },
1316
-
1863
+
1317
1864
  /**
1318
1865
  * Verifies the drag handle tooltip.
1319
1866
  * @param {number} NthElement - The index of the drag handle.
@@ -1463,17 +2010,17 @@ const tests = {
1463
2010
  thinkSpherePage.steps.selectOption(list, 1);
1464
2011
  utilities.verifyCSS(
1465
2012
  utilities.getNthElement(thinkSpherePage.planStrategyCheckbox().find('svg'), 1), {
1466
- 'fill': css.color.uncheckedCheckbox,
1467
- 'width': '12px',
1468
- 'height': '12px',
2013
+ 'fill': css.color.uncheckedCheckbox,
2014
+ 'width': '12px',
2015
+ 'height': '12px',
1469
2016
  });
1470
2017
  } else {
1471
2018
  thinkSpherePage.steps.selectOption(list, 1);
1472
2019
  utilities.verifyCSS(
1473
2020
  utilities.getNthElement(thinkSpherePage.planSentenceStarterCheckbox().find('svg'), 1), {
1474
- 'fill': css.color.uncheckedCheckbox,
1475
- 'width': '12px',
1476
- 'height': '12px',
2021
+ 'fill': css.color.uncheckedCheckbox,
2022
+ 'width': '12px',
2023
+ 'height': '12px',
1477
2024
  });
1478
2025
  }
1479
2026
  });
@@ -1528,7 +2075,7 @@ const tests = {
1528
2075
  thinkSpherePage.steps.addOptionText(list, optionIndex, inputFieldText);
1529
2076
  });
1530
2077
  });
1531
-
2078
+
1532
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', () => {
1533
2080
  utilities.getNthElement(thinkSpherePage.deleteButton(), list === 'strategy' ? 0 : 5)
1534
2081
  .trigger('mouseover', { force: true });
@@ -1593,11 +2140,11 @@ const tests = {
1593
2140
  thinkSpherePage.planSentenceStarterListResetToDefault()
1594
2141
  .click();
1595
2142
  thinkSpherePage.planSentenceStarterSection()
1596
- .within(() => {
1597
- optionList.forEach((option, index) => {
1598
- thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
1599
- });
1600
- })
2143
+ .within(() => {
2144
+ optionList.forEach((option, index) => {
2145
+ thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
2146
+ });
2147
+ })
1601
2148
  });
1602
2149
  }
1603
2150
  },
@@ -1734,7 +2281,7 @@ const tests = {
1734
2281
  utilities.verifyElementVisibilityState(thinkSpherePage.deleteVideoButton(), 'visible');
1735
2282
  });
1736
2283
  });
1737
-
2284
+
1738
2285
  it('CSS of edit video button and delete video button', { tags: 'css' }, () => {
1739
2286
  thinkSpherePage.videoLinkComponent().within(() => {
1740
2287
  utilities.verifyCSS(thinkSpherePage.editVideoButton(), {
@@ -1827,7 +2374,7 @@ const tests = {
1827
2374
  });
1828
2375
  });
1829
2376
 
1830
- 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', () => {
1831
2378
  utilities.verifyElementVisibilityState(thinkSpherePage.editBoxTextInput(), 'visible');
1832
2379
  thinkSpherePage.editBoxTextInput().blur();
1833
2380
  utilities.verifyElementVisibilityState(thinkSpherePage.editIconPencil(), 'visible');
@@ -1835,7 +2382,7 @@ const tests = {
1835
2382
  thinkSpherePage.editBoxTextInput().should('have.attr', 'placeholder', 'Enter title');
1836
2383
  thinkSpherePage.editBoxTextInput().type('Test Title');
1837
2384
  thinkSpherePage.editBoxTextInput().blur();
1838
- utilities.verifyInnerText(thinkSpherePage.editBoxText(),'Test Title');
2385
+ utilities.verifyInnerText(thinkSpherePage.editBoxText(), 'Test Title');
1839
2386
  });
1840
2387
  },
1841
2388
 
@@ -1844,6 +2391,321 @@ const tests = {
1844
2391
  thinkSpherePage.editTab().should('have.class', 'Mui-selected');
1845
2392
  });
1846
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
+ }
1847
2709
  };
1848
2710
 
1849
2711
  export const thinkSpherePage = {