itemengine-cypress-automation 1.0.389-graphAndCharts-04d27f6.0 → 1.0.390-IEI-6314-testScriptForTextEntryMathValidations-dcad527.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 (319) hide show
  1. package/Dockerfile +1 -0
  2. package/cypress/e2e/GradingGridView/gradingGridView.js +156 -0
  3. package/cypress/e2e/ILC/AudioResponseNew/barRecorderStyle.smoke.js +2 -0
  4. package/cypress/e2e/ILC/AudioResponseNew/compactRecorderStyle.smoke.js +4 -0
  5. package/cypress/e2e/ILC/AudioResponseNew/editTabBasicSection.js +4 -16
  6. package/cypress/e2e/ILC/BrainingCampManipulative/editTabBasicSection.js +1 -1
  7. package/cypress/e2e/ILC/BrowseItems/browseReviewItems.js +3 -3
  8. package/cypress/e2e/ILC/BrowseItems/browseReviewItemsMobileView.js +3 -3
  9. package/cypress/e2e/ILC/BrowseItems/browseThinkSphereItems.js +6 -6
  10. package/cypress/e2e/ILC/BrowseItems/browseThinkSphereItemsMobileView.js +6 -6
  11. package/cypress/e2e/ILC/ChartsBar/HorizontalOrientationBarChart/allOrNothingScoringForAllViews.smoke.js +356 -0
  12. package/cypress/e2e/ILC/ChartsBar/HorizontalOrientationBarChart/gradingViewAndCorrectAnswerView.smoke.js +1 -1
  13. package/cypress/e2e/ILC/ChartsBar/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +33 -0
  14. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightBasic.js +27 -27
  15. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +37 -37
  16. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +37 -37
  17. package/cypress/e2e/ILC/ChartsBar/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +37 -37
  18. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightBasic.js +26 -25
  19. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +39 -38
  20. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +31 -30
  21. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +35 -34
  22. package/cypress/e2e/ILC/ChartsBar/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePointsLocked.js +247 -0
  23. package/cypress/e2e/ILC/ChartsBar/allOrNothingScoringForAllViews.smoke.js +287 -0
  24. package/cypress/e2e/ILC/ChartsBar/editQuestion.smoke.js +1 -1
  25. package/cypress/e2e/ILC/ChartsBar/editTabBasicSection.js +37 -0
  26. package/cypress/e2e/ILC/ChartsBar/headerSection.js +50 -2
  27. package/cypress/e2e/ILC/ChartsBar/specifyCorrectAnswerSection.js +92 -0
  28. package/cypress/e2e/ILC/ChartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePointsLocked.js +220 -0
  29. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightBasic.js +25 -26
  30. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +47 -47
  31. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +25 -25
  32. package/cypress/e2e/ILC/ChartsLine/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +25 -25
  33. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightBasic.js +25 -25
  34. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +24 -23
  35. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +21 -20
  36. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +48 -46
  37. package/cypress/e2e/ILC/ChartsLine/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePointsLocked.js +249 -0
  38. package/cypress/e2e/ILC/ChartsLine/allOrNothingScoringForAllViews.smoke.js +247 -0
  39. package/cypress/e2e/ILC/ChartsLine/editQuestion.smoke.js +3 -1
  40. package/cypress/e2e/ILC/ChartsLine/headerSection.js +18 -1
  41. package/cypress/e2e/ILC/ChartsLine/specifyCorrectAnswerSection.js +94 -0
  42. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerEditTabAddTranscriptRadioButton .js +2 -2
  43. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerHeaderSectionAndButtons.js +2 -2
  44. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTab.js +1 -1
  45. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTabSupportedFileTypes.js +6 -0
  46. package/cypress/e2e/ILC/CkEditorAudioPlayer/audioPlayerPreviewTabTranscript.js +2 -3
  47. package/cypress/e2e/ILC/CkEditorEquationEditor/selectModeEditorBasic.js +4 -1
  48. package/cypress/e2e/ILC/CkEditorInsertImage/imageInfo.js +4 -3
  49. package/cypress/e2e/ILC/CkEditorInsertImage/insertImageBasicFile.js +2 -0
  50. package/cypress/e2e/ILC/CkEditorInsertTable/tableDimension&FooterProperties.js +8 -8
  51. package/cypress/e2e/ILC/CkEditorInsertTable/tableStyle.js +11 -11
  52. package/cypress/e2e/ILC/CkEditorLink/linkPreview.js +2 -1
  53. package/cypress/e2e/ILC/CkEditorLink/uploadSection.js +1 -1
  54. package/cypress/e2e/ILC/ContentBlocks/editTabBasics.js +63 -4
  55. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/allOrNothingBasicForAllViews.smoke.js +116 -7
  56. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editTabBasicSection.js +3 -3
  57. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/editTabScoring.js +1 -0
  58. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/headerSection.js +3 -3
  59. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/pagination.js +1 -1
  60. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/studentViewSettingsForGroupedLayout.js +3 -0
  61. package/cypress/e2e/ILC/DrawingResponse/drawingResponseEditTabBasicSection.js +11 -3
  62. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/allOrNothingForAllViews.smoke.js +210 -0
  63. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/draggableOptions.js +2 -0
  64. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/editTabBasicSection.js +1 -1
  65. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/headerSection.js +3 -3
  66. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViewInIncompleteAuthoring.smoke.js +7 -7
  67. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +15 -16
  68. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editQuestion.smoke.js +40 -0
  69. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/editTabBasicSection.js +1 -1
  70. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/headerSection.js +3 -3
  71. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/allOrNothingForAllViews.smoke.js +216 -0
  72. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/editTabBasicSection.js +2 -2
  73. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/headerSection.js +3 -3
  74. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editQuestion.smoke.js +45 -0
  75. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/editTabBasicSection.js +1 -1
  76. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/headerSection.js +4 -4
  77. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/HeaderSection.js +4 -4
  78. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/editQuestion.smoke.js +1 -1
  79. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/responseAnswersAndAcceptedStudentInput.js +4 -0
  80. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/supportedFileTypes.js +3 -1
  81. package/cypress/e2e/ILC/FillInTheGapsTextNew/editTabBasicSection.js +1 -1
  82. package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +3 -3
  83. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +73 -0
  84. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +38 -0
  85. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +38 -0
  86. package/cypress/e2e/ILC/Graphing/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +87 -0
  87. package/cypress/e2e/ILC/Graphing/allOrNothingForAllViews.smoke.js +213 -2
  88. package/cypress/e2e/ILC/Graphing/checkAddAlternativeButton.js +35 -0
  89. package/cypress/e2e/ILC/Graphing/editQuestion.smoke.js +28 -0
  90. package/cypress/e2e/ILC/Graphing/editTabBasicSection.js +38 -0
  91. package/cypress/e2e/ILC/Graphing/editTabScoringSection.js +1 -0
  92. package/cypress/e2e/ILC/Graphing/headerSection.js +37 -4
  93. package/cypress/e2e/ILC/Graphing/specifyCorrectAnswerSection.js +28 -0
  94. package/cypress/e2e/ILC/GridFill/addAlternateButton.js +40 -0
  95. package/cypress/e2e/ILC/GridFill/allOrNothingBasicForAllViews.smoke.js +210 -0
  96. package/cypress/e2e/ILC/GridFill/customizeLayoutFillImageBackgroundImage.js +2 -2
  97. package/cypress/e2e/ILC/GridFill/headerSection.js +4 -4
  98. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +39 -0
  99. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  100. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +39 -0
  101. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountAllOrNothingCorrectPointsGreaterThanAlternativePoints.js +37 -0
  102. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountallOrNothingCorrectPointsEqualToAlternativePoints.js +39 -0
  103. package/cypress/e2e/ILC/GridFill/scoring/cellshadeCountAllOrNothingAlternativePointsGreaterThanCorrectPoints.js +36 -0
  104. package/cypress/e2e/ILC/GridFill/scoring/checkLabelSaveAsYouGo.js +75 -0
  105. package/cypress/e2e/ILC/GridFill/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +2 -1
  106. package/cypress/e2e/ILC/ImageHighlight/additionalSettingsBasic.js +1 -0
  107. package/cypress/e2e/ILC/ImageHighlight/allOrNothingForAllViews.smoke.js +212 -0
  108. package/cypress/e2e/ILC/ImageHighlight/customiseHighlightStyle.js +29 -0
  109. package/cypress/e2e/ILC/ImageHighlight/editTabBasicSection.js +1 -1
  110. package/cypress/e2e/ILC/ImageHighlight/headerSection.js +3 -3
  111. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +24 -0
  112. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +24 -0
  113. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +24 -0
  114. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +86 -0
  115. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/manuallyAndNonScored.js +2 -4
  116. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsBasic.js +1 -1
  117. package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +237 -1
  118. package/cypress/e2e/ILC/ListOrderingDropdown/checkAddAlternativeButton.js +35 -0
  119. package/cypress/e2e/ILC/ListOrderingDropdown/editTabBasicSection.js +26 -0
  120. package/cypress/e2e/ILC/ListOrderingDropdown/headerSection.js +108 -0
  121. package/cypress/e2e/ILC/ListOrderingDropdown/manuallyAndNonScoredEditTab.js +2 -1
  122. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +2 -4
  123. package/cypress/e2e/ILC/ListOrderingDropdown/specifyCorrectAnswerSection.js +7 -12
  124. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/specifyCorrectAnswerSection.js +10 -14
  125. package/cypress/e2e/ILC/ListOrderingNew/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +52 -0
  126. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +215 -0
  127. package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +23 -0
  128. package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +36 -9
  129. package/cypress/e2e/ILC/ListOrderingNew/manuallyAndNonScoredEditTab.js +2 -0
  130. package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +7 -23
  131. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +41 -0
  132. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +30 -0
  133. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +50 -0
  134. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +101 -0
  135. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/allOrNothingForAllViews.smoke.js +309 -0
  136. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/checkAddAlternativeButton.js +38 -0
  137. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabBasicSection.js +24 -0
  138. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/editTabScoring.js +4 -1
  139. package/cypress/e2e/ILC/ListOrderingReorderAsASeperateList/headerSection.js +38 -3
  140. package/cypress/e2e/ILC/Matching/Scoring/blankResponseScoring.js +38 -41
  141. package/cypress/e2e/ILC/Matching/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +98 -0
  142. package/cypress/e2e/ILC/Matching/allOrNothingScoringForAllViews.smoke.js +210 -0
  143. package/cypress/e2e/ILC/Matching/checkAlternativeButton.js +38 -0
  144. package/cypress/e2e/ILC/Matching/clickAndDrop.js +5 -5
  145. package/cypress/e2e/ILC/Matching/draggableOptions.js +7 -0
  146. package/cypress/e2e/ILC/Matching/editQuestion.smoke.js +3 -2
  147. package/cypress/e2e/ILC/Matching/editTabBasicSection.js +41 -0
  148. package/cypress/e2e/ILC/Matching/headerSection.js +38 -12
  149. package/cypress/e2e/ILC/Matching/questionInstructionsAndPromptSection.js +2 -15
  150. package/cypress/e2e/ILC/Matching/studentViewSettings.js +3 -1
  151. package/cypress/e2e/ILC/Matching/studentViewSettingsForGroupedLayout.js +1 -1
  152. package/cypress/e2e/ILC/MatchingDropdown/Scoring/blankResponseScoring.js +7 -6
  153. package/cypress/e2e/ILC/MatchingDropdown/Scoring/partialDifferentWeightsScoringBasic.js +6 -6
  154. package/cypress/e2e/ILC/MatchingDropdown/allOrNothingScoringForAllViews.smoke.js +208 -0
  155. package/cypress/e2e/ILC/MultipleSelection/allOrNothingBasicForAllViews.smoke.js +2 -1
  156. package/cypress/e2e/ILC/MultipleSelection/editTabBasicSection.js +1 -1
  157. package/cypress/e2e/ILC/MultipleSelection/headerSection.js +3 -3
  158. package/cypress/e2e/ILC/MultipleSelectionGridNew/Scoring/checkScoringLabelBannerAndCorrectAnswer.js +1 -0
  159. package/cypress/e2e/ILC/MultipleSelectionGridNew/editTabBasicSection.js +2 -2
  160. package/cypress/e2e/ILC/MultipleSelectionGridNew/headerSection.js +3 -3
  161. package/cypress/e2e/ILC/MultipleSelectionGridNew/previewContentsForAllViews.smoke.js +100 -69
  162. package/cypress/e2e/ILC/MultipleSelectionGridNew/styleAndLayoutCustomizationLayoutProperties.js +1 -0
  163. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithAlternatePointsGreaterThanCorrectPoints.js +79 -0
  164. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +42 -0
  165. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +42 -0
  166. package/cypress/e2e/ILC/NumberLine/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +75 -0
  167. package/cypress/e2e/ILC/NumberLine/allOrNothingScoringForAllViews.smoke.js +213 -0
  168. package/cypress/e2e/ILC/NumberLine/checkAddAlternativeButton.js +32 -0
  169. package/cypress/e2e/ILC/NumberLine/editTabSection.js +38 -0
  170. package/cypress/e2e/ILC/NumberLine/headerSection.js +34 -4
  171. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/allOrNothingScoringForAllViews.smoke.js +249 -0
  172. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +81 -0
  173. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +43 -0
  174. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +43 -0
  175. package/cypress/e2e/ILC/NumberLineLabel/Scoring/checkScoringLabelBannerAndCorrectAnswerSection.js +76 -0
  176. package/cypress/e2e/ILC/NumberLineLabel/additionalSettingsBasic.js +0 -1
  177. package/cypress/e2e/ILC/NumberLineLabel/allOrNothingForAllViews.smoke.js +266 -0
  178. package/cypress/e2e/ILC/NumberLineLabel/checkAddAlternativeButton.js +34 -0
  179. package/cypress/e2e/ILC/NumberLineLabel/editTabSection.js +38 -0
  180. package/cypress/e2e/ILC/NumberLineLabel/headerSection.js +37 -4
  181. package/cypress/e2e/ILC/NumberLineLabel/manuallyAndNonScoredEditTab.js +2 -1
  182. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/allOrNothingForAllViews.smoke.js +268 -0
  183. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/editQuestion.smoke.js +1 -1
  184. package/cypress/e2e/ILC/ShortTextResponseNew/allOrNothingBasicForAllViews.smoke.js +186 -0
  185. package/cypress/e2e/ILC/ShortTextResponseNew/editTabBasicSections.js +4 -3
  186. package/cypress/e2e/ILC/ShortTextResponseNew/headerSection.js +2 -4
  187. package/cypress/e2e/ILC/SingleSelection/editTabBasicSection.js +1 -1
  188. package/cypress/e2e/ILC/SingleSelection/headerSection.js +2 -2
  189. package/cypress/e2e/ILC/SingleSelectionGridNew/editTabBasicSection.js +2 -2
  190. package/cypress/e2e/ILC/SingleSelectionGridNew/headerSection.js +3 -3
  191. package/cypress/e2e/ILC/SingleSelectionGridNew/previewContentsForAllViews.smoke.js +101 -70
  192. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +86 -0
  193. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +86 -0
  194. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  195. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +4 -2
  196. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  197. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  198. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialDifferentWeightsScoringBasic.js +9 -2
  199. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +4 -2
  200. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +3 -1
  201. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  202. package/cypress/e2e/ILC/TextEntryMath/MathTemplateScoring/partialEqualWeightsScoringBasic.js +4 -0
  203. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingAlternatePointsGreaterThanCorrectPoints.js +64 -0
  204. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAddEvaluation.js +2 -0
  205. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingBasicForAlternateAnswer.js +2 -0
  206. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +64 -0
  207. package/cypress/e2e/ILC/TextEntryMath/Scoring/allOrNothingCorrectPointsGreaterThanAlternatePoints.js +65 -0
  208. package/cypress/e2e/ILC/TextEntryMath/Scoring/blankResponseScoring.js +2 -2
  209. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  210. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  211. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  212. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialDifferentWeightsScoringBasic.js +8 -0
  213. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +2 -0
  214. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +2 -0
  215. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +2 -0
  216. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasic.js +1 -0
  217. package/cypress/e2e/ILC/TextEntryMath/Scoring/partialEqualWeightsScoringBasicForAlternateAnswer.js +2 -0
  218. package/cypress/e2e/ILC/TextEntryMath/allOrNothingBasicForAllViews.smoke.js +263 -0
  219. package/cypress/e2e/ILC/TextEntryMath/allOrNothingBasicForAllViewsFormulaTemplate.smoke.js +219 -0
  220. package/cypress/e2e/ILC/TextEntryMath/editTabBasicSection.js +27 -3
  221. package/cypress/e2e/ILC/TextEntryMath/equationEditor.smoke.js +1 -1
  222. package/cypress/e2e/ILC/TextEntryMath/evaluationMethodEquivalentStructures.smoke.js +3 -3
  223. package/cypress/e2e/ILC/TextEntryMath/evaluationMethodMatchValue.smoke.js +310 -1
  224. package/cypress/e2e/ILC/TextEntryMath/evaluationMethodSymbolsAreEquivalent.smoke.js +205 -1
  225. package/cypress/e2e/ILC/TextEntryMath/headerSection.js +43 -0
  226. package/cypress/e2e/ILC/TextEntryMathWithImage/allOrNothingScoringForAllViews.smoke.js +263 -0
  227. package/cypress/e2e/ILC/TextEntryMathWithImage/backgroundImageAndCanvasProperties.js +0 -1
  228. package/cypress/e2e/ILC/TextEntryMathWithImage/styleAndLayoutCustomization.js +1 -1
  229. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +1 -0
  230. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +231 -0
  231. package/cypress/e2e/ILC/TextSelection/editTabBasicSection.js +2 -2
  232. package/cypress/e2e/ILC/TextSelection/headerSection.js +3 -3
  233. package/cypress/e2e/ILC/TextSelection/minimumScoringPenaltyPointsAndRoundingDropdown.js +1 -0
  234. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyPossibleOptionsSection.js +1 -0
  235. package/cypress/e2e/ILC/ThinkSphere/createReviewItem.js +1 -1
  236. package/cypress/e2e/ILC/ThinkSphere/editTabBasicSection.js +1 -1
  237. package/cypress/e2e/ILC/ThinkSphere/editThinkSphereQuestion.smoke.js +145 -54
  238. package/cypress/e2e/ILC/ThinkSphere/equationEditorEditCategoryFlyOut.js +2 -0
  239. package/cypress/e2e/ILC/ThinkSphere/gradingViewPlanTabSection.js +334 -0
  240. package/cypress/e2e/ILC/ThinkSphere/gradingViewReviewTabSection.js +140 -0
  241. package/cypress/e2e/ILC/ThinkSphere/gradingViewSolveTabSection.js +65 -0
  242. package/cypress/e2e/ILC/ThinkSphere/planPhase.js +45 -5
  243. package/cypress/e2e/ILC/ThinkSphere/previewTabPlanSection.js +8 -8
  244. package/cypress/e2e/ILC/ThinkSphere/previewTabReviewSection.js +102 -0
  245. package/cypress/e2e/ILC/ThinkSphere/previewTabSolveSection.js +41 -0
  246. package/cypress/e2e/ILC/ThinkSphere/solvePhase.js +3 -3
  247. package/cypress/e2e/ILC/ThinkSphere/studentViewPlanTabSection.js +393 -0
  248. package/cypress/e2e/ILC/ThinkSphere/studentViewReviewTabSection.js +146 -0
  249. package/cypress/e2e/ILC/ThinkSphere/studentViewSolveSection.js +53 -0
  250. package/cypress/e2e/ILC/ToolAudioPlayerNew/headerSection.js +90 -2
  251. package/cypress/e2e/ILC/UploadResponse/editTabBasicSection.js +34 -0
  252. package/cypress/e2e/ILC/UploadResponse/headerSection.js +38 -1
  253. package/cypress/e2e/ILC/UploadResponse/uploadResponsePreview.js +50 -13
  254. package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +14 -29
  255. package/cypress/e2e/ILC/chartsDotsPlot/allOrNothingForAllViews.smoke.js +248 -0
  256. package/cypress/e2e/ILC/chartsDotsPlot/headerSection.js +16 -1
  257. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsBasic.js +27 -28
  258. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  259. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +24 -24
  260. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialDifferentWeightsWithCorrectPointsGreaterThanAlternativePoints.js +39 -37
  261. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsBasic.js +22 -23
  262. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +31 -30
  263. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +25 -24
  264. package/cypress/e2e/ILC/chartsDotsPlot/scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +31 -31
  265. package/cypress/e2e/ILC/chartsDotsPlot/scoring/toleranceThresholdScoring.js +18 -19
  266. package/cypress/e2e/ILC/chartsDotsPlot/specifyCorrectAnswerSection.js +96 -0
  267. package/cypress/e2e/Sessions/fetchResponses.js +3 -3
  268. package/cypress/e2e/Sessions/saveResponseScores.js +2 -2
  269. package/cypress/fixtures/thinkSphereWhiteboardTools.js +66 -0
  270. package/cypress/pages/audioPlayerPage.js +25 -0
  271. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  272. package/cypress/pages/chartsBarPage.js +45 -0
  273. package/cypress/pages/chartsDotPlotPage.js +25 -0
  274. package/cypress/pages/chartsLinePage.js +29 -2
  275. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +5 -1
  276. package/cypress/pages/components/chartsCommonComponent.js +21 -2
  277. package/cypress/pages/components/ckEditorEquationEditorComponent.js +1 -0
  278. package/cypress/pages/components/ckEditorInsertImageComponent.js +3 -3
  279. package/cypress/pages/components/ckEditorInsertTableComponent.js +3 -3
  280. package/cypress/pages/components/ckEditorLinkComponent.js +8 -9
  281. package/cypress/pages/components/colorPopupComponent.js +6 -0
  282. package/cypress/pages/components/createQuestionBasePage.js +19 -6
  283. package/cypress/pages/components/desmosToolComponent.js +1 -1
  284. package/cypress/pages/components/draggableOptionsSectionComponent.js +2 -0
  285. package/cypress/pages/components/equationEditorSectionCommonComponent.js +4 -4
  286. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +31 -3
  287. package/cypress/pages/components/fillInTheGapsTextCommonComponent.js +1 -1
  288. package/cypress/pages/components/gridQuestionCommonComponent.js +55 -2
  289. package/cypress/pages/components/imageCanvasComponent.js +11 -5
  290. package/cypress/pages/components/playbackControlsBaseComponent.js +6 -3
  291. package/cypress/pages/components/questionInstructionsComponent.js +2 -0
  292. package/cypress/pages/components/scoringSectionBaseEditTab.js +3 -0
  293. package/cypress/pages/components/specifyRowsAndColumnsComponent.js +16 -0
  294. package/cypress/pages/contentBlocksPage.js +2 -0
  295. package/cypress/pages/desmos3DGraphingPage.js +149 -4
  296. package/cypress/pages/desmosGeometryPage.js +184 -4
  297. package/cypress/pages/drawingResponsePage.js +9 -2
  298. package/cypress/pages/fillInTheGapsDragAndDropPage.js +3 -8
  299. package/cypress/pages/gradingGridViewPage.js +64 -0
  300. package/cypress/pages/graphingPage.js +28 -5
  301. package/cypress/pages/gridFillPage.js +24 -9
  302. package/cypress/pages/imageHighlightPage.js +115 -15
  303. package/cypress/pages/index.js +1 -0
  304. package/cypress/pages/listOrderingPage.js +46 -2
  305. package/cypress/pages/matchingPage.js +29 -10
  306. package/cypress/pages/numberLineLabelPage.js +26 -0
  307. package/cypress/pages/numberLinePage.js +15 -0
  308. package/cypress/pages/singleSelectionPage.js +30 -1
  309. package/cypress/pages/textEntryMathPage.js +29 -10
  310. package/cypress/pages/textSelectionPage.js +2 -2
  311. package/cypress/pages/thinkSpherePage.js +1118 -87
  312. package/cypress/pages/uploadResponsePage.js +17 -1
  313. package/cypress/pages/videoResponsePage.js +3 -0
  314. package/cypress/support/commands.js +9 -0
  315. package/cypress/support/helpers/createItem.js +22 -3
  316. package/cypress/support/helpers/utilities.js +14 -1
  317. package/package.json +1 -1
  318. /package/cypress/e2e/ILC/{ChartsDotsPlot → chartsDotsPlot}/checkAnswerFunctionalityForAllViews.js +0 -0
  319. /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,53 @@ 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'),
