itemengine-cypress-automation 1.0.189-e2e-execution-crash-83cdbd4.0 → 1.0.190-repoUpdate3May-f180558.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) hide show
  1. package/cypress/e2e/ILC/AudioPlayerNew/allSupportedFileTypes.js +79 -0
  2. package/cypress/e2e/ILC/AudioPlayerNew/barAudioPlayerStyle.js +647 -0
  3. package/cypress/e2e/ILC/AudioPlayerNew/compactAudioPlayerStyle.js +429 -0
  4. package/cypress/e2e/ILC/AudioPlayerNew/customizePlayerLayoutSettings.js +596 -0
  5. package/cypress/e2e/ILC/AudioPlayerNew/previewContents.smoke.js +162 -0
  6. package/cypress/e2e/ILC/AudioPlayerNew/standardAudioPlayerStyle.js +792 -0
  7. package/cypress/e2e/ILC/AudioPlayerNew/studentViewSettings.js +253 -0
  8. package/cypress/e2e/ILC/AudioPlayerNew/uploadAndAddAudioFile.js +313 -0
  9. package/cypress/e2e/ILC/AudioResponseNew/additionalSettingsBasic.js +1 -22
  10. package/cypress/e2e/ILC/AudioResponseNew/barRecorderStyle.smoke.js +1 -1
  11. package/cypress/e2e/ILC/AudioResponseNew/compactRecorderStyle.smoke.js +1 -1
  12. package/cypress/e2e/ILC/AudioResponseNew/standardRecorderStyle.smoke.js +1 -1
  13. package/cypress/e2e/ILC/AudioResponseNew/studentViewSettings.js +2 -11
  14. package/cypress/e2e/ILC/ChartsBar/previewContentsForAllViews.smoke.js +359 -0
  15. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/clickAndDrop.js +1 -1
  16. package/cypress/e2e/ILC/DrawingResponse/drawingResponseGradingViewAndCorrectAnswerViewContents.smoke.js +6 -8
  17. package/cypress/e2e/ILC/EditTabSettingPage/itemPreviewSettingsTabFunctionality.js +417 -28
  18. package/cypress/e2e/ILC/EssayResponse/editCategoryFlyout.js +1 -1
  19. package/cypress/e2e/ILC/FeedbackScaleNew/headerSection.js +29 -1
  20. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +2 -2
  21. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/studentViewSettings.js +1 -1
  22. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/studentViewSettings.js +1 -1
  23. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/editTabScoring.js +1 -0
  24. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/previewContentsForAllViews.smoke.js +2 -2
  25. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/studentViewSettings.js +1 -1
  26. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/studentViewSettings.js +1 -1
  27. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +4 -4
  28. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
  29. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/studentViewSettings.js +1 -1
  30. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +5 -5
  31. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +3 -4
  32. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
  33. package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +1 -0
  34. package/cypress/e2e/ILC/FillInTheGapsTextNew/studentViewSettings.js +1 -1
  35. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +2 -2
  36. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +2 -2
  37. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +2 -2
  38. package/cypress/e2e/ILC/Graphing/addBackgroundShapesSection.js +2 -2
  39. package/cypress/e2e/ILC/Graphing/studentViewSettings.js +1 -1
  40. package/cypress/e2e/ILC/GridFill/checkAnswerFunctionalityForAllViews.smoke.js +3 -2
  41. package/cypress/e2e/ILC/GridFill/gridLayoutContents.js +11 -3
  42. package/cypress/e2e/ILC/GridFill/previewContentsForAllViews.smoke.js +3 -3
  43. package/cypress/e2e/ILC/GridFill/scoring/allOrNothingScoringCellShadeCount.js +2 -2
  44. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountAllOrNothingCorrectPointsGreaterThanAlternativePoints.js +143 -0
  45. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountPartialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +132 -0
  46. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountPartialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +143 -0
  47. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountPartialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +144 -0
  48. package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountallOrNothingCorrectPointsEqualToAlternativePoints.js +143 -0
  49. package/cypress/e2e/ILC/GridFill/scoring/cellshadeCountAllOrNothingAlternativePointsGreaterThanCorrectPoints.js +131 -0
  50. package/cypress/e2e/ILC/GridFill/scoring/matchExactAndCellShadeCountCombinedScoring.js +87 -0
  51. package/cypress/e2e/ILC/GridFill/scoring/partialEqualWeightsCellShadeCountBasics.js +446 -0
  52. package/cypress/e2e/ILC/GridFill/studentViewSettingsSection.js +1 -1
  53. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +194 -0
  54. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +195 -0
  55. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +274 -0
  56. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingPenaltyScoring.js +48 -0
  57. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/manuallyAndNonScored.js +144 -0
  58. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +252 -0
  59. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsBasic.js +102 -0
  60. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +256 -0
  61. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +253 -0
  62. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +308 -0
  63. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +225 -0
  64. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsBasic.js +151 -0
  65. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +196 -0
  66. package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +227 -0
  67. package/cypress/e2e/ILC/ListOrderingDropdown/additionalSettings.js +91 -0
  68. package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +230 -0
  69. package/cypress/e2e/ILC/ListOrderingDropdown/checkAnswerFunctionalityForAllViews.smoke.js +124 -0
  70. package/cypress/e2e/ILC/ListOrderingDropdown/editTabBasicSection.js +221 -0
  71. package/cypress/e2e/ILC/ListOrderingDropdown/editTabScoring.js +203 -0
  72. package/cypress/e2e/ILC/ListOrderingDropdown/manuallyAndNonScoredEditTab.js +71 -0
  73. package/cypress/e2e/ILC/ListOrderingDropdown/minimumScoringPenaltyPointsAndRoundingDropdown.js +197 -0
  74. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +201 -0
  75. package/cypress/e2e/ILC/ListOrderingDropdown/specifyCorrectAnswerSection.js +115 -0
  76. package/cypress/e2e/ILC/ListOrderingDropdown/studentViewSettings.js +183 -0
  77. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +216 -0
  78. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +214 -0
  79. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +273 -0
  80. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingPenaltyScoring.js +52 -0
  81. package/cypress/e2e/ILC/ListOrderingNew/Scoring/manuallyAndNonScored.js +128 -0
  82. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +279 -0
  83. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsBasic.js +109 -0
  84. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +278 -0
  85. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +278 -0
  86. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +335 -0
  87. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +250 -0
  88. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsBasic.js +161 -0
  89. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +216 -0
  90. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +252 -0
  91. package/cypress/e2e/ILC/ListOrderingNew/additionalSettings.js +118 -0
  92. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +243 -0
  93. package/cypress/e2e/ILC/ListOrderingNew/checkAnswerFunctionalityForAllViews.smoke.js +128 -0
  94. package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +155 -0
  95. package/cypress/e2e/ILC/ListOrderingNew/editTabScoring.js +195 -0
  96. package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +78 -0
  97. package/cypress/e2e/ILC/ListOrderingNew/manuallyAndNonScoredEditTab.js +69 -0
  98. package/cypress/e2e/ILC/ListOrderingNew/minimumScoringPenaltyPointsAndRoundingDropdown.js +194 -0
  99. package/cypress/e2e/ILC/ListOrderingNew/previewContentsForAllViews.smoke.js +176 -0
  100. package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +112 -0
  101. package/cypress/e2e/ILC/ListOrderingNew/studentViewSettings.js +244 -0
  102. package/cypress/e2e/ILC/Matching/studentViewSettings.js +1 -1
  103. package/cypress/e2e/ILC/MultipleSelection/allOrNothingWithAlternativeAnswer.js +1 -0
  104. package/cypress/e2e/ILC/MultipleSelectionGridNew/studentViewSettings.js +1 -1
  105. package/cypress/e2e/ILC/NumberLine/LayoutSection.js +209 -0
  106. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithAlternatePointsGreaterThanCorrectPoints.js +1 -1
  107. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +1 -1
  108. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +4 -4
  109. package/cypress/e2e/ILC/NumberLine/Scoring/manualAndNonScoredScoring.js +1 -1
  110. package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeightsBasic.js +1 -1
  111. package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeightsWithAlternatePointsGreaterThanCorrectPoints.js +1 -1
  112. package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternatePoints.js +1 -1
  113. package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeigtsWithCorrectPointsEqualToAlternatePoints.js +1 -1
  114. package/cypress/e2e/ILC/NumberLine/allOrNothingScoringForAllViews.smoke.js +58 -2
  115. package/cypress/e2e/ILC/NumberLine/checkAnswerFunctionalityForAllViews.smoke.js +1 -1
  116. package/cypress/e2e/ILC/NumberLine/editTabScoringSection.js +1 -1
  117. package/cypress/e2e/ILC/NumberLine/gradingViewAndCorrectAnswerView.smoke.js +2 -2
  118. package/cypress/e2e/ILC/NumberLine/headerSection.js +1 -1
  119. package/cypress/e2e/ILC/NumberLine/lineSettingsSection.js +33 -0
  120. package/cypress/e2e/ILC/NumberLine/numberLineSection.js +50 -0
  121. package/cypress/e2e/ILC/NumberLine/previewTabContentsForAllViews.smoke.js +2 -2
  122. package/cypress/e2e/ILC/NumberLine/specifyCorrectAnswerSection.js +1 -1
  123. package/cypress/e2e/ILC/NumberLine/studentViewSettings.js +2 -2
  124. package/cypress/e2e/ILC/NumberLine/toolSettings.js +2 -1
  125. package/cypress/e2e/ILC/NumberLine/toolsAndControls.js +1 -1
  126. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/allOrNothingScoringForAllViews.smoke.js +696 -0
  127. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +173 -0
  128. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/layoutSection.js +211 -0
  129. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/numberLineSection.js +75 -0
  130. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/previewTabContentsForAllViews.smoke.js +204 -0
  131. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +229 -0
  132. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +229 -0
  133. package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +229 -0
  134. package/cypress/e2e/ILC/NumberLineLabel/Scoring/manualAndNonScoredScoring.js +169 -0
  135. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +274 -0
  136. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsBasic.js +433 -0
  137. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +274 -0
  138. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +274 -0
  139. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +249 -0
  140. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsBasic.js +135 -0
  141. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +210 -0
  142. package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +248 -0
  143. package/cypress/e2e/ILC/NumberLineLabel/additionalSettingsBasic.js +115 -0
  144. package/cypress/e2e/ILC/NumberLineLabel/allOrNothingForAllViews.smoke.js +288 -0
  145. package/cypress/e2e/ILC/NumberLineLabel/checkAnswerFunctionalityForAllViews.smoke.js +153 -0
  146. package/cypress/e2e/ILC/NumberLineLabel/editTabBasicSection.js +326 -0
  147. package/cypress/e2e/ILC/NumberLineLabel/editTabScoring.js +234 -0
  148. package/cypress/e2e/ILC/NumberLineLabel/gradingViewAndCorrectAnswerView.smoke.js +164 -0
  149. package/cypress/e2e/ILC/NumberLineLabel/headerSection.js +80 -0
  150. package/cypress/e2e/ILC/NumberLineLabel/layoutSection.js +204 -0
  151. package/cypress/e2e/ILC/NumberLineLabel/manuallyAndNonScoredEditTab.js +79 -0
  152. package/cypress/e2e/ILC/NumberLineLabel/minimumScoringPenaltyPointsAndRoundingDropdown.js +85 -0
  153. package/cypress/e2e/ILC/NumberLineLabel/numberLineSection.js +51 -0
  154. package/cypress/e2e/ILC/NumberLineLabel/previewContentsForAllViews.smoke.js +120 -0
  155. package/cypress/e2e/ILC/NumberLineLabel/specifyCorrectAnswerSection.js +74 -0
  156. package/cypress/e2e/ILC/NumberLineLabel/studentViewSettings.js +183 -0
  157. package/cypress/e2e/ILC/NumberLineLabel/toolSettings.js +76 -0
  158. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/allOrNothingForAllViews.smoke.js +292 -0
  159. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/checkAnswerFunctionalityForAllViews.smoke.js +155 -0
  160. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +166 -0
  161. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/layoutSection.js +360 -0
  162. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/numberLineSection.js +80 -0
  163. package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/previewContentsForAllViews.smoke.js +111 -0
  164. package/cypress/e2e/ILC/Protractor/protractorPreviewContents.smoke.js +1 -1
  165. package/cypress/e2e/ILC/ReadingRuler/readingRulerEditTabBasicsSection.js +49 -1
  166. package/cypress/e2e/ILC/ShortTextResponseNew/studentViewSettings.js +1 -1
  167. package/cypress/e2e/ILC/SingleSelectionGridNew/studentViewSettings.js +1 -1
  168. package/cypress/e2e/ILC/TextEntryMath/responseEvaluationMethodsAndCustomSettings.js +2 -2
  169. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingAlternatePointsMoreThanCorrectPoints.js +0 -1
  170. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +0 -1
  171. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsMoreThanAlternatePoints.js +0 -1
  172. package/cypress/e2e/ILC/TextSelection/Scoring/basicScoringForAllTextSelectionTypes.smoke.js +0 -1
  173. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +125 -0
  174. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +0 -1
  175. package/cypress/e2e/ILC/TextSelection/checkAnswerFunctionalityForAllViews.smoke.js +2 -2
  176. package/cypress/e2e/ILC/TextSelection/editTabScoringSection.js +5 -4
  177. package/cypress/e2e/ILC/TextSelection/headerSection.js +73 -0
  178. package/cypress/e2e/ILC/TextSelection/previewContentsForAllViews.smoke.js +6 -7
  179. package/cypress/e2e/ILC/TextSelection/questionInstructionsAndQuestion.js +179 -0
  180. package/cypress/e2e/ILC/TextSelection/specifyCorrectAnswerSection.js +89 -0
  181. package/cypress/e2e/ILC/TextSelection/studentViewSettings.js +436 -0
  182. package/cypress/e2e/ILC/TextSelection/styleAndLayoutCustomizationAccordion.js +277 -0
  183. package/cypress/e2e/ILC/TextSelection/textSelectionModesInPreviewTab.js +222 -0
  184. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyCorrectAnswerSection.js +260 -0
  185. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyPossibleOptionsSection.js +380 -0
  186. package/cypress/e2e/ILC/ToolSettings/toolSettingsContent.js +5 -5
  187. package/cypress/e2e/ILC/ToolSettings/toolSettingsPreviewContents.smoke.js +3 -3
  188. package/cypress/e2e/ILC/VideoResponseNew/additionalSettingsBasic.js +77 -0
  189. package/cypress/e2e/ILC/VideoResponseNew/customizePlaybackControls.js +313 -0
  190. package/cypress/e2e/ILC/VideoResponseNew/editAndPreviewTabScoringSection.js +99 -0
  191. package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +171 -0
  192. package/cypress/e2e/ILC/VideoResponseNew/gradingViewAndCorrectAnswerViewContents.smoke.js +179 -0
  193. package/cypress/e2e/ILC/VideoResponseNew/headerSection.js +79 -0
  194. package/cypress/e2e/ILC/VideoResponseNew/previewContentsForAllViews.smoke.js +201 -0
  195. package/cypress/e2e/ILC/VideoResponseNew/standardRecorderStyle.js +567 -0
  196. package/cypress/e2e/ILC/VideoResponseNew/studentViewSettings.js +194 -0
  197. package/cypress/fixtures/constants.js +1 -1
  198. package/cypress/fixtures/drawingToolbarOptionsAdditionalOptionsAndSpecialAndMathCharacters.js +1 -1
  199. package/cypress/fixtures/equationEditorCategoriesAndSymbols .js +20 -20
  200. package/cypress/fixtures/theme/ilc.json +22 -18
  201. package/cypress/pages/audioPlayerPage.js +668 -446
  202. package/cypress/pages/audioResponsePage.js +8 -80
  203. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  204. package/cypress/pages/chartsBarPage.js +231 -0
  205. package/cypress/pages/chartsDotPlotPage.js +8 -0
  206. package/cypress/pages/chartsLinePage.js +42 -0
  207. package/cypress/pages/components/allowTeachersToDownloadStudentResponseComponent.js +58 -0
  208. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +13 -23
  209. package/cypress/pages/components/autoScoredStudentViewSettings.js +6 -6
  210. package/cypress/pages/components/barAndLineChartComponent.js +120 -0
  211. package/cypress/pages/components/chartsCommonComponent.js +105 -0
  212. package/cypress/pages/components/commonComponents.js +1 -0
  213. package/cypress/pages/components/draggableOptionContainer.js +2 -1
  214. package/cypress/pages/components/equationEditorFlyout.js +3 -2
  215. package/cypress/pages/components/essayResponseCommonComponents.js +8 -2
  216. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +1 -0
  217. package/cypress/pages/components/imageCanvasComponent.js +2 -1
  218. package/cypress/pages/components/index.js +7 -0
  219. package/cypress/pages/components/layoutSectionComponent.js +1156 -0
  220. package/cypress/pages/components/limitNumberOfRetakeComponent.js +90 -0
  221. package/cypress/pages/components/numberLineCommonComponent.js +685 -0
  222. package/cypress/pages/components/optionsWrapperComponent.js +13 -2
  223. package/cypress/pages/components/playbackControlsBaseComponent.js +20 -13
  224. package/cypress/pages/components/questionInstructionsComponent.js +3 -19
  225. package/cypress/pages/components/styleAndLayoutCustomizationAccordionComponent.js +46 -0
  226. package/cypress/pages/components/toolSettingsComponent.js +6 -0
  227. package/cypress/pages/contentBlocksPage.js +18 -2
  228. package/cypress/pages/createItemPage.js +75 -8
  229. package/cypress/pages/dialogBoxBase.js +2 -2
  230. package/cypress/pages/drawingResponsePage.js +24 -4
  231. package/cypress/pages/feedbackScalePage.js +3 -0
  232. package/cypress/pages/graphingPage.js +19 -1
  233. package/cypress/pages/gridFillPage.js +47 -59
  234. package/cypress/pages/index.js +5 -1
  235. package/cypress/pages/itemPreviewSettingsPage.js +4 -0
  236. package/cypress/pages/listOrderingPage.js +561 -555
  237. package/cypress/pages/matchingPage.js +1 -1
  238. package/cypress/pages/multipleSelectionPage.js +23 -1
  239. package/cypress/pages/numberLineLabelPage.js +1086 -0
  240. package/cypress/pages/numberLinePage.js +696 -78
  241. package/cypress/pages/rulerPage.js +6 -2
  242. package/cypress/pages/textSelectionPage.js +461 -23
  243. package/cypress/pages/videoResponsePage.js +393 -81
  244. package/package.json +1 -1