254
+ yourPlanButton: () => cy.get('button[class*="YourPlanButton"]'),
255
+ yourPlanContainer: () => cy.get('[class*="YourPlanContainer"]'),
256
+ yourPlanHeaderContainer: () => cy.get('[class*="ThinkSpherePreviewstyles__YourPlanHeaderContainer"]'),
257
+ yourPlanHeadingLabel: () => cy.get('[class*="ThinkSpherePreviewstyles__HeadingLabel"]'),
258
+ yourPlanCloseButton: () => cy.get('[class*="ThinkSpherePreviewstyles__CloseButton"]'),
259
+ yourPlanSubheading: () => cy.get('[class*="YourPlanstyles__Subheading"]'),
260
+ yourPlanTextarea: () => cy.get('[class*="YourPlanstyles__TextareaBox"]'),
261
+ yourPlanStrategiesList: () => cy.get('[class*="YourPlanstyles__StrategiesList"]'),
215
262
  };
216
263
 
217
264
  const steps = {
@@ -365,20 +412,20 @@ const steps = {
365
412
  */
366
413
  uploadVideoFile: (file) => {
367
414
  const fileName = file.split('/').pop(); // Extracts only 'sample.mp4'
368
-
415
+
369
416
  cy.fixture(file, 'binary') // Read the file as binary
370
417
  .then(Cypress.Blob.binaryStringToBlob)
371
418
  .then((blob) => {
372
419
  const fileObj = new File([blob], fileName, { type: 'video/mp4' });
373
420
  const dataTransfer = new DataTransfer();
374
421
  dataTransfer.items.add(fileObj);
375
-
422
+
376
423
  thinkSpherePage.inputTypeVideoFile().then(($input) => {
377
424
  $input[0].files = dataTransfer.files;
378
425
  cy.wrap($input).trigger('change', { force: true });
379
426
  });
380
427
  });
381
-
428
+
382
429
  cy.wait(4000);
383
430
  },
384
431
 
@@ -454,13 +501,13 @@ const steps = {
454
501
  },
455
502
  expandSolvePhaseAccordion: () => {
456
503
  thinkSpherePage.solvePhaseAccordion()
457
- .click()
458
- .should('have.attr', 'aria-expanded', 'true');
504
+ .click()
505
+ .should('have.attr', 'aria-expanded', 'true');
459
506
  },
460
507
  expandCustomizeToolsAndControls: () => {
461
508
  thinkSpherePage.customizeToolsAndControls()
462
- .click()
463
- .should('have.attr', 'aria-expanded', 'true');
509
+ .click()
510
+ .should('have.attr', 'aria-expanded', 'true');
464
511
  },
465
512
  /**
466
513
  * Verifies the tools and controls options.
@@ -477,9 +524,9 @@ const steps = {
477
524
  */
478
525
  selectOptionFromToolsAndControls: (option) => {
479
526
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
480
- .click();
527
+ .click();
481
528
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
482
- .should('have.attr', 'data-aria-pressed', 'true');
529
+ .should('have.attr', 'data-aria-pressed', 'true');
483
530
  },
484
531
  /**
485
532
  * Deselects an option from tools and controls.
@@ -487,9 +534,9 @@ const steps = {
487
534
  */
488
535
  deselectOptionFromToolsAndControls: (option) => {
489
536
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
490
- .click();
537
+ .click();
491
538
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
492
- .should('have.attr', 'data-aria-pressed', 'false');
539
+ .should('have.attr', 'data-aria-pressed', 'false');
493
540
  },
494
541
  /**
495
542
  * Verifies if an option is selected.
@@ -497,7 +544,7 @@ const steps = {
497
544
  */
498
545
  verifyOptionIsSelected: (option) => {
499
546
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
500
- .should('have.attr', 'data-aria-pressed', 'true');
547
+ .should('have.attr', 'data-aria-pressed', 'true');
501
548
  },
502
549
  /**
503
550
  * Verifies if an option is not selected.
@@ -505,7 +552,7 @@ const steps = {
505
552
  */
506
553
  verifyOptionIsNotSelected: (option) => {
507
554
  thinkSpherePage.solveToolsAndControlsOptionsTiles(option)
508
- .should('have.attr', 'data-aria-pressed', 'false');
555
+ .should('have.attr', 'data-aria-pressed', 'false');
509
556
  },
510
557
 
511
558
  /**
@@ -538,7 +585,7 @@ const steps = {
538
585
  utilities.getNthElement(thinkSpherePage.deleteButton(), index)
539
586
  .click();
540
587
  },
541
-
588
+
542
589
  /**
543
590
  * Verifies the delete option button disabled state.
544
591
  * @param {string} list - The list to verify ('strategy' or other).
@@ -620,14 +667,14 @@ const steps = {
620
667
  .within(() => {
621
668
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
622
669
  .clear()
623
- .type(text);
670
+ .type(text, { delay: 500 });
624
671
  });
625
672
  } else {
626
673
  thinkSpherePage.planSentenceStarterSection()
627
674
  .within(() => {
628
675
  utilities.getNthElement(thinkSpherePage.listInputField(), optionCount)
629
676
  .clear()
630
- .type(text);
677
+ .type(text, { delay: 500 });
631
678
  });
632
679
  }
633
680
  },
@@ -754,9 +801,9 @@ const steps = {
754
801
  },
755
802
 
756
803
  verifyOptionAlignmentIsSelected: (direction) => {
757
- if(direction === 'topLeft') {
804
+ if (direction === 'topLeft') {
758
805
  thinkSpherePage.whiteBoardCanvas()
759
- .should('not.have.css', 'justify-content', 'start');
806
+ .should('not.have.css', 'justify-content', 'start');
760
807
  } else {
761
808
  thinkSpherePage.whiteBoardCanvas()
762
809
  .should('have.css', 'justify-content', (direction === 'center' || direction === 'flex-end') ? 'normal' : direction);
@@ -766,7 +813,7 @@ const steps = {
766
813
  }
767
814
  }
768
815
  },
769
-
816
+
770
817
  clickOnImageRadioButton: () => {
771
818
  thinkSpherePage.imageRadioButton()
772
819
  .click();
@@ -775,10 +822,11 @@ const steps = {
775
822
  clickOnEditQuestionIcon: () => {
776
823
  utilities.getNthElement(thinkSpherePage.editQuestionPencil(), 0)
777
824
  .click();
825
+ cy.wait(1000);
778
826
  },
779
827
 
780
828
  clickOnQuestionInstructionExpandImageButton: () => {
781
- thinkSpherePage.questionInstructionPreviewImageExpandButton()
829
+ utilities.getNthElement(thinkSpherePage.questionInstructionPreviewImageExpandButton(), 0)
782
830
  .click();
783
831
  },
784
832
 
@@ -937,20 +985,20 @@ const steps = {
937
985
 
938
986
  verifyCategoryCharactersAndUnSelectedState: (arrayOfSymbolsAriaLabel) => {
939
987
  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(' ');
988
+ .then(($symbols) => {
989
+ for (let index = 10; index < $symbols.length - 1; index++) {
948
990
  editCategoryFlyout.categoryCharacters()
949
991
  .eq(index)
950
- .verifyTooltip(tooltipText);
951
- });
952
- }
953
- });
992
+ .should('not.have.class', 'Mui-selected')
993
+ .invoke('attr', 'aria-label')
994
+ .then((ariaLabel) => {
995
+ const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
996
+ editCategoryFlyout.categoryCharacters()
997
+ .eq(index)
998
+ .verifyTooltip(tooltipText);
999
+ });
1000
+ }
1001
+ });
954
1002
  },
955
1003
 
956
1004
  verifyCategoryCharactersAndSelectedState: (arrayOfSymbolsAriaLabel) => {
@@ -958,15 +1006,15 @@ const steps = {
958
1006
  .then(($symbols) => {
959
1007
  for (let index = 0; index < arrayOfSymbolsAriaLabel.length - 1; index++) {
960
1008
  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
- });
1009
+ .eq(index)
1010
+ .should('have.class', 'Mui-selected')
1011
+ .invoke('attr', 'aria-label')
1012
+ .then((ariaLabel) => {
1013
+ const tooltipText = ariaLabel.split(' ').slice(0, -1).join(' ');
1014
+ editCategoryFlyout.categoryCharacters()
1015
+ .eq(index)
1016
+ .verifyTooltip(tooltipText);
1017
+ });
970
1018
  }
971
1019
  });
972
1020
  },
@@ -978,12 +1026,12 @@ const steps = {
978
1026
 
979
1027
  verifyDropdownOptions: (dropDownListArray) => {
980
1028
  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
- });
1029
+ cy.wrap($item)
1030
+ .invoke('text')
1031
+ .then((text) => {
1032
+ const trimmedText = text.trim();
1033
+ expect(dropDownListArray).to.include(trimmedText);
1034
+ });
987
1035
  });
988
1036
  },
989
1037
 
@@ -993,22 +1041,22 @@ const steps = {
993
1041
 
994
1042
  clickOnQuestionTypesAccordion: () => {
995
1043
  thinkSpherePage.filterSectionQuestionTypesAccordion()
996
- .click()
1044
+ .click()
997
1045
  },
998
1046
 
999
1047
  typeInSearchBar: (input) => {
1000
1048
  thinkSpherePage.searchBar()
1001
- .clear()
1002
- .type(input)
1003
- .should('have.value', input);
1049
+ .clear()
1050
+ .type(input)
1051
+ .should('have.value', input);
1004
1052
  },
1005
1053
 
1006
1054
  searchInSearchBar: (input) => {
1007
1055
  thinkSpherePage.searchBar()
1008
- .clear()
1009
- .type(input)
1010
- .should('have.value', input)
1011
- .type('{enter}');
1056
+ .clear()
1057
+ .type(input)
1058
+ .should('have.value', input)
1059
+ .type('{enter}');
1012
1060
  },
1013
1061
 
1014
1062
  clickOnSolvePhaseAccordionIcon: (element) => {
@@ -1062,7 +1110,7 @@ const steps = {
1062
1110
 
1063
1111
  verifyTextIsNotEmpty: (element) => {
1064
1112
  element.invoke('text')
1065
- .should('not.be.empty');
1113
+ .should('not.be.empty');
1066
1114
  },
1067
1115
 
1068
1116
  verifyLength: (element, length) => {
@@ -1104,6 +1152,516 @@ const steps = {
1104
1152
  expect(scrollWidth).to.be.greaterThan(clientWidth);
1105
1153
  });
1106
1154
  },
1155
+
1156
+ verifyQuestionImagePopup: () => {
1157
+ thinkSpherePage.dialogBoxRoot()
1158
+ .within(() => {
1159
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionImagePopup(), 'visible');
1160
+ utilities.verifyElementVisibilityState(thinkSpherePage.closeExpandImagePopupButton(), 'visible');
1161
+ });
1162
+ },
1163
+
1164
+ verifyAddNewStrategyPopupCloseFunctionality: () => {
1165
+ let countBeforeOpeningPopup, countAfterClosingPopup;
1166
+ cy.get(thinkSpherePage.strategiesBoxPreviewTab())
1167
+ .its('length')
1168
+ .then((count) => {
1169
+ countBeforeOpeningPopup = count;
1170
+ cy.log('Count before opening popup:', countBeforeOpeningPopup);
1171
+ });
1172
+ thinkSpherePage.addNewStrategyButton().click();
1173
+ thinkSpherePage.addStrategyPopupCancelButton().click();
1174
+ cy.get(thinkSpherePage.strategiesBoxPreviewTab())
1175
+ .its('length')
1176
+ .then((count) => {
1177
+ countAfterClosingPopup = count;
1178
+ cy.log('Count after closing popup:', countAfterClosingPopup);
1179
+ expect(countAfterClosingPopup).to.equal(countBeforeOpeningPopup);
1180
+ });
1181
+ },
1182
+
1183
+ verifyAddNewStrategyPopupSaveFunctionality: () => {
1184
+ let countBeforeOpeningPopup, countAfterClosingPopup;
1185
+ thinkSpherePage.strategiesBoxPreviewTab()
1186
+ .its('length')
1187
+ .then((count) => {
1188
+ countBeforeOpeningPopup = count;
1189
+ cy.log('Count before opening popup:', countBeforeOpeningPopup);
1190
+ });
1191
+ thinkSpherePage.addNewStrategyButton().click();
1192
+ thinkSpherePage.strategyNameInputField().type('Test Strategy');
1193
+ thinkSpherePage.addStrategyPopupSaveButton().click();
1194
+ thinkSpherePage.strategiesBoxPreviewTab()
1195
+ .its('length')
1196
+ .then((count) => {
1197
+ countAfterClosingPopup = count;
1198
+ cy.log('Count after closing popup:', countAfterClosingPopup);
1199
+ expect(countAfterClosingPopup).to.equal(countBeforeOpeningPopup + 1);
1200
+ });
1201
+ },
1202
+
1203
+ verifyVideoPopupDialogBox: () => {
1204
+ thinkSpherePage.dialogBoxRoot()
1205
+ .within(() => {
1206
+ utilities.verifyElementVisibilityState(thinkSpherePage.dialogBoxTitle(), 'visible');
1207
+ utilities.verifyInnerText(thinkSpherePage.dialogBoxTitle(), 'Create_a_model');
1208
+ utilities.verifyElementVisibilityState(thinkSpherePage.buttonClose(), 'visible');
1209
+ });
1210
+ },
1211
+
1212
+ verifySentenceStartersDropdown: () => {
1213
+ thinkSpherePage.chooseStarterTextIconWrapper()
1214
+ .within(() => {
1215
+ utilities.verifyElementVisibilityState(thinkSpherePage.starterIocn(), 'visible');
1216
+ utilities.verifyInnerText(thinkSpherePage.starterTextWrapper(), 'Starters');
1217
+ });
1218
+ thinkSpherePage.chooseStarterDropdown()
1219
+ .verifyPseudoClassBeforeProperty('content', '""');
1220
+ },
1221
+
1222
+ verifySentenceStartersDropdownOptions: (sentenceStartersTextDefault) => {
1223
+ sentenceStartersTextDefault.forEach((label, index) => {
1224
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.chooseStartersListOptionLabels(), index), label);
1225
+ });
1226
+ },
1227
+
1228
+ verifySentenceStartersDropdownFunctionality: () => {
1229
+ thinkSpherePage.writePlanWrapper()
1230
+ .within(() => {
1231
+ thinkSpherePage.contentEditableDiv().clear();
1232
+ });
1233
+ thinkSpherePage.steps.expandChooseStarterDropdown();
1234
+ utilities.getNthElement(thinkSpherePage.chooseStartersListOptions(), 1).click();
1235
+ thinkSpherePage.writePlanWrapper()
1236
+ .within(() => {
1237
+ thinkSpherePage.contentEditableDiv().should('have.value', 'First, I will ');
1238
+ thinkSpherePage.contentEditableDiv().clear();
1239
+ });
1240
+ },
1241
+
1242
+ verifyProblemAskingHeading: () => {
1243
+ thinkSpherePage.problemAskingWrapper()
1244
+ .within(() => {
1245
+ utilities.verifyInnerText(thinkSpherePage.subheadingWrapper(), 'The problem is asking me to');
1246
+ utilities.verifyElementVisibilityState(thinkSpherePage.subheadingWrapper(), 'visible');
1247
+ });
1248
+ },
1249
+
1250
+ verifyProblemAskingTextArea: () => {
1251
+ thinkSpherePage.problemAskingWrapper()
1252
+ .within(() => {
1253
+ utilities.verifyElementVisibilityState(thinkSpherePage.contentEditableDiv(), 'visible');
1254
+ utilities.verifyElementAttribute(thinkSpherePage.contentEditableDiv(), 'placeholder', 'Enter your text here');
1255
+ });
1256
+ },
1257
+
1258
+ verifyProblemAskingMicSection: (isGrading=false) => {
1259
+ thinkSpherePage.problemAskingWrapper()
1260
+ .within(() => {
1261
+ utilities.verifyElementVisibilityState(thinkSpherePage.micIconWrapper(), 'visible');
1262
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'role', 'button');
1263
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'aria-label', 'Mic button');
1264
+ if(isGrading) {
1265
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'tabindex', -1);
1266
+ }
1267
+ });
1268
+ },
1269
+
1270
+ verifyProblemAskingTextAreaFunctionality: (textToEnter) => {
1271
+ thinkSpherePage.problemAskingWrapper()
1272
+ .within(() => {
1273
+ thinkSpherePage.contentEditableDiv().type(textToEnter);
1274
+ thinkSpherePage.contentEditableDiv().should('have.value', textToEnter);
1275
+ });
1276
+ },
1277
+
1278
+ verifyStrategiesToPlanHeading: () => {
1279
+ thinkSpherePage.strategiesToPlanWrapper()
1280
+ .within(() => {
1281
+ utilities.verifyInnerText(thinkSpherePage.subheadingWrapper(), 'Add strategies to plan');
1282
+ utilities.verifyElementVisibilityState(thinkSpherePage.subheadingWrapper(), 'visible');
1283
+ });
1284
+ },
1285
+
1286
+ verifyWritePlanHeading: () => {
1287
+ thinkSpherePage.writePlanWrapper()
1288
+ .within(() => {
1289
+ utilities.verifyInnerText(thinkSpherePage.subheadingWrapper(), 'Write your plan');
1290
+ utilities.verifyElementVisibilityState(thinkSpherePage.subheadingWrapper(), 'visible');
1291
+ });
1292
+ },
1293
+
1294
+ verifyWritePlanTextArea: () => {
1295
+ thinkSpherePage.writePlanWrapper()
1296
+ .within(() => {
1297
+ utilities.verifyElementVisibilityState(thinkSpherePage.contentEditableDiv(), 'visible');
1298
+ utilities.verifyElementAttribute(thinkSpherePage.contentEditableDiv(), 'placeholder', 'Enter your plan here');
1299
+ });
1300
+ },
1301
+
1302
+ verifyWritePlanMicSection: (isGrading=false) => {
1303
+ thinkSpherePage.writePlanWrapper()
1304
+ .within(() => {
1305
+ utilities.verifyElementVisibilityState(thinkSpherePage.micIconWrapper(), 'visible');
1306
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'role', 'button');
1307
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'aria-label', 'Mic button');
1308
+ if(isGrading) {
1309
+ utilities.verifyElementAttribute(thinkSpherePage.micIconWrapper(), 'tabindex', -1);
1310
+ }
1311
+ });
1312
+ },
1313
+
1314
+ verifyWritePlanTextAreaFunctionality: (planTextToEnter) => {
1315
+ thinkSpherePage.writePlanWrapper()
1316
+ .within(() => {
1317
+ thinkSpherePage.contentEditableDiv().type(planTextToEnter);
1318
+ thinkSpherePage.contentEditableDiv().should('have.value', planTextToEnter);
1319
+ thinkSpherePage.contentEditableDiv().clear();
1320
+ });
1321
+ },
1322
+
1323
+ verifyStrategyChipClickFunctionality: () => {
1324
+ thinkSpherePage.writePlanWrapper()
1325
+ .within(() => {
1326
+ thinkSpherePage.contentEditableDiv().clear();
1327
+ });
1328
+ thinkSpherePage.strategyChip().click();
1329
+ thinkSpherePage.writePlanWrapper()
1330
+ .within(() => {
1331
+ thinkSpherePage.contentEditableDiv().should('have.value', 'look for a pattern ');
1332
+ });
1333
+ },
1334
+ clickUploadVideoButton: () => {
1335
+ thinkSpherePage.uploadVideoLinkButton()
1336
+ .click();
1337
+ },
1338
+
1339
+ verifyPreAuthoredVideoTitles: (defaultStrategyTexts) => {
1340
+ defaultStrategyTexts.forEach((text, index) => {
1341
+ thinkSpherePage.videoLinkComponent(index)
1342
+ .within(() => {
1343
+ utilities.verifyInnerText(thinkSpherePage.uploadVideoLinkButton(), text);
1344
+ })
1345
+ });
1346
+ },
1347
+
1348
+ verifyPreAuthoredVideos: (preAuthoredVideos) => {
1349
+ preAuthoredVideos.forEach(({ duration }, optionIndex) => {
1350
+ thinkSpherePage.videoLinkComponent(optionIndex)
1351
+ .within(thinkSpherePage.steps.clickUploadVideoButton);
1352
+ thinkSpherePage.steps.startPlayback();
1353
+ thinkSpherePage.steps.waitForPlaybackToBegin();
1354
+ thinkSpherePage.playerTimer()
1355
+ .should('contain', `/${duration}`);
1356
+ thinkSpherePage.steps.closeVideoPopup();
1357
+ })
1358
+ },
1359
+
1360
+ /**
1361
+ * @description simulate a keyboard key press
1362
+ * @param {string} key - key to be pressed at the cursor
1363
+ */
1364
+
1365
+ clickOnReviewTab: () => {
1366
+ thinkSpherePage.reviewTab()
1367
+ .click();
1368
+ },
1369
+
1370
+ clickOnSolveTab: () => {
1371
+ thinkSpherePage.solveTab()
1372
+ .click();
1373
+ },
1374
+
1375
+ clickOnPlanTab: () => {
1376
+ thinkSpherePage.planTab()
1377
+ .click();
1378
+ },
1379
+
1380
+ clickOnYourPlanButton : () => {
1381
+ thinkSpherePage.yourPlanButton()
1382
+ .click();
1383
+ },
1384
+
1385
+ switchToGradingView: () => {
1386
+ thinkSpherePage.gradingViewRadioButton()
1387
+ .click();
1388
+ },
1389
+
1390
+ switchToStudentView: () => {
1391
+ thinkSpherePage.studentViewRadioButton()
1392
+ .click();
1393
+ },
1394
+
1395
+ verifyCorrectAnswerLabel: () => {
1396
+ utilities.verifyElementVisibilityState(thinkSpherePage.correctAnswerLabelWrapper(), 'visible');
1397
+ },
1398
+
1399
+ addImageAlternativeTextInputFieldText: (alternateTextForImage) => {
1400
+ thinkSpherePage.imageAlternativeTextInputField().type(alternateTextForImage);
1401
+ cy.wait(2000);
1402
+ },
1403
+
1404
+ submitResponseAndGotoGradingView : () => {
1405
+ thinkSpherePage.submitButton().click();
1406
+ thinkSpherePage.goToGradingViewButton().click();
1407
+ },
1408
+
1409
+ stepsBeforeGradingView: () => {
1410
+ thinkSpherePage.steps.expandChooseStarterDropdown();
1411
+ utilities.getNthElement(thinkSpherePage.chooseStartersListOptions(), 1).click();
1412
+ thinkSpherePage.problemAskingWrapper().first()
1413
+ .within(() => {
1414
+ thinkSpherePage.contentEditableDiv().type('This is a test text for the problem.');
1415
+ });
1416
+ thinkSpherePage.strategyChip().click();
1417
+ thinkSpherePage.submitButton().click();
1418
+ thinkSpherePage.goToGradingViewButton().click();
1419
+ },
1420
+
1421
+ verifyAddStrategiesButtonDisabled: () => {
1422
+ thinkSpherePage.addNewStrategyButton().should('have.attr', 'tabindex', '-1');
1423
+ thinkSpherePage.addNewStrategyButton().click({ force: true });
1424
+ utilities.verifyElementVisibilityState(thinkSpherePage.popupTitle(), 'notExist');
1425
+ },
1426
+
1427
+ verifyStrategiesListButtonDisabled: () => {
1428
+ utilities.getNthElement(thinkSpherePage.strategiesPreviewListLI(), 0).should('have.attr', 'tabindex', '-1');
1429
+ utilities.getNthElement(thinkSpherePage.strategiesPreviewListLI(), 0).should('have.attr', 'aria-disabled', 'true');
1430
+ },
1431
+
1432
+ verifySentenceStarterDropDownDisabled: () => {
1433
+ thinkSpherePage.chooseStarterDropdown().should('have.attr', 'aria-disabled', 'true');
1434
+ },
1435
+
1436
+ verifyDisabledProblemTextContainer: (textToEnter) => {
1437
+ thinkSpherePage.problemAskingWrapper()
1438
+ .within(() => {
1439
+ thinkSpherePage.contentEditableDiv().should('have.attr', 'readonly');
1440
+ thinkSpherePage.contentEditableDiv().should('have.value', textToEnter);
1441
+ });
1442
+ },
1443
+
1444
+ verifyDisabledWriteYourPlanTextContainer: (textToEnter) => {
1445
+ thinkSpherePage.writePlanWrapper()
1446
+ .within(() => {
1447
+ thinkSpherePage.contentEditableDiv().should('have.attr', 'readonly');
1448
+ thinkSpherePage.contentEditableDiv().should('have.value', textToEnter);
1449
+ });
1450
+ },
1451
+
1452
+ verifyDisabledStrategyChip: () => {
1453
+ thinkSpherePage.strategyChip().should('have.attr', 'tabindex', -1);
1454
+ },
1455
+
1456
+ verifyQuestionInstructionPreviewTexWrapperVisibility: (instructionText) => {
1457
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionPreviewTexWrapper(), 'visible');
1458
+ utilities.verifyInnerText(thinkSpherePage.questionInstructionPreviewTexWrapper(), instructionText);
1459
+ },
1460
+
1461
+ verifyQuestionInstructionPreviewImageWrapperVisibility: () => {
1462
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionPreviewImageWrapper(), 'visible');
1463
+ utilities.verifyElementVisibilityState(thinkSpherePage.questionInstructionPreviewImageExpandButton(), 'visible');
1464
+ },
1465
+
1466
+ verifyWhiteBoardVisibility: () => {
1467
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardComponent(), 'visible');
1468
+ },
1469
+
1470
+ verifyWhiteBoardSectionsVisibility: () => {
1471
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardTools(), 'visible');
1472
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardSubTools(), 'visible');
1473
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardCanvasContainer(), 'visible');
1474
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteBoardFooter(), 'visible');
1475
+ },
1476
+
1477
+ /**
1478
+ * Verifies that the inner text of the whiteboard's page label matches the expected text.
1479
+ *
1480
+ * @param {string} text - The exact text expected to be present in the page label element (e.g., "Page1 / 1").
1481
+ */
1482
+
1483
+ verifyInnerTextOfPageLabel: (text) => {
1484
+ thinkSpherePage.whiteBoardPage()
1485
+ .should('have.text', text);
1486
+ },
1487
+
1488
+ clickOnWhiteBoardNewPageButton: () => {
1489
+ thinkSpherePage.whiteBoardNewPage()
1490
+ .click();
1491
+ },
1492
+
1493
+ clickOnPreviousButton: () => {
1494
+ thinkSpherePage.whiteBoardPreviousPage()
1495
+ .click();
1496
+ },
1497
+
1498
+ clickOnNextButton: () => {
1499
+ thinkSpherePage.whiteBoardNextPage()
1500
+ .click();
1501
+ },
1502
+
1503
+ verifyPreviousButtonDisabled: () => {
1504
+ thinkSpherePage.whiteBoardPreviousPage()
1505
+ .should('have.attr', 'disabled');
1506
+ },
1507
+
1508
+ verifyNextButtonDisabled: () => {
1509
+ thinkSpherePage.whiteBoardNextPage()
1510
+ .should('have.attr', 'disabled');
1511
+ },
1512
+
1513
+ verifyYourPlanButtonInDisableState : () => {
1514
+ thinkSpherePage.yourPlanButton()
1515
+ .should('have.attr', 'disabled');
1516
+ },
1517
+
1518
+ verifyYourPlanContainerVisibility: () => {
1519
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanContainer(), 'visible');
1520
+ },
1521
+
1522
+ /**
1523
+ * Verifies that the inner text of the whiteboard's recording status matches the expected text.
1524
+ *
1525
+ * @param {string} text - The exact text expected to be present in the recording status element (e.g., "Ready").
1526
+ */
1527
+
1528
+ verifyRecordingStatus: (text) => {
1529
+ thinkSpherePage.whiteboardRecordingStatus()
1530
+ .should('have.text', text);
1531
+ },
1532
+
1533
+ verifyRecordingTimeStatusNotPresent: () => {
1534
+ thinkSpherePage.whiteboardRecordingTimeStatus()
1535
+ .should('have.text', '');
1536
+ },
1537
+
1538
+ verifyRecordingTimeStatusPresent: () => {
1539
+ thinkSpherePage.whiteboardRecordingTimeStatus()
1540
+ .invoke('text')
1541
+ .should('not.be.empty');
1542
+ },
1543
+
1544
+ clickOnRecordingOrPauseButton: () => {
1545
+ thinkSpherePage.whiteBoardRecordOrPauseButton()
1546
+ .click();
1547
+ },
1548
+
1549
+ clickOnStopButton: () => {
1550
+ thinkSpherePage.whiteBoardStopButton()
1551
+ .click();
1552
+ },
1553
+
1554
+ /**
1555
+ * Verifies that the inner text of the whiteboard's playback element matches the expected text.
1556
+ *
1557
+ * @param {string} text - The exact text expected to be present in the playback element (e.g., "Watch your recordingNo recording available.").
1558
+ */
1559
+
1560
+ verifyPlayBackNotAvailable: (text) => {
1561
+ thinkSpherePage.whiteboardPlayBackStatus().should('have.text', text);
1562
+ },
1563
+
1564
+ verifyWhiteBoardPlayer: () => {
1565
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardPlayer(), 'visible');
1566
+ },
1567
+
1568
+ verifyWhiteBoardRecordingInprogressWarning: () => {
1569
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardRecordingInProgressWarning(), 'visible');
1570
+ },
1571
+
1572
+ verifyWhiteBoardRecordingInprogressWarningNotVisible: () => {
1573
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardRecordingInProgressWarning(), 'notExist');
1574
+ },
1575
+
1576
+ clickOnWhiteBoardRecordingInProgressWarningOkButton: () => {
1577
+ thinkSpherePage.whiteboardRecordingInProgressWarningOkButton()
1578
+ .click();
1579
+ },
1580
+
1581
+ /**
1582
+ * Verifies that the inner text of the whiteboard's warning text header matches the expected text.
1583
+ *
1584
+ * @param {string} text - The exact text expected to be present in the warning text header element (e.g., "Recording in Progress").
1585
+ */
1586
+
1587
+ verifyWhiteboardWarningHeaderText: (text) => {
1588
+ thinkSpherePage.whiteboardRecordingInProgressWarningHeader()
1589
+ .should('have.text', text);
1590
+ },
1591
+
1592
+ /**
1593
+ * Verifies that the inner text of the whiteboard's whiteboard warning description matches the expected text.
1594
+ *
1595
+ * @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.").
1596
+ */
1597
+
1598
+ verifyWhiteboardWarningDescriptionText: (expected) => {
1599
+ thinkSpherePage.whiteboardRecordingInProgressWarningDescription()
1600
+ .invoke('text')
1601
+ .then((text) => {
1602
+ const cleanText = text.replace(/\s+/g, ' ').trim();
1603
+ expect(cleanText).to.eq(expected);
1604
+ });
1605
+ },
1606
+
1607
+ clickOnWhiteBoardPlaybackPlayButton: () => {
1608
+ thinkSpherePage.whiteboardPlaybackPlayButton()
1609
+ .click({ force: true });
1610
+ },
1611
+
1612
+ clickOnWhiteBoardPlaybackPauseButton: () => {
1613
+ thinkSpherePage.whiteboardPlaybackPauseButton()
1614
+ .click({ force: true });
1615
+ },
1616
+
1617
+ verifyWhiteBoardPlayerPauseButtonVisible: () => {
1618
+ thinkSpherePage.whiteboardPlaybackPauseButton()
1619
+ .should('be.visible')
1620
+ cy.wait(1000);
1621
+ },
1622
+
1623
+ verifyWhiteBoardPlayerPlayButtonVisible: () => {
1624
+ thinkSpherePage.whiteboardPlaybackPlayButton()
1625
+ .should('be.visible');
1626
+ },
1627
+
1628
+ /**
1629
+ * Verifies that the inner text of the whiteboard's player time status matches the expected text.
1630
+ *
1631
+ * @param {string} time - The exact text expected to be present in the player time status element (e.g., "00:00").
1632
+ */
1633
+
1634
+ verifyWhiteBoardPlayerTimeStatus: (time) => {
1635
+ thinkSpherePage.whiteboardPlaybackTime()
1636
+ .invoke('text')
1637
+ .then((text) => {
1638
+ const currentTime = text.split('/')[0].trim(); // get part before "/"
1639
+ expect(currentTime).to.eq(time);
1640
+ });
1641
+ },
1642
+
1643
+ clickOnWhiteBoardPlaybackSpeakerButton: () => {
1644
+ thinkSpherePage.whiteboardPlaybackSpeakerButton()
1645
+ .click();
1646
+ },
1647
+
1648
+ verifyWhiteBoardPlayerVolumeMuted: () => {
1649
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardMutedIcon(), 'visible');
1650
+ },
1651
+
1652
+ verifyWhiteBoardPlayerVolumeUnmuted: () => {
1653
+ utilities.verifyElementVisibilityState(thinkSpherePage.whiteboardVolumeIcon(), 'visible');
1654
+ },
1655
+
1656
+ hoverOverWhiteBoardPlaybackSpeakerButton: () => {
1657
+ thinkSpherePage.whiteboardPlaybackSpeakerButton()
1658
+ .realHover({ position: 'top' });
1659
+ },
1660
+
1661
+ verifyWhiteBoardPlayerVolumeSliderVisible: () => {
1662
+ thinkSpherePage.whiteboardVolumeSlider()
1663
+ .should('be.visible');
1664
+ }
1107
1665
  };
1108
1666
 
1109
1667
  const tests = {
@@ -1218,7 +1776,7 @@ const tests = {
1218
1776
  utilities.verifyElementVisibilityState(thinkSpherePage.tooltipText(), 'notExist');
1219
1777
  });
1220
1778
  },
1221
-
1779
+
1222
1780
  /**
1223
1781
  * Verifies the add option functionality.
1224
1782
  * @param {string} list - The list to add the option to ('strategy' or other).
@@ -1234,13 +1792,13 @@ const tests = {
1234
1792
  initialOptionCount = count;
1235
1793
  });
1236
1794
  });
1237
-
1795
+
1238
1796
  thinkSpherePage.steps.addOption(list);
1239
1797
  thinkSpherePage.planStrategySection()
1240
1798
  .within(() => {
1241
1799
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1242
1800
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter strategy name');
1243
- });
1801
+ });
1244
1802
  thinkSpherePage.steps.deleteOption(5);
1245
1803
  } else {
1246
1804
  thinkSpherePage.planSentenceStarterSection()
@@ -1249,13 +1807,13 @@ const tests = {
1249
1807
  initialOptionCount = count;
1250
1808
  });
1251
1809
  });
1252
-
1810
+
1253
1811
  thinkSpherePage.steps.addOption(list);
1254
1812
  thinkSpherePage.planSentenceStarterSection()
1255
1813
  .within(() => {
1256
1814
  thinkSpherePage.steps.getOptionCount().should('eq', initialOptionCount + 1);
1257
1815
  thinkSpherePage.steps.verifyOptionsContents(initialOptionCount, '', 'Enter sentence starter name');
1258
- });
1816
+ });
1259
1817
  thinkSpherePage.steps.deleteOption(10);
1260
1818
  }
1261
1819
  });
@@ -1334,7 +1892,7 @@ const tests = {
1334
1892
  }
1335
1893
  });
1336
1894
  },
1337
-
1895
+
1338
1896
  /**
1339
1897
  * Verifies the drag handle tooltip.
1340
1898
  * @param {number} NthElement - The index of the drag handle.
@@ -1484,17 +2042,17 @@ const tests = {
1484
2042
  thinkSpherePage.steps.selectOption(list, 1);
1485
2043
  utilities.verifyCSS(
1486
2044
  utilities.getNthElement(thinkSpherePage.planStrategyCheckbox().find('svg'), 1), {
1487
- 'fill': css.color.uncheckedCheckbox,
1488
- 'width': '12px',
1489
- 'height': '12px',
2045
+ 'fill': css.color.uncheckedCheckbox,
2046
+ 'width': '12px',
2047
+ 'height': '12px',
1490
2048
  });
1491
2049
  } else {
1492
2050
  thinkSpherePage.steps.selectOption(list, 1);
1493
2051
  utilities.verifyCSS(
1494
2052
  utilities.getNthElement(thinkSpherePage.planSentenceStarterCheckbox().find('svg'), 1), {
1495
- 'fill': css.color.uncheckedCheckbox,
1496
- 'width': '12px',
1497
- 'height': '12px',
2053
+ 'fill': css.color.uncheckedCheckbox,
2054
+ 'width': '12px',
2055
+ 'height': '12px',
1498
2056
  });
1499
2057
  }
1500
2058
  });
@@ -1549,7 +2107,7 @@ const tests = {
1549
2107
  thinkSpherePage.steps.addOptionText(list, optionIndex, inputFieldText);
1550
2108
  });
1551
2109
  });
1552
-
2110
+
1553
2111
  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
2112
  utilities.getNthElement(thinkSpherePage.deleteButton(), list === 'strategy' ? 0 : 5)
1555
2113
  .trigger('mouseover', { force: true });
@@ -1614,11 +2172,11 @@ const tests = {
1614
2172
  thinkSpherePage.planSentenceStarterListResetToDefault()
1615
2173
  .click();
1616
2174
  thinkSpherePage.planSentenceStarterSection()
1617
- .within(() => {
1618
- optionList.forEach((option, index) => {
1619
- thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
1620
- });
1621
- })
2175
+ .within(() => {
2176
+ optionList.forEach((option, index) => {
2177
+ thinkSpherePage.steps.verifyOptionsContents(index, option, 'Enter sentence starter name');
2178
+ });
2179
+ })
1622
2180
  });
1623
2181
  }
1624
2182
  },
@@ -1755,7 +2313,7 @@ const tests = {
1755
2313
  utilities.verifyElementVisibilityState(thinkSpherePage.deleteVideoButton(), 'visible');
1756
2314
  });
1757
2315
  });
1758
-
2316
+
1759
2317
  it('CSS of edit video button and delete video button', { tags: 'css' }, () => {
1760
2318
  thinkSpherePage.videoLinkComponent().within(() => {
1761
2319
  utilities.verifyCSS(thinkSpherePage.editVideoButton(), {
@@ -1848,7 +2406,7 @@ const tests = {
1848
2406
  });
1849
2407
  });
1850
2408
 
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' , () => {
2409
+ 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
2410
  utilities.verifyElementVisibilityState(thinkSpherePage.editBoxTextInput(), 'visible');
1853
2411
  thinkSpherePage.editBoxTextInput().blur();
1854
2412
  utilities.verifyElementVisibilityState(thinkSpherePage.editIconPencil(), 'visible');
@@ -1856,7 +2414,7 @@ const tests = {
1856
2414
  thinkSpherePage.editBoxTextInput().should('have.attr', 'placeholder', 'Enter title');
1857
2415
  thinkSpherePage.editBoxTextInput().type('Test Title');
1858
2416
  thinkSpherePage.editBoxTextInput().blur();
1859
- utilities.verifyInnerText(thinkSpherePage.editBoxText(),'Test Title');
2417
+ utilities.verifyInnerText(thinkSpherePage.editBoxText(), 'Test Title');
1860
2418
  });
1861
2419
  },
1862
2420
 
@@ -1865,6 +2423,479 @@ const tests = {
1865
2423
  thinkSpherePage.editTab().should('have.class', 'Mui-selected');
1866
2424
  });
1867
2425
  },
2426
+
2427
+ /**
2428
+ * Verifies the functionality of editing, selecting, and unselecting strategies and sentence starters.
2429
+ * Ensures that changes are saved successfully and reflected in the preview section.
2430
+ *
2431
+ * @param {Object} sentenceStartersObject - The object containing strategies and sentence starters data.
2432
+ * @param {Array<string>} sentenceStartersObject.editedStrategies - The list of edited strategies to verify.
2433
+ * @param {Array<string>} sentenceStartersObject.editedSentenceStarters - The list of edited sentence starters to verify.
2434
+ * @param {Array<string>} sentenceStartersObject.selectStrategies - The list of strategies to select and verify.
2435
+ * @param {Array<string>} sentenceStartersObject.selectSentenceStarters - The list of sentence starters to select and verify.
2436
+ */
2437
+ verifyStrategiesAndSentenceStartersSection: (sentenceStartersObject) => {
2438
+ const {
2439
+ editedStrategies, editedSentenceStarters, selectStrategies, selectSentenceStarters
2440
+ } = sentenceStartersObject || {};
2441
+ 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', () => {
2442
+ thinkSpherePage.steps.switchToEditTab();
2443
+ thinkSpherePage.steps.clickOnEditQuestionIcon();
2444
+ editedStrategies.forEach((strategy, index) => {
2445
+ thinkSpherePage.steps.addOptionText('strategy', index, strategy);
2446
+ });
2447
+ editedSentenceStarters.forEach((sentenceStarter, index) => {
2448
+ thinkSpherePage.steps.addOptionText('sentenceStarter', index, sentenceStarter);
2449
+ });
2450
+ thinkSpherePage.steps.saveAQuestionAndVerifySnackbar();
2451
+ thinkSpherePage.steps.switchToPreviewTab();
2452
+ editedStrategies.forEach((label, index) => {
2453
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.strategyTextWrapper(), index), label);
2454
+ });
2455
+ thinkSpherePage.steps.expandChooseStarterDropdown();
2456
+ editedSentenceStarters.forEach((label, index) => {
2457
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.chooseStartersListOptionLabels(), index), label);
2458
+ });
2459
+ utilities.clickOnBody();
2460
+ });
2461
+
2462
+ 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', () => {
2463
+ thinkSpherePage.steps.switchToEditTab();
2464
+ thinkSpherePage.steps.clickOnEditQuestionIcon();
2465
+ editedStrategies.forEach((strategy, index) => {
2466
+ if (!selectStrategies.includes(strategy)) {
2467
+ thinkSpherePage.steps.selectOption('strategy', index);
2468
+ }
2469
+ });
2470
+ cy.wait(2000);
2471
+ editedSentenceStarters.forEach((sentenceStarter, index) => {
2472
+ if (!selectSentenceStarters.includes(sentenceStarter)) {
2473
+ thinkSpherePage.steps.selectOption('sentenceStarter', index);
2474
+ }
2475
+ });
2476
+ cy.wait(2000);
2477
+ thinkSpherePage.steps.saveAQuestionAndVerifySnackbar();
2478
+ thinkSpherePage.steps.switchToPreviewTab();
2479
+ selectStrategies.forEach((label, index) => {
2480
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.strategyTextWrapper(), index), label);
2481
+ });
2482
+ thinkSpherePage.steps.expandChooseStarterDropdown();
2483
+ selectSentenceStarters.forEach((label, index) => {
2484
+ utilities.verifyInnerText(utilities.getNthElement(thinkSpherePage.chooseStartersListOptionLabels(), index), label);
2485
+ });
2486
+ utilities.clickOnBody();
2487
+ });
2488
+ },
2489
+
2490
+ verifyWhiteBoardAndSections: () => {
2491
+ it('Whiteboard should be present in the solve tab', () => {
2492
+ thinkSpherePage.steps.verifyWhiteBoardVisibility();
2493
+ });
2494
+
2495
+ it('Whiteboard should contain toolbar, subtools, whiteboard canvas and footer sections', () => {
2496
+ thinkSpherePage.steps.verifyWhiteBoardSectionsVisibility();
2497
+ });
2498
+
2499
+ it('CSS of whiteboard sections', { tags: 'css' }, () => {
2500
+ utilities.verifyCSS(thinkSpherePage.whiteBoardTools(), {
2501
+ 'padding': '5px 8px',
2502
+ 'position': 'static',
2503
+ 'display': 'flex',
2504
+ 'flex-wrap': 'wrap'
2505
+ });
2506
+ utilities.verifyCSS(thinkSpherePage.whiteBoardSubTools(), {
2507
+ 'margin': '0px 8px',
2508
+ 'padding': '4px 8px',
2509
+ 'borderTop': `1px solid ${css.color.secondaryBtnBorder}`,
2510
+ 'minHeight': '49px',
2511
+ });
2512
+ });
2513
+
2514
+ it('Accessibility of Whiteboard', { tags: 'a11y' }, () => {
2515
+ cy.checkAccessibility(thinkSpherePage.whiteboardComponent());
2516
+ });
2517
+ },
2518
+
2519
+ /**
2520
+ * Verifies default visibility, selection, and behavior of whiteboard tools and their subtools.
2521
+ *
2522
+ * @param {Array<Object>} whiteBoardTools - An array of tool objects, where each object contains:
2523
+ * @param {string} whiteBoardTools[].name - Display name of the tool.
2524
+ * @param {string} whiteBoardTools[].dataTestId - The `data-testid` used to locate the tool in the DOM.
2525
+ * @param {boolean} [whiteBoardTools[].isDefault] - Whether the tool is visible by default.
2526
+ * @param {string[]} [whiteBoardTools[].subToolS] - An array of subtool identifiers (data-testid, data-name, or class).
2527
+ * @param {string} [whiteBoardTools[].popupSelector] - A selector used to locate popup elements that appear after tool interaction.
2528
+ * @param {string[]} [whiteBoardTools[].popupContent] - Optional array of class names used to verify the popup’s inner content.
2529
+ *
2530
+ * @param {string[]} editSectionWhiteBoardToolButtons - A list of tool names that will be enabled during edit phase.
2531
+ */
2532
+
2533
+ verifyAllDefaultToolIds: (whiteBoardTools, editSectionWhiteBoardToolButtons) => {
2534
+ const allToolIds = whiteBoardTools.map(tool => tool.dataTestId);
2535
+ const defaultToolIds = whiteBoardTools.filter(tool => tool.isDefault).map(tool => tool.dataTestId);
2536
+
2537
+ it(`${defaultToolIds.join(', ')} should be visible in the whiteboard by default`, () => {
2538
+ defaultToolIds.forEach((toolId) => {
2539
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2540
+ });
2541
+ });
2542
+
2543
+ it('All tools should be visible in the whiteboard after selected by the author', () => {
2544
+ allToolIds.forEach((toolId) => {
2545
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2546
+ });
2547
+ })
2548
+ },
2549
+
2550
+ verifyWhiteBoardSubTools: (whiteBoardTools) => {
2551
+ whiteBoardTools.forEach((tool) => {
2552
+ it(`When user clicks on "${tool.name}" tool it should display its sub tools`, () => {
2553
+ // Click the main tool by data-testid
2554
+ cy.get(`[data-testid="${tool.dataTestId}"]`)
2555
+ .and('be.visible')
2556
+ .first()
2557
+ .click({ force: true }) // force in case some are behind overlays
2558
+ cy.wait(1000); // Wait for any animations or transitions to complete
2559
+
2560
+ // If the tool has subtools, verify each
2561
+ if (tool.subToolS && tool.subToolS.length > 0) {
2562
+ tool.subToolS.forEach((subTool) => {
2563
+ // Try data-testid first, fall back to data-name if needed
2564
+ cy.get(`[data-testid="${subTool}"], [data-name="${subTool}"], [class*="${subTool}"]`)
2565
+ .should('exist')
2566
+ .and('be.visible');
2567
+ });
2568
+ }
2569
+
2570
+ if(tool.popupSelector) {
2571
+ // Verify the popup selector if it exists
2572
+ if(tool.popupSelector === 'eraser-width-picker') {
2573
+ cy.get(`[data-name="ERASER_THICKNESS"]`)
2574
+ .should('exist')
2575
+ .and('be.visible')
2576
+ .first()
2577
+ .click({ force: true });
2578
+ cy.get(`[class*="${tool.popupSelector}"]`).should('exist').and('be.visible');
2579
+ } else {
2580
+ cy.get(`[data-testid="${tool.popupSelector}"]`).should('exist').and('be.visible');
2581
+ }
2582
+ if(tool.popupContent) {
2583
+ // Verify the content inside the popup
2584
+ tool.popupContent.forEach((content) => {
2585
+ cy.get(`[class="${content}"]`).should('exist').and('be.visible');
2586
+ });
2587
+ }
2588
+ }
2589
+
2590
+ if(tool.name === 'simple calculator' || tool.name ==='scientific calculator') {
2591
+ cy.get(`[data-testid="${tool.dataTestId}"]`)
2592
+ .and('be.visible')
2593
+ .first()
2594
+ .click({ force: true }) // force in case some are behind overlays
2595
+ cy.wait(1000);
2596
+ }
2597
+ });
2598
+ });
2599
+ },
2600
+
2601
+ verifyWhiteboardToolsAndSubTools: (whiteBoardTools, editSectionWhiteBoardToolButtons) => {
2602
+ const allToolIds = whiteBoardTools.map(tool => tool.dataTestId);
2603
+
2604
+ const defaultToolIds = whiteBoardTools.filter(tool => tool.isDefault).map(tool => tool.dataTestId);
2605
+
2606
+ it(`${defaultToolIds.join(', ')} should be visible in the whiteboard by default`, () => {
2607
+ defaultToolIds.forEach((toolId) => {
2608
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2609
+ });
2610
+ });
2611
+
2612
+ it('All tools should be visible in the whiteboard after selected by the author', () => {
2613
+ thinkSpherePage.steps.switchToEditTab();
2614
+ thinkSpherePage.steps.clickOnSolvePhaseAccordionIcon();
2615
+ thinkSpherePage.steps.expandCustomizeToolsAndControls();
2616
+ editSectionWhiteBoardToolButtons.forEach((toolName) => {
2617
+ thinkSpherePage.steps.selectOptionFromToolsAndControls(toolName);
2618
+ })
2619
+ thinkSpherePage.steps.switchToPreviewTab();
2620
+ thinkSpherePage.steps.clickOnSolveTab();
2621
+ allToolIds.forEach((toolId) => {
2622
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2623
+ });
2624
+ })
2625
+
2626
+ thinkSpherePage.tests.verifyWhiteBoardSubTools(whiteBoardTools);
2627
+ },
2628
+
2629
+ verifyDisabledWhiteboardTools: (defaultToolIds, allToolIds) => {
2630
+ it(`${defaultToolIds.join(', ')} should be visible in the whiteboard by default and it should be disabled with opacity 0.4`, () => {
2631
+ defaultToolIds.forEach((toolId) => {
2632
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2633
+ cy.get(`[data-testid="${toolId}"]`).should('have.css', 'opacity', '0.4');
2634
+ });
2635
+ });
2636
+
2637
+ it('All tools should be visible in the whiteboard after selected by the author and it should be disabled with opacity 0.4', () => {
2638
+ allToolIds.forEach((toolId) => {
2639
+ cy.get(`[data-testid="${toolId}"]`).should('exist').and('be.visible');
2640
+ cy.get(`[data-testid="${toolId}"]`).should('have.css', 'opacity', '0.4');
2641
+ });
2642
+ });
2643
+ },
2644
+
2645
+ verifyYourPlanSection: () => {
2646
+ it('When user clicks on "Your Plan" button then it should navigate to Your Plan section', () => {
2647
+ thinkSpherePage.steps.clickOnYourPlanButton();
2648
+ thinkSpherePage.steps.verifyYourPlanContainerVisibility();
2649
+ });
2650
+
2651
+ it('Your Plan section should have a header with title and close button', () => {
2652
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanHeaderContainer(), 'visible');
2653
+ utilities.verifyInnerText(thinkSpherePage.yourPlanHeadingLabel(), 'Your plan');
2654
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanCloseButton(), 'visible');
2655
+ });
2656
+
2657
+ it('Your Plan section should display "The problem is asking me to" section with textarea', () => {
2658
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanSubheading().contains('The problem is asking me to'), 'visible');
2659
+ const problemTextarea = thinkSpherePage.yourPlanTextarea().first();
2660
+ utilities.verifyElementVisibilityState(problemTextarea, 'visible');
2661
+ problemTextarea.should('have.attr', 'placeholder', 'Enter your text here');
2662
+ });
2663
+
2664
+ it('Your Plan section should display "Selected strategies" section with checkboxes', () => {
2665
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanSubheading().contains('Selected strategies'), 'visible');
2666
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanStrategiesList(), 'visible');
2667
+ thinkSpherePage.yourPlanStrategiesList()
2668
+ .find('li')
2669
+ .should('have.length', 5);
2670
+ });
2671
+
2672
+ it('Your Plan section should display correct strategy options with checkboxes', () => {
2673
+ const expectedStrategies = [
2674
+ 'Create a model',
2675
+ 'Look for a pattern',
2676
+ 'Guess, check, and revise',
2677
+ 'Try with friendlier numbers',
2678
+ 'Show with an equation'
2679
+ ];
2680
+
2681
+ expectedStrategies.forEach((strategyText) => {
2682
+ thinkSpherePage.yourPlanStrategiesList()
2683
+ .contains(strategyText)
2684
+ .should('be.visible');
2685
+ });
2686
+
2687
+ thinkSpherePage.yourPlanStrategiesList()
2688
+ .find('input[type="checkbox"]')
2689
+ .should('have.length', 5)
2690
+ .and('not.be.checked');
2691
+ });
2692
+
2693
+ it('Your Plan section should display "Planning journal" section with textarea', () => {
2694
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanSubheading().contains('Planning journal'), 'visible');
2695
+ const journalTextarea = thinkSpherePage.yourPlanTextarea().last();
2696
+ utilities.verifyElementVisibilityState(journalTextarea, 'visible');
2697
+ journalTextarea.should('have.attr', 'placeholder', 'Enter your text here');
2698
+ });
2699
+
2700
+ it('User should be able to enter text in the "The problem is asking me to" textarea', () => {
2701
+ const testText = 'Find the value of x in the equation';
2702
+ thinkSpherePage.yourPlanTextarea().first().click({ force: true }).type(testText);
2703
+ thinkSpherePage.yourPlanTextarea().first().should('have.value', testText);
2704
+ });
2705
+
2706
+ it('User should be able to check and uncheck strategy options', () => {
2707
+ // Check first and third strategy options
2708
+ thinkSpherePage.yourPlanStrategiesList()
2709
+ .find('input[type="checkbox"]')
2710
+ .eq(0)
2711
+ .check()
2712
+ .should('be.checked');
2713
+
2714
+ thinkSpherePage.yourPlanStrategiesList()
2715
+ .find('input[type="checkbox"]')
2716
+ .eq(2)
2717
+ .check()
2718
+ .should('be.checked');
2719
+
2720
+ // Uncheck first strategy option
2721
+ thinkSpherePage.yourPlanStrategiesList()
2722
+ .find('input[type="checkbox"]')
2723
+ .eq(0)
2724
+ .uncheck()
2725
+ .should('not.be.checked');
2726
+ });
2727
+
2728
+ it('User should be able to enter text in the "Planning journal" textarea', () => {
2729
+ const testText = 'I will first identify the variables and then solve the equation';
2730
+ thinkSpherePage.yourPlanTextarea().last().clear().type(testText);
2731
+ thinkSpherePage.yourPlanTextarea().last().should('have.value', testText);
2732
+ });
2733
+
2734
+ it('When the user clicks on close button, the Your Plan section should be closed', () => {
2735
+ thinkSpherePage.yourPlanCloseButton().click();
2736
+ utilities.verifyElementVisibilityState(thinkSpherePage.yourPlanContainer(), 'notExist');
2737
+ });
2738
+
2739
+ it('CSS of Your Plan section', { tags: 'css' }, () => {
2740
+ thinkSpherePage.steps.clickOnYourPlanButton();
2741
+ utilities.verifyCSS(thinkSpherePage.yourPlanHeaderContainer(), {
2742
+ 'display': 'flex',
2743
+ 'justify-content': 'space-between',
2744
+ 'align-items': 'center',
2745
+ });
2746
+
2747
+ utilities.verifyCSS(thinkSpherePage.yourPlanHeadingLabel(), {
2748
+ 'font-size': css.fontSize.huge,
2749
+ 'font-weight': css.fontWeight.bold,
2750
+ 'color': css.color.panelLabel,
2751
+ });
2752
+
2753
+ utilities.verifyCSS(thinkSpherePage.yourPlanStrategiesList(), {
2754
+ 'padding': '0px',
2755
+ 'margin': '0px 0px 24px'
2756
+ });
2757
+ });
2758
+
2759
+ it('Accessibility of Your Plan section', { tags: 'a11y' }, () => {
2760
+ cy.checkAccessibility(thinkSpherePage.yourPlanContainer());
2761
+ });
2762
+ },
2763
+
2764
+ verifyWhiteboardPageNavigation: () => {
2765
+ it('By default "Previous" and "Next" page buttons should be disabled', () => {
2766
+ thinkSpherePage.steps.verifyPreviousButtonDisabled();
2767
+ thinkSpherePage.steps.verifyNextButtonDisabled();
2768
+ });
2769
+ it('When user clicks on "New Page" button it should create new page', () => {
2770
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page1 / 1');
2771
+ thinkSpherePage.steps.clickOnWhiteBoardNewPageButton();
2772
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page2 / 2');
2773
+ thinkSpherePage.steps.verifyNextButtonDisabled();
2774
+ });
2775
+ it('When user clicks on "Previous" button then it should navigate to the previous page', () => {
2776
+ thinkSpherePage.steps.clickOnPreviousButton();
2777
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page1 / 2');
2778
+ thinkSpherePage.steps.verifyPreviousButtonDisabled();
2779
+ });
2780
+ it('When user clicks on "Next" button then it should navigate to the next page', () => {
2781
+ thinkSpherePage.steps.clickOnNextButton();
2782
+ thinkSpherePage.steps.verifyInnerTextOfPageLabel('Page2 / 2');
2783
+ thinkSpherePage.steps.verifyNextButtonDisabled();
2784
+ });
2785
+ },
2786
+
2787
+ /**
2788
+ * Verifies the full recording and playback functionality of the whiteboard, including status changes,
2789
+ * UI updates, warnings, and accessibility features.
2790
+ *
2791
+ * @param {Array<Object>} whiteBoardTools - An array of whiteboard tool objects used to simulate interactions during recording.
2792
+ * @param {string} whiteBoardTools[].dataTestId - The `data-testid` used to identify the tool.
2793
+ */
2794
+
2795
+ verifyWhiteboardRecordingAndPlayback: (whiteBoardTools) => {
2796
+ it('By default the recording status should be "Ready" and there should be no time status of recording', () => {
2797
+ thinkSpherePage.steps.verifyRecordingStatus('Ready');
2798
+ thinkSpherePage.steps.verifyRecordingTimeStatusNotPresent();
2799
+ });
2800
+
2801
+ it('By default "Review" tab should contain "Watch your recording No recording available." before recording', () => {
2802
+ thinkSpherePage.steps.clickOnReviewTab();
2803
+ thinkSpherePage.steps.verifyPlayBackNotAvailable('Watch your recordingNo recording available.');
2804
+ thinkSpherePage.steps.clickOnSolveTab();
2805
+ });
2806
+
2807
+ it('When the user clicks on the recording button, the recording status should be "Recording"', () => {
2808
+ thinkSpherePage.steps.clickOnRecordingOrPauseButton();
2809
+ thinkSpherePage.steps.verifyRecordingStatus('Recording');
2810
+ thinkSpherePage.steps.verifyRecordingTimeStatusPresent();
2811
+ });
2812
+
2813
+ it('When the user clicks on the pause button, the recording status should be "Paused"', () => {
2814
+ thinkSpherePage.steps.clickOnRecordingOrPauseButton();
2815
+ thinkSpherePage.steps.verifyRecordingStatus('Paused');
2816
+ });
2817
+
2818
+ it('When the user click on Plan, or Review tab while recording, it should show a warning popup to the user', () => {
2819
+ thinkSpherePage.steps.clickOnRecordingOrPauseButton();
2820
+ thinkSpherePage.steps.clickOnReviewTab();
2821
+ thinkSpherePage.steps.verifyWhiteBoardRecordingInprogressWarning();
2822
+ thinkSpherePage.steps.clickOnWhiteBoardRecordingInProgressWarningOkButton();
2823
+ thinkSpherePage.steps.clickOnPlanTab();
2824
+ thinkSpherePage.steps.verifyWhiteboardWarningHeaderText('Recording in Progress');
2825
+ thinkSpherePage.steps.verifyWhiteboardWarningDescriptionText("You're currently recording your work. To avoid losing progress, please return and click Stop to save the recording.");
2826
+ });
2827
+
2828
+ it('CSS of Recording in Progress warning', { tags: 'css' }, () => {
2829
+ utilities.verifyCSS(thinkSpherePage.whiteboardRecordingInProgressWarningHeader(), {
2830
+ 'border-bottom': `1px solid ${css.color.secondaryBtnBorder}`,
2831
+ 'padding': '20px 0px',
2832
+ 'margin': '0px 16px',
2833
+ 'text-align': 'left',
2834
+ });
2835
+ utilities.verifyCSS(thinkSpherePage.whiteboardRecordingInProgressWarningDescription(), {
2836
+ 'padding': '0px 16px',
2837
+ 'font-size': '16px',
2838
+ 'color': css.color.sectionHeading,
2839
+ 'line-height': '22px',
2840
+ 'font-weight': '400',
2841
+ });
2842
+ utilities.verifyCSS(thinkSpherePage.whiteboardRecordingInProgressWarningOkButton(), {
2843
+ 'color': css.color.primaryBtn,
2844
+ 'font-size': css.fontSize.default,
2845
+ 'font-weight': css.fontWeight.semibold,
2846
+ // 'background-color': css.color.primaryBtnBg
2847
+ });
2848
+ });
2849
+
2850
+ it('Accessibility of whiteboard warning popup', { tags: 'a11y' }, () => {
2851
+ cy.checkAccessibility(thinkSpherePage.whiteboardRecordingInProgressWarning());
2852
+ thinkSpherePage.steps.clickOnWhiteBoardRecordingInProgressWarningOkButton();
2853
+ });
2854
+
2855
+
2856
+ 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', () => {
2857
+ cy.get(`[data-testid="${whiteBoardTools[0].dataTestId}"]`)
2858
+ .should('exist')
2859
+ .and('be.visible')
2860
+ .first()
2861
+ .click({ force: true });
2862
+ cy.get('.upper-canvas').click({ force: true });
2863
+ cy.wait(1000);
2864
+ thinkSpherePage.steps.clickOnStopButton();
2865
+ thinkSpherePage.steps.clickOnReviewTab();
2866
+ thinkSpherePage.steps.verifyWhiteBoardRecordingInprogressWarningNotVisible();
2867
+ thinkSpherePage.steps.verifyWhiteBoardPlayer();
2868
+ });
2869
+
2870
+ it('By default the user should see the playback time as 00:00 / total duration', () => {
2871
+ thinkSpherePage.steps.verifyWhiteBoardPlayerTimeStatus('00:00');
2872
+ });
2873
+
2874
+ it('When the user clicks on the Play button, it should play the recording', () => {
2875
+ cy.wait(1000);
2876
+ thinkSpherePage.steps.verifyWhiteBoardPlayerPlayButtonVisible();
2877
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackPlayButton();
2878
+ thinkSpherePage.steps.verifyWhiteBoardPlayerPauseButtonVisible();
2879
+ thinkSpherePage.steps.verifyWhiteBoardPlayerTimeStatus('00:01');
2880
+ });
2881
+
2882
+ it('When the user clicks on the Pause button, it should pause the recording', () => {
2883
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackPauseButton();
2884
+ thinkSpherePage.steps.verifyWhiteBoardPlayerPlayButtonVisible();
2885
+ });
2886
+
2887
+ it('When the user hovers over the speaker button, it should display the volume slider', () => {
2888
+ thinkSpherePage.steps.hoverOverWhiteBoardPlaybackSpeakerButton();
2889
+ thinkSpherePage.steps.verifyWhiteBoardPlayerVolumeSliderVisible();
2890
+ });
2891
+
2892
+ 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', () => {
2893
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackSpeakerButton();
2894
+ thinkSpherePage.steps.verifyWhiteBoardPlayerVolumeMuted();
2895
+ thinkSpherePage.steps.clickOnWhiteBoardPlaybackSpeakerButton();
2896
+ thinkSpherePage.steps.verifyWhiteBoardPlayerVolumeUnmuted();
2897
+ });
2898
+ }
1868
2899
  };
1869
2900
 
1870
2901
  export const thinkSpherePage = {