@@ -1,624 +1,846 @@
1
- import constants from "../fixtures/constants";
2
1
  import utilities from "../support/helpers/utilities";
2
+ import { commonComponents, createQuestionBasePage, playbackControlsBaseComponent } from "./components";
3
3
  import { dialogBoxBase } from "./dialogBoxBase";
4
- import { selectQuestionResourceToolPage } from "./selectQuestionResourceToolPage";
5
- import { createQuestionBasePage, commonComponents, ckEditorToolbar, equationEditorFlyout, playbackControlsBaseComponent } from "./components"
6
4
 
7
5
  const selectors = {
8
- ...commonComponents,
9
- ...ckEditorToolbar,
10
6
  ...playbackControlsBaseComponent,
11
- addUrlLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(0),
12
- addUrlRadioButton: () => cy.get('.ngie-radio-btn input').eq(0),
13
- addAudioFileLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(1),
14
- addAudioFileRadioButton: () => cy.get('.ngie-radio-btn input').eq(1),
15
- sourceUrlLabel: () => cy.get('.inline-text-property-label').eq(0),
7
+ ...commonComponents,
8
+ ...dialogBoxBase,
9
+ uploadAudioFileLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(0),
10
+ uploadAudioFileRadioButton: () => cy.get('.ngie-radio-btn input').eq(0),
11
+ addAudioURLLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(1),
12
+ addAudioURLRadioButton: () => cy.get('.ngie-radio-btn input').eq(1),
13
+ uploadAudioFileUploadLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(0),
14
+ uploadAudioFileNameLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(1),
15
+ deleteAudioFileButton: () => cy.get('[aria-label*="Delete audio file]'),
16
+ sourceUrlLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(0),
16
17
  sourceUrlInputField: () => cy.get('input[aria-label="Source URL"]'),
17
- noFileChosenLabel: () => cy.get('[aria-label="No file chosen"]'),
18
- uploadedFileNameLabel: () => cy.get('.selected-file'),
19
- uploadLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(0),
20
- fileNameLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(1),
21
- chooseFileButton: () => cy.get('.choose-file-button'),
22
- fileUploadProgressBar: () => cy.get('[class*="AudioPlayerstyles__ProgressBar-"]'),
18
+ uploadAudioChooseFileButton: () => cy.get('.choose-file-upload-button'),
19
+ uploadAudioNoFileChosenLabel: () => cy.get('[aria-label="No file chosen"]').eq(0),
20
+ uploadedFileNameLabel: () => cy.get('.selected-file').eq(0),
21
+ audioFileUploadProgressBar: () => cy.get('[class*="AudioPlayerstyles__ProgressBar-"]').eq(0),
23
22
  inputTypeFile: () => cy.get('input[type="file"]'),
24
- playerTypeLabel: () => cy.get('.player-type-dropdown-label'),
25
- playerTypeDropdown: () => cy.get('#Player-type-select'),
26
- playbackLimitLabel: () => cy.get('.playback-limit-wrapper [class*="Label"]'),
27
- playbackLimitInputField: () => cy.get('.playback-limit-wrapper input'),
28
- titleLabel: () => cy.get('.inline-text-property-label').last(),
29
- titleInputField: () => cy.get('input[aria-label="Title"]'),
30
- descriptionLabel: () => cy.get('.additional-settings-label').eq(0),
31
- descriptionInputField: () => cy.get('[role="textbox"][title="Description"]'),
32
- transcriptLabel: () => cy.get('.additional-settings-label').eq(1),
23
+ audioPlayerStyleLabel: () => cy.get('.player-style-label'),
24
+ standardStyleToggleButton: () => cy.get('[data-ngie-testid="standard-toggle-button"]'),
25
+ barStyleToggleButton: () => cy.get('[data-ngie-testid="bar-toggle-button"]'),
26
+ compactStyleToggleButton: () => cy.get('[data-ngie-testid="compact-toggle-button"]'),
27
+ standardStyleToggleButtonLabel: () => cy.get('[data-ngie-testid="standard-toggle-button"] .ngie-toggle-button-label'),
28
+ barStyleToggleButtonLabel: () => cy.get('[data-ngie-testid="bar-toggle-button"] .ngie-toggle-button-label'),
29
+ compactStyleToggleButtonLabel: () => cy.get('[data-ngie-testid="compact-toggle-button"] .ngie-toggle-button-label'),
30
+ compactPlayerOptionsLabel: () => cy.get('.options-label'),
31
+ defaultPlayerOptionButton: () => cy.get('[data-ngie-testid="default-toggle-button"]'),
32
+ textPlayerOptionButton: () => cy.get('[data-ngie-testid="text-toggle-button"]'),
33
+ imagePlayerOptionButton: () => cy.get('[data-ngie-testid="image-toggle-button"]'),
34
+ iconPlayerOptionButton: () => cy.get('[data-ngie-testid="icon-toggle-button"]'),
35
+ customizePlayerLayoutSettingsAccordion: () => cy.get('.ngie-accordion-summary'),
36
+ customizePlayerLayoutSettingsToggleButtons: () => cy.get('.audio-player-buttons-section button'),
37
+ customizePlayerLayoutPauseButton: () => cy.get('[data-ngie-testid="pause-toggle-button"]'),
38
+ customizePlayerLayoutSeekButton: () => cy.get('[data-ngie-testid="seek-toggle-button"]'),
39
+ customizePlayerLayoutPlaybackSpeedButton: () => cy.get('[data-ngie-testid="playbackspeed-toggle-button"]'),
40
+ customizePlayerLayoutAddPinButton: () => cy.get('[data-ngie-testid="addpin-toggle-button"]'),
41
+ customizePlayerLayoutForwardBackwardButton: () => cy.get('[data-ngie-testid="forwardbackward-toggle-button"]'),
42
+ customizePlayerLayoutVolumeButton: () => cy.get('[data-ngie-testid="volumecontrol-toggle-button"]'),
43
+ customizePlayerLayoutTimerButton: () => cy.get('[data-ngie-testid="timer-toggle-button"]'),
44
+ customizePlayerLayoutProgressIndicatorButton: () => cy.get('[data-ngie-testid="progressbar-toggle-button"]'),
45
+ customizePlayerLayoutToggleButtonLabel: () => cy.get('[class*="ToggleButtonMUI5style__ButtonLabelWrapper"]'),
46
+ uncheckAllButton: () => cy.get('[class*="AudioPlayerstyles__UncheckButton"]'),
47
+ audioDescriptionInputField: () => cy.get('.description-wrapper [role="textbox"]'),
48
+ uploadTranscriptFileLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(2),
49
+ uploadTranscriptFileRadioButton: () => cy.get('.ngie-radio-btn input').eq(2),
50
+ typeInTranscriptLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(3),
51
+ typeInTranscriptRadioButton: () => cy.get('.ngie-radio-btn input').eq(3),
33
52
  transcriptInputField: () => cy.get('[role="textbox"][title="Transcript"]'),
34
- customizeUIControlAccordion: () => cy.get('.ngie-accordion-summary[role="button"]').eq(0),
35
- advancedPlayerSettingsAccordion: () => cy.get('.ngie-accordion-summary[role="button"]').eq(1),
36
- customizeControlPlayButton: () => cy.get('[data-ngie-testid="play-toggle-button"]'),
37
- customizeControlButtonLabel: () => cy.get('[data-ngie-testid="play-toggle-button"]').find('.ngie-toggle-button-label'),
38
- customizeControlPauseButton: () => cy.get('[data-ngie-testid="pause-toggle-button"]'),
39
- customizeControlSeekButton: () => cy.get('[data-ngie-testid="seek-toggle-button"]'),
40
- advancedPlayerButtonLabel: () => cy.get('[data-ngie-testid="timer-toggle-button"]').find('.ngie-toggle-button-label'),
41
- advancedPlayerTimerButton: () => cy.get('[data-ngie-testid="timer-toggle-button"]'),
42
- advancedPlayerProgressBarButton: () => cy.get('[data-ngie-testid="progress-bar-toggle-button"]'),
43
- advancedPlayerVolumeControlButton: () => cy.get('[data-ngie-testid="volume-control-toggle-button"]'),
44
53
  allowStudentsToDownloadAudioLabel: () => cy.get('[data-ngie-testid="allow-students-to-download-the-audio-checkbox"] .MuiFormControlLabel-label'),
45
54
  allowStudentsToDownloadAudioCheckbox: () => cy.get('[data-ngie-testid="allow-students-to-download-the-audio-checkbox"] input'),
46
- selectedButtonIcon: () => cy.get('.ngie-toggle-button-tick-icon'),
47
- accordionChevronIcon: () => cy.get('[class*="expandIcon"]'),
48
- accordionButtonLabel: () => cy.get('.customized_button_label'),
49
- audioDownloadButton: () => cy.get('.audio-download-icon-wr'),
50
- playbackLimitHelpText: () => cy.get('.playback-limit-remaining'),
51
- playbackElapsedTime: () => cy.get('.audio-player-current-time'),
52
- playbackTotalTime: () => cy.get('.audio-player-duration'),
55
+ limitPlayAttemptsLabel: () => cy.get('[data-ngie-testid="limit-play-attempts-checkbox"] .MuiFormControlLabel-label'),
56
+ limitPlayAttemptsCheckbox: () => cy.get('[data-ngie-testid="limit-play-attempts-checkbox"] input'),
57
+ playAttemptsLimitLabel: () => cy.get('.playback-limit-wrapper [class*="Label"]'),
58
+ playAttemptsLimitInputField: () => cy.get('.playback-limit-wrapper input'),
59
+ studentViewSettingsLabel: () => cy.get('[class*="AudioPlayerstyles__TranscriptLabelWrapper"]').eq(0),
60
+ deleteTranscriptButton: () => cy.get('[aria-label*="Delete transcript]'),
61
+
62
+ //Preview tab
63
+ backwardButton: () => cy.get('.forward-backward-buttons-wrapper [aria-label*="Backward"]'),
64
+ forwardButton: () => cy.get('.forward-backward-buttons-wrapper [aria-label*="Forward"]'),
65
+ playbackTime: () => cy.get('.audio-player-current-time'),
66
+ playbackElapsedTime: () => cy.get('.audio-player-current-time').eq(0),
67
+ playbackTotalTime: () => cy.get('.audio-player-duration').eq(0),
68
+ addPinButton: () => cy.get('.audio-add-pin-wr button'),
53
69
  audioFileSrc: () => cy.get('.audio-player-toolbar audio'),
54
- titlePreviewTab: () => cy.get('.audio-resource-title'),
55
70
  descriptionPreviewTab: () => cy.get('.audio-resource-preview-wrapper .question-text-wrapper'),
56
71
  transcriptTitlePreviewTab: () => cy.get('.transcript-title'),
57
72
  transcriptPrintButton: () => cy.get('button[aria-label="Print preview"]'),
58
73
  transcriptModalCloseButton: () => cy.get('button[aria-label="Close"]'),
59
- transcriptContentPreviewTab: () => cy.get('[class*="Transcriptstyles__TranscriptContent"]'),
60
- transcriptButton: () => cy.get('button[aria-label="Transcript"]'),
74
+ transcriptContentPreviewTab: () => cy.get('.transcript-content'),
75
+ transcriptButton: () => cy.get('button[aria-label="Show transcript"]'),
61
76
  transcriptModal: () => cy.get('[class*="Transcriptstyles__TranscriptWrapper"]'),
77
+ standardPreviewPlayerWrapper: () => cy.get('.standard-audio-resource-preview'),
78
+ audioPlayerToolbar: () => cy.get('.audio-player-toolbar'),
79
+ compactPlayerPlayButton: () => cy.get(' button'),
80
+ playButton: () => cy.get('.audio-player-not-visible button'),
81
+ stopButton: () => cy.get('.audio-player-visible button'),
62
82
  audioDownloadButton: () => cy.get('.audio-download-icon-wr'),
63
83
  playbackLimitHelpText: () => cy.get('.playback-limit-remaining'),
64
- playbackPlayer: () => cy.get('.audio-player-toolbar')
84
+ pinsPanel: () => cy.get('.add-pin-wrapper'),
85
+ pinsTitle: () => cy.get('[class*="AddPinstyles__AddPinHeading-"]'),
86
+ pinsPanelCloseButton: () => cy.get('.close-button'),
87
+ pinsPanelAddPinButton: () => cy.get('.add-pin-button'),
88
+ noPinsAddedHelpText: () => cy.get('[class*="AddPinstyles__TextWrapper"]'),
89
+ pinsPanelTimeLabel: () => cy.get('[class*="AddPinstyles__TimeTextWrapper"]'),
90
+ pinsPanelTimeInputFieldWrapper: () => cy.get('[class*="TimeInputstyles__InputWrapper"]'),
91
+ pinsPanelTimeInputFieldMinutes: () => cy.get('[class*="TimeInputstyles__InputWrapper"] [type="number"]').eq(0),
92
+ pinsPanelTimeInputFieldSeconds: () => cy.get('[class*="TimeInputstyles__InputWrapper"] [type="number"]').eq(1),
93
+ addPinSectionCancelButton: () => cy.get('.cancel-add-pin-button'),
94
+ addPinSectionSaveButton: () => cy.get('.save-button'),
95
+ pinsPanelAddedPinDeleteButton: () => cy.get('[aria-label="Delete pin"]'),
96
+ progressBarPin: (pinTimeStamp = null) => {
97
+ if (pinTimeStamp) {
98
+ return cy.get(`[class*="ProgressBarstyle__Bookmark"][aria-label="${pinTimeStamp} pin"]`)
99
+ } else {
100
+ return cy.get('[class*="ProgressBarstyle__Bookmark"]')
101
+ }
102
+ },
103
+ pinsPanelAddedPinWrapper: () => cy.get('[class*="AddPinstyles__BookMark-"]'),
104
+ pinsPanelAddedPinTimeStamp: () => cy.get('[class*="AddPinstyles__BookMarkTime"]'),
105
+ addPinContainer: () => cy.get('[class*="AddPinstyles__AddPinContainer"]')
65
106
  }
66
107
 
67
108
  const steps = {
68
- ...createQuestionBasePage.steps,
69
- ...ckEditorToolbar.steps,
70
- ...equationEditorFlyout.steps,
71
- ...commonComponents.steps,
72
109
  ...playbackControlsBaseComponent.steps,
73
- verifyAddUrlCheckedState: () => {
74
- audioPlayerPage.addUrlRadioButton()
75
- .should('be.checked');
110
+ ...createQuestionBasePage.steps,
111
+ ...dialogBoxBase.steps,
112
+ /**
113
+ * Uploads a file to the audio player by attaching the file located at the specified filePath.
114
+ * @param {string} filePath - The file path to the file to be uploaded.
115
+ * @returns {void}
116
+ */
117
+ uploadFile: (filePath) => {
118
+ audioPlayerPage.inputTypeFile()
119
+ .attachFile(filePath);
120
+ utilities.verifyElementVisibilityState(audioPlayerPage.audioFileUploadProgressBar(), 'hidden');
76
121
  },
77
122
 
78
- verifyAddUrlUncheckedState: () => {
79
- audioPlayerPage.addUrlRadioButton()
80
- .should('not.be.checked');
123
+ /**
124
+ * Uploads a file to the audio player by attaching the file located at the specified filePath.
125
+ * @param {string} filePath - The file path to the file to be uploaded.
126
+ * @returns {void}
127
+ */
128
+ attachFile: (filePath) => {
129
+ audioPlayerPage.inputTypeFile()
130
+ .attachFile(filePath);
81
131
  },
82
132
 
83
- clickOnAddUrlRadioButton: () => {
84
- audioPlayerPage.addUrlRadioButton()
85
- .click();
133
+ addInputToAudioDescriptionInputField: (text) => {
134
+ audioPlayerPage.audioDescriptionInputField()
135
+ .type(text)
136
+ .should('have.text', text)
137
+ .blur();
138
+ },
139
+
140
+ selectTypeInTranscriptRadioButton: () => {
141
+ audioPlayerPage.typeInTranscriptRadioButton()
142
+ .click()
143
+ .should('be.checked');
144
+ },
145
+
146
+ enterTextInTranscriptInputField: (text) => {
147
+ audioPlayerPage.transcriptInputField()
148
+ .type(text)
149
+ .should('have.text', text)
150
+ .blur();
86
151
  },
87
152
 
88
- verifyAddAudioFileCheckedState: () => {
89
- audioPlayerPage.addAudioFileRadioButton()
153
+ verifyUploadAudioFileRadioButtonIsSelected: () => {
154
+ audioPlayerPage.uploadAudioFileRadioButton()
90
155
  .should('be.checked');
91
156
  },
92
157
 
93
- verifyAddAudioFileUncheckedState: () => {
94
- audioPlayerPage.addAudioFileRadioButton()
158
+ verifyUploadAudioFileRadioButtonIsNotSelected: () => {
159
+ audioPlayerPage.uploadAudioFileRadioButton()
95
160
  .should('not.be.checked');
96
161
  },
97
162
 
98
- clickOnAddAudioFileRadioButton: () => {
99
- audioPlayerPage.addAudioFileRadioButton()
100
- .click();
163
+ verifyAddAudioURLRadioButtonIsNotSelected: () => {
164
+ audioPlayerPage.addAudioURLRadioButton()
165
+ .should('not.be.checked');
101
166
  },
102
167
 
103
- focusInAndFocusOutOfSourceURLInputField: () => {
104
- audioPlayerPage.sourceUrlInputField()
168
+ selectUploadAudioFileRadioButton: () => {
169
+ audioPlayerPage.uploadAudioFileRadioButton()
105
170
  .click()
106
- .blur();
171
+ .should('be.checked');
107
172
  },
108
173
 
109
- /**
110
- * Enters text into the source URL input field on the audio player page.
111
- * @param {string} text - The text to be entered into the source URL input field.
112
- * @returns {void}
113
- */
114
- enterTextInSourceURLInputField: (text) => {
115
- audioPlayerPage.sourceUrlInputField()
116
- .type(text, { delay: 0 })
117
- .blur();
174
+ selectAddAudioURLRadioButton: () => {
175
+ audioPlayerPage.addAudioURLRadioButton()
176
+ .click()
177
+ .should('be.checked');
118
178
  },
119
179
 
120
- clearTextInSourceURLInputField: () => {
180
+ focusInAndFocusOutOfSourceURLInputField: () => {
121
181
  audioPlayerPage.sourceUrlInputField()
122
- .clear();
182
+ .click()
183
+ .blur();
123
184
  },
124
185
 
125
186
  /**
126
- * Uploads a file to the audio player by attaching the file located at the specified filePath.
127
- * @param {string} filePath - The file path to the file to be uploaded.
128
- * @returns {void}
187
+ * @description Verify audio player style toggle button is selected
188
+ * @param {string} toggleButton Toggle button label
129
189
  */
130
- uploadFile: (filePath) => {
131
- audioPlayerPage.inputTypeFile()
132
- .attachFile(filePath);
133
- utilities.verifyElementVisibilityState(audioPlayerPage.fileUploadProgressBar(), 'hidden');
190
+ verifyAudioPlayerStyleToggleButtonIsSelected: (toggleButton) => {
191
+ switch (toggleButton) {
192
+ case 'Standard':
193
+ audioPlayerPage.standardStyleToggleButton()
194
+ .should('have.attr', 'aria-pressed', 'true');
195
+ break;
196
+ case 'Bar':
197
+ audioPlayerPage.barStyleToggleButton()
198
+ .should('have.attr', 'aria-pressed', 'true');
199
+ break;
200
+ case 'Compact':
201
+ audioPlayerPage.compactStyleToggleButton()
202
+ .should('have.attr', 'aria-pressed', 'true');
203
+ break;
204
+ default:
205
+ throw new Error('Invalid audio player style');
206
+ }
134
207
  },
135
208
 
136
- verifyPlayerTypeDropdownDisabledState: () => {
137
- audioPlayerPage.playerTypeDropdown()
138
- .should('have.class', 'Mui-disabled');
209
+ /**
210
+ * @description Verify audio player style toggle button is not selected
211
+ * @param {string} toggleButton Toggle button label
212
+ */
213
+ verifyAudioPlayerStyleToggleButtonIsNotSelected: (toggleButton) => {
214
+ switch (toggleButton) {
215
+ case 'Standard':
216
+ audioPlayerPage.standardStyleToggleButton()
217
+ .should('have.attr', 'aria-pressed', 'false');
218
+ break;
219
+ case 'Bar':
220
+ audioPlayerPage.barStyleToggleButton()
221
+ .should('have.attr', 'aria-pressed', 'false');
222
+ break;
223
+ case 'Compact':
224
+ audioPlayerPage.compactStyleToggleButton()
225
+ .should('have.attr', 'aria-pressed', 'false');
226
+ break;
227
+ default:
228
+ throw new Error('Invalid audio player style');
229
+ }
139
230
  },
140
231
 
141
232
  /**
142
- * Sets the playback limit value in the audio player's input field.
143
- * @param {string|number} value - The value to set as the playback limit.
144
- * @returns {void}
233
+ * @description Select audio player style toggle button
234
+ * @param {string} toggleButton Toggle button label
145
235
  */
146
- setPlaybackLimit: (value) => {
147
- audioPlayerPage.playbackLimitInputField()
148
- .clear()
149
- .type(value)
236
+ selectAudioPlayerStyleToggleButton: (toggleButton) => {
237
+ switch (toggleButton) {
238
+ case 'Standard':
239
+ audioPlayerPage.standardStyleToggleButton()
240
+ .click()
241
+ .should('have.attr', 'aria-pressed', 'true');
242
+ break;
243
+ case 'Bar':
244
+ audioPlayerPage.barStyleToggleButton()
245
+ .click()
246
+ .should('have.attr', 'aria-pressed', 'true');
247
+ break;
248
+ case 'Compact':
249
+ audioPlayerPage.compactStyleToggleButton()
250
+ .click()
251
+ .should('have.attr', 'aria-pressed', 'true');
252
+ break;
253
+ default:
254
+ throw new Error('Invalid audio player style');
255
+ }
150
256
  },
151
257
 
152
258
  /**
153
- * Verifies that the playback limit input field in the audio player has the expected value.
154
- * @param {string|number} value - The expected value to be verified.
155
- * @returns {void}
259
+ * @description Verify compact player option button is selected
260
+ * @param {string} button button label
156
261
  */
157
- verifyPlaybackLimitInputFieldValue: (value) => {
158
- audioPlayerPage.playbackLimitInputField()
159
- .should('have.attr', 'value', value);
262
+ verifyCompactPlayerOptionButtonIsSelected: (button) => {
263
+ switch (button) {
264
+ case 'Default':
265
+ audioPlayerPage.defaultPlayerOptionButton()
266
+ .should('have.attr', 'aria-pressed', 'true');
267
+ break;
268
+ case 'Text':
269
+ audioPlayerPage.textPlayerOptionButton()
270
+ .should('have.attr', 'aria-pressed', 'true');
271
+ break;
272
+ case 'Image':
273
+ audioPlayerPage.imagePlayerOptionButton()
274
+ .should('have.attr', 'aria-pressed', 'true');
275
+ break;
276
+ case 'Icon':
277
+ audioPlayerPage.iconPlayerOptionButton()
278
+ .should('have.attr', 'aria-pressed', 'true');
279
+ break;
280
+ default:
281
+ throw new Error('Invalid compact player option');
282
+ }
160
283
  },
161
284
 
162
- focusInAndFocusOutOfPlaybackLimitInputField: () => {
163
- audioPlayerPage.playbackLimitInputField()
164
- .click()
165
- .blur();
285
+ /**
286
+ * @description Verify compact player option button is not selected
287
+ * @param {string} button button label
288
+ */
289
+ verifyCompactPlayerOptionButtonIsNotSelected: (button) => {
290
+ switch (button) {
291
+ case 'Default':
292
+ audioPlayerPage.defaultPlayerOptionButton()
293
+ .should('have.attr', 'aria-pressed', 'false');
294
+ break;
295
+ case 'Text':
296
+ audioPlayerPage.textPlayerOptionButton()
297
+ .should('have.attr', 'aria-pressed', 'false');
298
+ break;
299
+ case 'Image':
300
+ audioPlayerPage.imagePlayerOptionButton()
301
+ .should('have.attr', 'aria-pressed', 'false');
302
+ break;
303
+ case 'Icon':
304
+ audioPlayerPage.iconPlayerOptionButton()
305
+ .should('have.attr', 'aria-pressed', 'false');
306
+ break;
307
+ default:
308
+ throw new Error('Invalid compact player option');
309
+ }
166
310
  },
167
311
 
168
312
  /**
169
- * Enters text into the title input field on the audio player page.
170
- * @param {string} text - The text to be entered into the title input field.
171
- * @returns {void}
313
+ * @description Verify compact player option button is selected
314
+ * @param {string} toggleButton button label
172
315
  */
173
- enterTextInTitleInputField: (text) => {
174
- audioPlayerPage.titleInputField()
175
- .type(text, { delay: 0 });
316
+ selectCompactPlayerOptionButton: (toggleButton) => {
317
+ switch (button) {
318
+ case 'Default':
319
+ audioPlayerPage.defaultPlayerOptionButton()
320
+ .click()
321
+ .should('have.attr', 'aria-pressed', 'true');
322
+ break;
323
+ case 'Text':
324
+ audioPlayerPage.textPlayerOptionButton()
325
+ .click()
326
+ .should('have.attr', 'aria-pressed', 'true');
327
+ break;
328
+ case 'Image':
329
+ audioPlayerPage.imagePlayerOptionButton()
330
+ .click()
331
+ .should('have.attr', 'aria-pressed', 'true');
332
+ break;
333
+ case 'Icon':
334
+ audioPlayerPage.iconPlayerOptionButton()
335
+ .click()
336
+ .should('have.attr', 'aria-pressed', 'true');
337
+ break;
338
+ default:
339
+ throw new Error('Invalid compact player option');
340
+ }
176
341
  },
177
342
 
178
343
  /**
179
- * Verifies that the title input field in the audio player has the expected text value.
180
- * @param {string} value - The expected text value to be verified.
344
+ * Enters text into the source URL input field on the audio player page.
345
+ * @param {string} text - The text to be entered into the source URL input field.
181
346
  * @returns {void}
182
347
  */
183
- verifyTextInTitleInputField: (value) => {
184
- audioPlayerPage.titleInputField()
185
- .should('have.attr', 'value', value)
186
- },
187
-
188
- focusInDescriptionInputField: () => {
189
- audioPlayerPage.descriptionInputField()
190
- .click();
191
- },
192
-
193
- enterTextInDescriptionInputField: (text) => {
194
- audioPlayerPage.descriptionInputField()
195
- .type(text)
348
+ enterTextInSourceURLInputField: (text) => {
349
+ audioPlayerPage.sourceUrlInputField()
350
+ .type(text, { delay: 0 })
196
351
  .blur();
197
352
  },
198
353
 
199
- clearDescriptionInputField: () => {
200
- audioPlayerPage.descriptionInputField()
354
+ clearTextInSourceURLInputField: () => {
355
+ audioPlayerPage.sourceUrlInputField()
201
356
  .clear();
202
357
  },
203
358
 
204
- verifyImageAndAltTextInDescriptionInputField: () => {
205
- audioPlayerPage.descriptionInputField()
206
- .find('img')
207
- .should('have.attr', 'src', constants.foxImageLink)
208
- .and('have.attr', 'alt', constants.foxImageAltText);
209
- },
210
-
211
- verifyImageAndAltTextInDescriptionPreviewTab: () => {
212
- audioPlayerPage.descriptionPreviewTab()
213
- .find('img')
214
- .should('have.attr', 'src', constants.foxImageLink)
215
- .and('have.attr', 'alt', constants.foxImageAltText);
359
+ verifyCustomizePlayerLayoutSettingsAccordionCollapsedState: () => {
360
+ audioPlayerPage.customizePlayerLayoutSettingsAccordion()
361
+ .should('have.attr', 'aria-expanded', 'false');
216
362
  },
217
363
 
218
- verifyEquationInDescriptionInputField: () => {
219
- audioPlayerPage.descriptionInputField()
220
- .find('[data-widget="ngie_equation"]')
221
- .should('have.attr', 'aria-label', constants.CKEditorInputFieldEnteredEquationAriaLabel)
222
- .contains(constants.CKEditorInputFieldEnteredEquationText);
364
+ expandCustomizePlayerLayoutSettingsAccordion: () => {
365
+ audioPlayerPage.customizePlayerLayoutSettingsAccordion()
366
+ .click()
367
+ .should('have.attr', 'aria-expanded', 'true');
223
368
  },
224
369
 
225
- verifyEquationInDescriptionPreviewTab: () => {
226
- audioPlayerPage.descriptionPreviewTab()
227
- .find('[role="math"]')
228
- .should('have.attr', 'aria-label', constants.CKEditorInputFieldEnteredEquationAriaLabel)
229
- .contains(constants.CKEditorInputFieldEnteredEquationText);
370
+ collapseCustomizePlayerLayoutSettingsAccordion: () => {
371
+ audioPlayerPage.customizePlayerLayoutSettingsAccordion()
372
+ .click()
373
+ .should('have.attr', 'aria-expanded', 'false');
230
374
  },
231
375
 
232
- verifyLinkInDescriptionInputField: () => {
233
- audioPlayerPage.descriptionInputField()
234
- .find('a')
235
- .should('have.text', 'lorem')
236
- .and('have.attr', 'href', `${Cypress.config().baseUrl}`);
376
+ /**
377
+ * @description Verify player layout setting button is selected
378
+ * @param {string} buttonLabel
379
+ */
380
+ verifyPlayerLayoutSettingButtonIsSelected: (buttonLabel) => {
381
+ switch (buttonLabel) {
382
+ case 'Pause':
383
+ audioPlayerPage.customizePlayerLayoutPauseButton()
384
+ .should('have.attr', 'aria-pressed', 'true');
385
+ break;
386
+ case 'Seek':
387
+ audioPlayerPage.customizePlayerLayoutSeekButton()
388
+ .should('have.attr', 'aria-pressed', 'true');
389
+ break;
390
+ case 'Playback speed':
391
+ audioPlayerPage.customizePlayerLayoutPlaybackSpeedButton()
392
+ .should('have.attr', 'aria-pressed', 'true');
393
+ break;
394
+ case 'Add pin':
395
+ audioPlayerPage.customizePlayerLayoutAddPinButton()
396
+ .should('have.attr', 'aria-pressed', 'true');
397
+ break;
398
+ case 'Forward/ backward':
399
+ audioPlayerPage.customizePlayerLayoutForwardBackwardButton()
400
+ .should('have.attr', 'aria-pressed', 'true');
401
+ break;
402
+ case 'Volume':
403
+ audioPlayerPage.customizePlayerLayoutVolumeButton()
404
+ .should('have.attr', 'aria-pressed', 'true');
405
+ break;
406
+ case 'Timer':
407
+ audioPlayerPage.customizePlayerLayoutTimerButton()
408
+ .should('have.attr', 'aria-pressed', 'true');
409
+ break;
410
+ case 'Progress indicator':
411
+ audioPlayerPage.customizePlayerLayoutProgressIndicatorButton()
412
+ .should('have.attr', 'aria-pressed', 'true');
413
+ break;
414
+ default:
415
+ throw new Error('Invalid player layout setting button');
416
+ }
237
417
  },
238
418
 
239
- verifyLinkInDescriptionPreviewTab: () => {
240
- audioPlayerPage.descriptionPreviewTab()
241
- .find('a')
242
- .should('have.text', 'lorem')
243
- .and('have.attr', 'href', `${Cypress.config().baseUrl}`);
419
+ /**
420
+ * @description Verify player layout setting button is not selected
421
+ * @param {string} buttonLabel
422
+ */
423
+ verifyPlayerLayoutSettingButtonIsNotSelected: (buttonLabel) => {
424
+ switch (buttonLabel) {
425
+ case 'Pause':
426
+ audioPlayerPage.customizePlayerLayoutPauseButton()
427
+ .should('have.attr', 'aria-pressed', 'false');
428
+ break;
429
+ case 'Seek':
430
+ audioPlayerPage.customizePlayerLayoutSeekButton()
431
+ .should('have.attr', 'aria-pressed', 'false');
432
+ break;
433
+ case 'Playback speed':
434
+ audioPlayerPage.customizePlayerLayoutPlaybackSpeedButton()
435
+ .should('have.attr', 'aria-pressed', 'false');
436
+ break;
437
+ case 'Add pin':
438
+ audioPlayerPage.customizePlayerLayoutAddPinButton()
439
+ .should('have.attr', 'aria-pressed', 'false');
440
+ break;
441
+ case 'Forward/ backward':
442
+ audioPlayerPage.customizePlayerLayoutForwardBackwardButton()
443
+ .should('have.attr', 'aria-pressed', 'false');
444
+ break;
445
+ case 'Volume':
446
+ audioPlayerPage.customizePlayerLayoutVolumeButton()
447
+ .should('have.attr', 'aria-pressed', 'false');
448
+ break;
449
+ case 'Timer':
450
+ audioPlayerPage.customizePlayerLayoutTimerButton()
451
+ .should('have.attr', 'aria-pressed', 'false');
452
+ break;
453
+ case 'Progress indicator':
454
+ audioPlayerPage.customizePlayerLayoutProgressIndicatorButton()
455
+ .should('have.attr', 'aria-pressed', 'false');
456
+ break;
457
+ default:
458
+ throw new Error('Invalid player layout setting button');
459
+ }
244
460
  },
245
461
 
246
- verifyBoldTextInDescriptionInputField: () => {
247
- audioPlayerPage.descriptionInputField()
248
- .find('strong')
249
- .should('exist')
250
- .should('have.text', '​​​​​​​This is a bold text in description input field');
462
+ /**
463
+ * @description select a player layout setting button
464
+ * @param {string} buttonLabel
465
+ */
466
+ selectPlayerLayoutSettingButton: (buttonLabel) => {
467
+ switch (buttonLabel) {
468
+ case 'Pause':
469
+ audioPlayerPage.customizePlayerLayoutPauseButton()
470
+ .click()
471
+ .should('have.attr', 'aria-pressed', 'true');
472
+ break;
473
+ case 'Seek':
474
+ audioPlayerPage.customizePlayerLayoutSeekButton()
475
+ .click()
476
+ .should('have.attr', 'aria-pressed', 'true');
477
+ break;
478
+ case 'Playback speed':
479
+ audioPlayerPage.customizePlayerLayoutPlaybackSpeedButton()
480
+ .click()
481
+ .should('have.attr', 'aria-pressed', 'true');
482
+ break;
483
+ case 'Add pin':
484
+ audioPlayerPage.customizePlayerLayoutAddPinButton()
485
+ .click()
486
+ .should('have.attr', 'aria-pressed', 'true');
487
+ break;
488
+ case 'Forward/ backward':
489
+ audioPlayerPage.customizePlayerLayoutForwardBackwardButton()
490
+ .click()
491
+ .should('have.attr', 'aria-pressed', 'true');
492
+ break;
493
+ case 'Volume':
494
+ audioPlayerPage.customizePlayerLayoutVolumeButton()
495
+ .click()
496
+ .should('have.attr', 'aria-pressed', 'true');
497
+ break;
498
+ case 'Timer':
499
+ audioPlayerPage.customizePlayerLayoutTimerButton()
500
+ .click()
501
+ .should('have.attr', 'aria-pressed', 'true');
502
+ break;
503
+ case 'Progress indicator':
504
+ audioPlayerPage.customizePlayerLayoutProgressIndicatorButton()
505
+ .click()
506
+ .should('have.attr', 'aria-pressed', 'true');
507
+ break;
508
+ default:
509
+ throw new Error('Invalid player layout setting button');
510
+ }
251
511
  },
252
512
 
253
- verifyBoldTextInDescriptionPreviewTab: () => {
254
- audioPlayerPage.descriptionPreviewTab()
255
- .find('strong')
256
- .should('exist')
257
- .should('have.text', 'This is a bold text in description');
513
+ /**
514
+ * @description deselect a player layout setting button
515
+ * @param {string} buttonLabel
516
+ */
517
+ deselectPlayerLayoutSettingButton: (buttonLabel) => {
518
+ switch (buttonLabel) {
519
+ case 'Pause':
520
+ audioPlayerPage.customizePlayerLayoutPauseButton()
521
+ .click()
522
+ .should('have.attr', 'aria-pressed', 'false');
523
+ break;
524
+ case 'Seek':
525
+ audioPlayerPage.customizePlayerLayoutSeekButton()
526
+ .click()
527
+ .should('have.attr', 'aria-pressed', 'false');
528
+ break;
529
+ case 'Playback speed':
530
+ audioPlayerPage.customizePlayerLayoutPlaybackSpeedButton()
531
+ .click()
532
+ .should('have.attr', 'aria-pressed', 'false');
533
+ break;
534
+ case 'Add pin':
535
+ audioPlayerPage.customizePlayerLayoutAddPinButton()
536
+ .click()
537
+ .should('have.attr', 'aria-pressed', 'false');
538
+ break;
539
+ case 'Forward/ backward':
540
+ audioPlayerPage.customizePlayerLayoutForwardBackwardButton()
541
+ .click()
542
+ .should('have.attr', 'aria-pressed', 'false');
543
+ break;
544
+ case 'Volume':
545
+ audioPlayerPage.customizePlayerLayoutVolumeButton()
546
+ .click()
547
+ .should('have.attr', 'aria-pressed', 'false');
548
+ break;
549
+ case 'Timer':
550
+ audioPlayerPage.customizePlayerLayoutTimerButton()
551
+ .click()
552
+ .should('have.attr', 'aria-pressed', 'false');
553
+ break;
554
+ case 'Progress indicator':
555
+ audioPlayerPage.customizePlayerLayoutProgressIndicatorButton()
556
+ .click()
557
+ .should('have.attr', 'aria-pressed', 'false');
558
+ break;
559
+ default:
560
+ throw new Error('Invalid player layout setting button');
561
+ }
562
+ },
563
+
564
+ clickOnUncheckAllButton: () => {
565
+ audioPlayerPage.uncheckAllButton()
566
+ .click()
258
567
  },
259
568
 
260
- focusInTranscriptInputField: () => {
261
- audioPlayerPage.transcriptInputField()
569
+ deleteAudioFile: () => {
570
+ audioPlayerPage.deleteAudioFileButton()
262
571
  .click();
263
572
  },
264
573
 
265
- enterTextInTranscriptInputField: (text) => {
266
- audioPlayerPage.transcriptInputField()
267
- .type(text)
268
- .blur();
269
- },
270
-
271
- clearTranscriptInputField: () => {
272
- audioPlayerPage.transcriptInputField()
273
- .clear();
274
- },
275
-
276
- verifyImageAndAltTextInTranscriptInputField: () => {
277
- audioPlayerPage.transcriptInputField()
278
- .find('img')
279
- .should('have.attr', 'src', constants.foxImageLink)
280
- .and('have.attr', 'alt', constants.foxImageAltText);
281
- },
282
-
283
- verifyImageAndAltTextInTranscriptPreviewTab: () => {
284
- audioPlayerPage.transcriptContentPreviewTab()
285
- .find('img')
286
- .should('have.attr', 'src', constants.foxImageLink)
287
- .and('have.attr', 'alt', constants.foxImageAltText);
288
- },
289
-
290
- verifyEquationInTranscriptInputField: () => {
291
- audioPlayerPage.transcriptInputField()
292
- .find('[data-widget="ngie_equation"]')
293
- .should('have.attr', 'aria-label', constants.CKEditorInputFieldEnteredEquationAriaLabel)
294
- .contains(constants.CKEditorInputFieldEnteredEquationText);
295
- },
296
-
297
- verifyEquationInTranscriptPreviewTab: () => {
298
- audioPlayerPage.transcriptContentPreviewTab()
299
- .find('[role="math"]')
300
- .should('have.attr', 'aria-label', constants.CKEditorInputFieldEnteredEquationAriaLabel)
301
- .contains(constants.CKEditorInputFieldEnteredEquationText);
302
- },
303
-
304
- verifyLinkInTranscriptInputField: () => {
305
- audioPlayerPage.transcriptInputField()
306
- .find('a')
307
- .should('have.text', 'lorem')
308
- .and('have.attr', 'href', `${Cypress.config().baseUrl}`);
309
- },
310
-
311
- verifyLinkInTranscriptPreviewTab: () => {
312
- audioPlayerPage.transcriptContentPreviewTab()
313
- .find('a')
314
- .should('have.text', 'lorem')
315
- .and('have.attr', 'href', `${Cypress.config().baseUrl}`);
316
- },
317
-
318
- verifyBoldTextInTranscriptInputField: () => {
319
- audioPlayerPage.transcriptInputField()
320
- .find('strong')
321
- .should('exist')
322
- .should('have.text', '​​​​​​​This is a bold text in transcript input field');
323
- },
324
-
325
- verifyBoldTextInTranscriptPreviewTab: () => {
326
- audioPlayerPage.transcriptContentPreviewTab()
327
- .find('strong')
328
- .should('exist')
329
- .should('have.text', 'This is a bold text in transcript');
574
+ //Preview tab
575
+ waitForPlaybackToBegin: () => {
576
+ steps.waitForAudioFileSrcToLoad();
577
+ audioPlayerPage.playbackElapsedTime()
578
+ .should('have.text', '00:01');
330
579
  },
331
580
 
332
- verifyCustomizeUIControlAccordionChevronIcon: () => {
333
- audioPlayerPage.customizeUIControlAccordion()
334
- .within(() => {
335
- audioPlayerPage.accordionChevronIcon()
336
- .should('be.visible');
337
- });
581
+ waitForAudioFileSrcToLoad: () => {
582
+ audioPlayerPage.audioFileSrc()
583
+ .should('have.attr', 'src')
584
+ .and('not.be.empty');
338
585
  },
339
586
 
340
- verifyAdvancedPlayerAccordionChevronIcon: () => {
341
- audioPlayerPage.advancedPlayerSettingsAccordion()
342
- .within(() => {
343
- audioPlayerPage.accordionChevronIcon()
344
- .should('be.visible');
345
- });
346
- },
347
587
 
348
- verifyCustomizeUIControlAccordionCollapsedState: () => {
349
- audioPlayerPage.customizeUIControlAccordion()
350
- .should('have.attr', 'aria-expanded', 'false');
588
+ /**
589
+ * Verifies the audio playback timer on the audio player.
590
+ * @param {string} elapsedTime - The elapsed time
591
+ * @param {string} totalTime - The total time
592
+ * @returns {void}
593
+ */
594
+ verifyAudioPlaybackTimer: (elapsedTime, totalTime) => {
595
+ audioPlayerPage.playbackElapsedTime()
596
+ .should('have.text', elapsedTime)
597
+ audioPlayerPage.playbackTotalTime()
598
+ .should('have.text', totalTime)
351
599
  },
352
600
 
353
- verifyCustomizeUIControlAccordionExpandedState: () => {
354
- audioPlayerPage.customizeUIControlAccordion()
355
- .should('have.attr', 'aria-expanded', 'true');
601
+ /**
602
+ * Adds a wait to pause test execution for a specified amount of time.
603
+ * @param {number} time - The time, in milliseconds, to pause test execution.
604
+ * @returns {void}
605
+ */
606
+ addWaitToPlayAudio: (time) => {
607
+ cy.wait(time)
356
608
  },
357
609
 
358
- clickOnCustomizeUIControlAccordion: () => {
359
- audioPlayerPage.customizeUIControlAccordion()
610
+ clickOnTranscriptButton: () => {
611
+ audioPlayerPage.transcriptButton()
360
612
  .click();
361
613
  },
362
614
 
363
- verifyAdvancedPlayerSettingsAccordionCollapsedState: () => {
364
- audioPlayerPage.advancedPlayerSettingsAccordion()
365
- .should('have.attr', 'aria-expanded', 'false');
366
- },
367
-
368
- verifyAdvancedPlayerSettingsAccordionExpandedState: () => {
369
- audioPlayerPage.advancedPlayerSettingsAccordion()
370
- .should('have.attr', 'aria-expanded', 'true');
371
- },
372
615
 
373
- clickOnAdvancedPlayerSettingsAccordion: () => {
374
- audioPlayerPage.advancedPlayerSettingsAccordion()
616
+ clickOnBackwardButton: () => {
617
+ audioPlayerPage.backwardButton()
375
618
  .click();
376
619
  },
377
620
 
378
- verifyCustomizeControlPlayButtonSelectedState: () => {
379
- audioPlayerPage.customizeControlPlayButton()
380
- .should('have.class', 'ngie-toggle-button-selected')
381
- .within(() => {
382
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
383
- });
384
- },
385
-
386
- verifyCustomizeControlPauseButtonSelectedState: () => {
387
- audioPlayerPage.customizeControlPauseButton()
388
- .should('have.class', 'ngie-toggle-button-selected')
389
- .within(() => {
390
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
391
- });
621
+ clickOnForwardButton: () => {
622
+ audioPlayerPage.forwardButton()
623
+ .click();
392
624
  },
393
625
 
394
- verifyCustomizeControlSeekButtonSelectedState: () => {
395
- audioPlayerPage.customizeControlSeekButton()
396
- .should('have.class', 'ngie-toggle-button-selected')
397
- .within(() => {
398
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
399
- });
626
+ clickOnPlayButton: () => {
627
+ utilities.verifyElementVisibilityState(audioPlayerPage.playButton(), 'visible'); //Added to counter error occurrence when switching to preview tab and clinking on play button
628
+ audioPlayerPage.playButton()
629
+ .click();
400
630
  },
401
631
 
402
- verifyCustomizeControlPlayButtonDeselectedState: () => {
403
- audioPlayerPage.customizeControlPlayButton()
404
- .should('have.class', 'ngie-toggle-button-not-selected')
405
- .within(() => {
406
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
407
- });
632
+ clickOnStopButton: () => {
633
+ audioPlayerPage.stopButton()
634
+ .click();
408
635
  },
409
636
 
410
- verifyCustomizeControlPauseButtonDeselectedState: () => {
411
- audioPlayerPage.customizeControlPauseButton()
412
- .should('have.class', 'ngie-toggle-button-not-selected')
413
- .within(() => {
414
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
415
- });
637
+ verifyAllowStudentsToDownloadAudioCheckboxNotChecked: () => {
638
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
639
+ .should('not.be.checked');
416
640
  },
417
641
 
418
- verifyCustomizeControlSeekButtonDeselectedState: () => {
419
- audioPlayerPage.customizeControlSeekButton()
420
- .should('have.class', 'ngie-toggle-button-not-selected')
421
- .within(() => {
422
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
423
- });
642
+ checkAllowStudentsToDownloadAudioCheckbox: () => {
643
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
644
+ .click()
645
+ .should('be.checked');
424
646
  },
425
647
 
426
- clickOnCustomizeControlPlayButton: () => {
427
- audioPlayerPage.customizeControlPlayButton()
428
- .click();
648
+ uncheckAllowStudentsToDownloadAudioCheckbox: () => {
649
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
650
+ .click()
651
+ .should('not.be.checked');
429
652
  },
430
653
 
431
- clickOnCustomizeControlPauseButton: () => {
432
- audioPlayerPage.customizeControlPauseButton()
433
- .click();
654
+ verifyLimitPlayAttemptsCheckboxNotChecked: () => {
655
+ audioPlayerPage.limitPlayAttemptsCheckbox()
656
+ .should('not.be.checked');
434
657
  },
435
658
 
436
- clickOnCustomizeControlSeekButton: () => {
437
- audioPlayerPage.customizeControlSeekButton()
438
- .click();
659
+ checkLimitPlayAttemptsCheckboxCheckbox: () => {
660
+ audioPlayerPage.limitPlayAttemptsCheckbox()
661
+ .click()
662
+ .should('be.checked');
439
663
  },
440
664
 
441
- verifyAdvancedPlayerTimerButtonSelectedState: () => {
442
- audioPlayerPage.advancedPlayerTimerButton()
443
- .should('have.class', 'ngie-toggle-button-selected')
444
- .within(() => {
445
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
446
- });
665
+ uncheckLimitPlayAttemptsCheckbox: () => {
666
+ audioPlayerPage.limitPlayAttemptsCheckbox()
667
+ .click()
668
+ .should('not.be.checked');
447
669
  },
448
670
 
449
- verifyAdvancedPlayerProgressBarButtonSelectedState: () => {
450
- audioPlayerPage.advancedPlayerProgressBarButton()
451
- .should('have.class', 'ngie-toggle-button-selected')
452
- .within(() => {
453
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
454
- });
671
+ /**
672
+ * Sets the playback limit value in the audio player's input field.
673
+ * @param {string|number} value - The value to set as the playback limit.
674
+ * @returns {void}
675
+ */
676
+ setPlaybackLimit: (value) => {
677
+ audioPlayerPage.playAttemptsLimitInputField()
678
+ .clear()
679
+ .type(value)
455
680
  },
456
681
 
457
- verifyAdvancedPlayerVolumeControlButtonSelectedState: () => {
458
- audioPlayerPage.advancedPlayerVolumeControlButton()
459
- .should('have.class', 'ngie-toggle-button-selected')
460
- .within(() => {
461
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
462
- });
682
+ /**
683
+ * Verify the playback limit help text in preview tab
684
+ * @param {string|number} value - The value to set as the playback limit.
685
+ * @returns {void}
686
+ */
687
+ verifyPlaybackLimitHelpTextPreviewTab: (value) => {
688
+ utilities.verifyInnerText(audioPlayerPage.playbackLimitHelpText(), `You have ${value} plays remaining.`);
689
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackLimitHelpText(), 'visible');
463
690
  },
464
691
 
465
- verifyAdvancedPlayerTimerButtonDeselectedState: () => {
466
- audioPlayerPage.advancedPlayerTimerButton()
467
- .should('have.class', 'ngie-toggle-button-not-selected')
468
- .within(() => {
469
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
470
- });
692
+ /**
693
+ * Verifies that the playback limit input field in the audio player has the expected value.
694
+ * @param {string|number} value - The expected value to be verified.
695
+ * @returns {void}
696
+ */
697
+ verifyPlaybackLimitInputFieldValue: (value) => {
698
+ audioPlayerPage.playAttemptsLimitInputField()
699
+ .should('have.attr', 'value', value);
471
700
  },
472
701
 
473
- verifyAdvancedPlayerProgressBarButtonDeselectedState: () => {
474
- audioPlayerPage.advancedPlayerProgressBarButton()
475
- .should('have.class', 'ngie-toggle-button-not-selected')
476
- .within(() => {
477
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
478
- });
702
+ focusInAndFocusOutOfPlayAttemptsLimitInputField: () => {
703
+ audioPlayerPage.playAttemptsLimitInputField()
704
+ .click()
705
+ .blur();
479
706
  },
480
707
 
481
- verifyAdvancedPlayerVolumeControlButtonDeselectedState: () => {
482
- audioPlayerPage.advancedPlayerVolumeControlButton()
483
- .should('have.class', 'ngie-toggle-button-not-selected')
484
- .within(() => {
485
- utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
708
+ verifyWindowOpenMethodAfterClickingOnDownloadAudioButton: () => {
709
+ cy.window()
710
+ .then((win) => {
711
+ cy.stub(win, 'open')
712
+ .as('windowOpen')
486
713
  });
714
+ audioPlayerPage.audioDownloadButton()
715
+ .click();
716
+ cy.get('@windowOpen')
717
+ .should('be.calledWith', '');
487
718
  },
488
719
 
489
- clickOnAdvancedPlayerTimerButton: () => {
490
- audioPlayerPage.advancedPlayerTimerButton()
720
+ clickOnAddPinButton: () => {
721
+ audioPlayerPage.addPinButton()
491
722
  .click();
492
723
  },
493
724
 
494
- clickOnAdvancedPlayerProgressBarButton: () => {
495
- audioPlayerPage.advancedPlayerProgressBarButton()
725
+ clickOnPinsPanelAddPinButton: () => {
726
+ audioPlayerPage.pinsPanelAddPinButton()
496
727
  .click();
497
728
  },
498
729
 
499
- clickOnAdvancedPlayerVolumeControlButton: () => {
500
- audioPlayerPage.advancedPlayerVolumeControlButton()
501
- .click();
730
+ /**
731
+ * Add input to time input field in pins panel
732
+ * @param {string} time - The timestamp at which the pin is to be added in the format "minutes/seconds."
733
+ * @example addInputToTimeInputFieldInPinsPanel('00:15')
734
+ * @returns {void}
735
+ */
736
+ addInputToTimeInputFieldInPinsPanel: (time) => {
737
+ const minutesTime = time.split(':')[0];
738
+ const secondsTime = time.split(':')[1];
739
+ for (let i = 0; i < minutesTime.length; i++) {
740
+ let character = minutesTime.charAt(i);
741
+ audioPlayerPage.pinsPanelTimeInputFieldMinutes()
742
+ .click()
743
+ .type(`${character}`);
744
+ }
745
+ for (let i = 0; i < secondsTime.length; i++) {
746
+ let character = secondsTime.charAt(i);
747
+ audioPlayerPage.pinsPanelTimeInputFieldSeconds()
748
+ .click()
749
+ .type(`${character}`);
750
+ }
502
751
  },
503
752
 
504
- verifyAllowStudentsToDownloadAudioCheckboxNotChecked: () => {
505
- audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
506
- .should('not.be.checked');
753
+ /**
754
+ * @description Verify maximum and minimum value of minutes in time input field
755
+ * @param {number} maxValue maximum value of minutes input field
756
+ * @param {number} minValue minimum value of minutes input field
757
+ */
758
+ verifyMaximumAndMinimumValueOfMinutesTimeInputField: (minValue, maxValue) => {
759
+ audioPlayerPage.pinsPanelTimeInputFieldMinutes()
760
+ .should('have.attr', 'min', minValue);
761
+ audioPlayerPage.pinsPanelTimeInputFieldMinutes()
762
+ .should('have.attr', 'max', maxValue);
507
763
  },
508
764
 
509
- verifyAllowStudentsToDownloadAudioCheckboxChecked: () => {
510
- audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
511
- .should('be.checked');
765
+ /**
766
+ * @description Verify maximum and minimum value of seconds in time input field
767
+ * @param {number} maxValue maximum value of minutes seconds field
768
+ * @param {number} minValue minimum value of minutes seconds field
769
+ */
770
+ verifyMaximumAndMinimumValueOfSecondsTimeInputField: (minValue, maxValue) => {
771
+ audioPlayerPage.pinsPanelTimeInputFieldSeconds()
772
+ .should('have.attr', 'min', minValue);
773
+ audioPlayerPage.pinsPanelTimeInputFieldSeconds()
774
+ .should('have.attr', 'max', maxValue);
512
775
  },
513
776
 
514
- checkUncheckAllowStudentsToDownloadAudioCheckbox: () => {
515
- audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
777
+ clickOnAddPinSectionSaveButton: () => {
778
+ audioPlayerPage.addPinSectionSaveButton()
516
779
  .click();
517
780
  },
518
781
 
519
- //Preview tab
520
- waitForPlaybackToBegin: () => {
521
- steps.waitForAudioFileSrcToLoad();
522
- audioPlayerPage.playbackElapsedTime()
523
- .should('have.text', '00:01');
782
+ clickOnAddPinSectionCancelButton: () => {
783
+ audioPlayerPage.addPinSectionCancelButton()
784
+ .click();
524
785
  },
525
786
 
526
787
  /**
527
- * Verifies the audio playback timer on the audio player.
528
- * @param {string} time - The elapsed time and total time in the format "elapsed/total."
529
- * @returns {void}
788
+ * @description Verify added pin time stamp and delete button
789
+ * @param {number} pinIndex index of pin
790
+ * @param {string} pinTimeStamp time of the added time
791
+ * @example verifyAddedPinTimeStampAndDeleteButton(1, '00:30')
530
792
  */
531
- verifyAudioPlaybackTimer: (time) => {
532
- const elapsedTime = time.split('/')[0];
533
- const totalTime = time.split('/')[1];
534
- audioPlayerPage.playbackElapsedTime()
535
- .should('have.text', elapsedTime)
536
- audioPlayerPage.playbackTotalTime()
537
- .should('have.text', `/${totalTime}`)
793
+ verifyAddedPinTimeStampAndDeleteButton: (pinIndex, pinTimeStamp) => {
794
+ audioPlayerPage.pinsPanelAddedPinWrapper()
795
+ .eq(pinIndex)
796
+ .within(() => {
797
+ utilities.verifyInnerText(audioPlayerPage.pinsPanelAddedPinTimeStamp(), pinTimeStamp);
798
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelAddedPinDeleteButton(), 'visible');
799
+ });
538
800
  },
539
801
 
540
802
  /**
541
- * Adds a wait to pause test execution for a specified amount of time.
542
- * @param {number} time - The time, in milliseconds, to pause test execution.
543
- * @returns {void}
803
+ * @description Verify progress bar pin
804
+ * @param {number} pinIndex index of pin
805
+ * @param {string} pinTimeStamp time of the added time
806
+ * @example verifyAddedPinTimeStampAndDeleteButton(1, '00:30')
544
807
  */
545
- addWaitToPlayAudio: (time) => {
546
- cy.wait(time)
808
+ verifyProgressBarPin: (pinIndex, pinTimeStamp) => {
809
+ audioPlayerPage.progressBarPin()
810
+ .eq(pinIndex)
811
+ .should('be.visible')
812
+ .and('have.attr', 'aria-label', `${pinTimeStamp} pin`);
547
813
  },
548
814
 
549
- clickOnTranscriptButton: () => {
550
- audioPlayerPage.transcriptButton()
815
+ clickOnProgressBarPin: (pinTimeStamp) => {
816
+ audioPlayerPage.progressBarPin(pinTimeStamp)
551
817
  .click();
552
818
  },
553
819
 
554
- closeTranscriptModal: () => {
555
- audioPlayerPage.transcriptModalCloseButton()
820
+ clickOnAddedPinDeleteButton: (pinIndex) => {
821
+ audioPlayerPage.pinsPanelAddedPinDeleteButton()
822
+ .eq(pinIndex)
556
823
  .click();
557
824
  },
558
825
 
559
- focusAwayFromElement: () => {
560
- cy.get('body')
561
- .click({ position: 'topLeft' });
826
+ clickOnPinsPanelCloseButton: () => {
827
+ audioPlayerPage.pinsPanelCloseButton()
828
+ .click();
562
829
  },
563
830
 
564
- verifyWindowOpenMethodAfterClickingOnDownloadAudioButton: () => {
565
- cy.window()
566
- .then((win) => {
567
- cy.stub(win, 'open')
568
- .as('windowOpen')
569
- });
570
- audioPlayerPage.audioDownloadButton()
571
- .click();
572
- cy.get('@windowOpen')
573
- .should('be.calledWith', '');
831
+ verifyPinsPanelAddPinButtonActiveState: () => {
832
+ audioPlayerPage.pinsPanelAddPinButton()
833
+ .should('have.class', 'add-pin-button-active');
574
834
  },
575
835
 
576
- waitForAudioFileSrcToLoad: () => {
577
- audioPlayerPage.audioFileSrc()
578
- .should('have.attr', 'src')
579
- .and('not.be.empty');
836
+ verifyUnmutedVolumeIconIsDisplayedInPreviewTab: () => {
837
+ utilities.verifyElementVisibilityState(audioPlayerPage.unmutedVolumeIcon(), 'visible');
580
838
  }
581
839
  }
582
840
 
583
841
  const tests = {
584
- ...createQuestionBasePage.tests,
585
842
  ...commonComponents.tests,
586
- //Header section
587
- verifyCancelButton: () => {
588
- it('When user has made no edits and clicks on Cancel button, the user should be directed back to the \'Select a Question\' page', () => {
589
- createQuestionBasePage.cancelButton()
590
- .click();
591
- utilities.verifyElementVisibilityState(selectQuestionResourceToolPage.selectAQuestionHeaderText(), 'visible');
592
- utilities.verifyElementVisibilityState(selectQuestionResourceToolPage.questionTypeOptionTitle(), 'visible');
593
- });
594
-
595
- it('When user has made some edits/changes and clicks on Cancel button, a popup should be displayed', () => {
596
- selectQuestionResourceToolPage.steps.selectResourceType('Audio Player');
597
- audioPlayerPage.steps.setPlaybackLimit('5');
598
- createQuestionBasePage.cancelButton()
599
- .click();
600
- utilities.verifyElementVisibilityState(dialogBoxBase.dialogBox(), 'visible')
601
- });
602
-
603
- dialogBoxBase.tests.verifyContentsOfLeavePagePopupWithCSSAnda11y();
604
-
605
- it(`Clicking on \'No, I'd like to go back\' button should close the popup and user should remain on the edit interface of the question`, () => {
606
- dialogBoxBase.buttonReject()
607
- .click();
608
- createQuestionBasePage.editTab()
609
- .should('have.attr', 'aria-selected', 'true')
610
- audioPlayerPage.steps.verifyPlaybackLimitInputFieldValue('5');
611
- });
612
-
613
- it(`Clicking on \'Yes, I want to leave this page\' button should discard all changes and direct the user to the \'Select a question\' page.`, () => {
614
- createQuestionBasePage.cancelButton()
615
- .click();
616
- dialogBoxBase.buttonAccept()
617
- .click();
618
- utilities.verifyElementVisibilityState(selectQuestionResourceToolPage.selectAQuestionHeaderText(), 'visible');
619
- utilities.verifyElementVisibilityState(selectQuestionResourceToolPage.questionTypeOptionTitle(), 'visible');
620
- });
621
- },
843
+ ...playbackControlsBaseComponent.tests,
622
844
  }
623
845
 
624
846
  export const audioPlayerPage = {