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
@@ -0,0 +1,792 @@
1
+ import { audioPlayerPage } from "../../../pages";
2
+ import abortEarlySetup from "../../../support/helpers/abortEarly";
3
+ import utilities from "../../../support/helpers/utilities";
4
+ const css = Cypress.env('css');
5
+
6
+ describe('Standard audio player style: Edit tab contents and preview tab functionality', () => {
7
+ before(() => {
8
+ cy.loginAs('admin');
9
+ });
10
+
11
+ describe('\'Audio player style\' section - Edit tab', () => {
12
+ abortEarlySetup();
13
+ before(() => {
14
+ audioPlayerPage.steps.navigateToCreateResource('audio player');
15
+ });
16
+
17
+ it('\'Audio player style\' label should be displayed', () => {
18
+ utilities.verifyInnerText(audioPlayerPage.audioPlayerStyleLabel(), 'Audio player style');
19
+ utilities.verifyElementVisibilityState(audioPlayerPage.audioPlayerStyleLabel(), 'visible');
20
+ });
21
+
22
+ it('Three toggle buttons \'Standard\', \'Bar\' and \'Compact\' should be displayed and \'Bar\' toggle button should be displayed', () => {
23
+ utilities.verifyInnerText(audioPlayerPage.standardStyleToggleButtonLabel(), 'Standard');
24
+ utilities.verifyElementVisibilityState(audioPlayerPage.standardStyleToggleButton(), 'visible');
25
+ utilities.verifyInnerText(audioPlayerPage.barStyleToggleButtonLabel(), 'Bar');
26
+ utilities.verifyElementVisibilityState(audioPlayerPage.barStyleToggleButton(), 'visible');
27
+ utilities.verifyInnerText(audioPlayerPage.compactStyleToggleButtonLabel(), 'Compact');
28
+ utilities.verifyElementVisibilityState(audioPlayerPage.compactStyleToggleButton(), 'visible');
29
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Standard');
30
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsSelected('Bar');
31
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Compact');
32
+ });
33
+
34
+ it('User should be able to select \'Standard\' toggle button', () => {
35
+ audioPlayerPage.steps.selectaudioPlayerStyleLabelToggleButton('Standard');
36
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Bar');
37
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Compact');
38
+ });
39
+
40
+ it('User should be able to select \'Bar\' toggle button', () => {
41
+ audioPlayerPage.steps.selectaudioPlayerStyleLabelToggleButton('Bar');
42
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Standard');
43
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Compact');
44
+ });
45
+
46
+ it('User should be able to select \'Compact\' toggle button', () => {
47
+ audioPlayerPage.steps.selectaudioPlayerStyleLabelToggleButton('Compact');
48
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Standard');
49
+ audioPlayerPage.steps.verifyaudioPlayerStyleLabelToggleButtonIsNotSelected('Bar');
50
+ });
51
+
52
+ it('When user has selected \'Compact\' toggle button, then \'Compact player options\' label and options - \'Default\', \'Text\', \'Image\' and \'Icon\' should be displayed and default should be selected by default', () => {
53
+ utilities.verifyInnerText(audioPlayerPage.compactPlayerOptionsLabel(), 'Compact player options');
54
+ utilities.verifyElementVisibilityState(audioPlayerPage.compactPlayerOptionsLabel(), 'visible');
55
+ utilities.verifyInnerText(audioPlayerPage.defaultPlayerOptionButton(), 'Default');
56
+ utilities.verifyElementVisibilityState(audioPlayerPage.defaultPlayerOptionButton(), 'visible');
57
+ utilities.verifyInnerText(audioPlayerPage.textPlayerOptionButton(), 'Text');
58
+ utilities.verifyElementVisibilityState(audioPlayerPage.textPlayerOptionButton(), 'visible');
59
+ utilities.verifyInnerText(audioPlayerPage.imagePlayerOptionButton(), 'Image');
60
+ utilities.verifyElementVisibilityState(audioPlayerPage.imagePlayerOptionButton(), 'visible');
61
+ utilities.verifyInnerText(audioPlayerPage.iconPlayerOptionButton(), 'Icon');
62
+ utilities.verifyElementVisibilityState(audioPlayerPage.iconPlayerOptionButton(), 'visible');
63
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsSelected('Default');
64
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Text');
65
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Image');
66
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Icon');
67
+ });
68
+
69
+ it('User should be able to select \'Default\' toggle button', () => {
70
+ audioPlayerPage.steps.selectCompactPlayerOptionButton('Default');
71
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Text');
72
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Image');
73
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Icon');
74
+ });
75
+
76
+ it('User should be able to select \'Text\' toggle button', () => {
77
+ audioPlayerPage.steps.selectCompactPlayerOptionButton('Text');
78
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Default');
79
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Image');
80
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Icon');
81
+ });
82
+
83
+ it('User should be able to select \'Image\' toggle button', () => {
84
+ audioPlayerPage.steps.selectCompactPlayerOptionButton('Image');
85
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Default');
86
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Text');
87
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Icon');
88
+ });
89
+
90
+ it('User should be able to select \'Icon\' toggle button', () => {
91
+ audioPlayerPage.steps.selectCompactPlayerOptionButton('Icon');
92
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Default');
93
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Text');
94
+ audioPlayerPage.steps.verifyCompactPlayerOptionButtonIsNotSelected('Image');
95
+ });
96
+
97
+ it('CSS of audio player style section', { tags: 'css' }, () => {
98
+ utilities.verifyCSS(audioPlayerPage.audioPlayerStyleLabel(), {
99
+ 'color': css.color.labels,
100
+ 'font-size': css.fontSize.normal,
101
+ 'font-weight': css.fontWeight.semibold
102
+ });
103
+ utilities.verifyCSS(audioPlayerPage.compactStyleToggleButton(), {
104
+ 'color': css.color.defaultBackground,
105
+ 'background-color': css.color.activeButtons,
106
+ 'font-size': css.fontSize.default,
107
+ 'font-weight': css.fontWeight.regular
108
+ });
109
+ utilities.verifyCSS(audioPlayerPage.standardStyleToggleButton(), {
110
+ 'color': css.color.secondaryBtn,
111
+ 'background-color': css.color.secondaryBtnBg,
112
+ 'font-size': css.fontSize.default,
113
+ 'font-weight': css.fontWeight.regular
114
+ });
115
+ utilities.verifyCSS(audioPlayerPage.compactPlayerOptionsLabel(), {
116
+ 'color': css.color.labels,
117
+ 'font-size': css.fontSize.normal,
118
+ 'font-weight': css.fontWeight.semibold
119
+ });
120
+ utilities.verifyCSS(audioPlayerPage.iconPlayerOptionButton(), {
121
+ 'background-color': css.color.secondaryBtnBg,
122
+ 'border': `2px solid ${css.color.activeButtons}`
123
+ });
124
+ utilities.verifyCSS(audioPlayerPage.iconPlayerOptionButton().find('.ngie-toggle-button-label'), {
125
+ 'color': css.color.activeButtons,
126
+ 'font-size': css.fontSize.default,
127
+ 'font-weight': css.fontWeight.regular
128
+ });
129
+ utilities.verifyCSS(audioPlayerPage.defaultPlayerOptionButton(), {
130
+ 'background-color': css.color.secondaryBtnBg,
131
+ 'border': `1px solid ${css.color.figDefaultComponentBorder}`
132
+ });
133
+ utilities.verifyCSS(audioPlayerPage.defaultPlayerOptionButton().find('.ngie-toggle-button-label'), {
134
+ 'color': css.color.secondaryBtn,
135
+ 'font-size': css.fontSize.default,
136
+ 'font-weight': css.fontWeight.regular
137
+ });
138
+ });
139
+
140
+ it('Accessibility of audio player style section', { tags: 'a11y' }, () => {
141
+ cy.checkAccessibility(audioPlayerPage.audioPlayerStyleLabel().parents('.audio-player-resource'));
142
+ });
143
+ });
144
+
145
+ describe('Standard playback player : Play, pause and seek', () => {
146
+ let actualAudioSeekedInPercent = 50
147
+ abortEarlySetup();
148
+ before(() => {
149
+ audioPlayerPage.steps.navigateToCreateResource('audio player');
150
+ audioPlayerPage.steps.uploadFile('uploads/sample.mp3');
151
+ audioPlayerPage.steps.selectAudioPlayerStyleToggleButton('Standard');
152
+ audioPlayerPage.steps.switchToPreviewTab();
153
+ });
154
+
155
+ it('When the user switches to preview tab, then the standard playback player preview with \'Backward\', \'Play\', \'Forward\', \'Volume control\', \'Elapsed time\', \'Progress bar\', \'Total time\', \'Playback speed\' and \'Add pin\' buttons should be displayed', () => {
156
+ utilities.verifyElementVisibilityState(audioPlayerPage.standardPreviewPlayerWrapper(), 'visible');
157
+ utilities.verifyElementVisibilityState(audioPlayerPage.audioPlayerToolbar(), 'visible');
158
+ utilities.verifyElementVisibilityState(audioPlayerPage.backwardButton(), 'visible');
159
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPlayButton(), 'visible');
160
+ utilities.verifyElementVisibilityState(audioPlayerPage.forwardButton(), 'visible');
161
+ utilities.verifyElementVisibilityState(audioPlayerPage.volumeControlButton(), 'visible');
162
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackElapsedTime(), 'visible');
163
+ utilities.verifyInnerText(audioPlayerPage.playbackElapsedTime(), '00:00');
164
+ utilities.verifyElementVisibilityState(audioPlayerPage.progressBar(), 'visible');
165
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackTotalTime(), 'visible');
166
+ utilities.verifyInnerText(audioPlayerPage.playbackTotalTime(), '00:00');
167
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackSpeedButton(), 'visible');
168
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinButton(), 'visible');
169
+ });
170
+
171
+ it('Accessibility of standard playback player in default state', { tags: 'a11y' }, () => {
172
+ cy.checkAccessibility(audioPlayerPage.playbackPlayButton().parents('.audio-resource-preview-wrapper'));
173
+ });
174
+
175
+ it('When the user hovers over the \'Play\' button, a tooltip \'Play\' should be displayed and on moving away the focus, the tooltip should disappear', () => {
176
+ audioPlayerPage.playbackPlayButton()
177
+ .verifyTooltip('Play');
178
+ });
179
+
180
+ it('When the user clicks on \'Play\' button, then the audio file should load and the user should be able to play the audio. Timer should display the amount of audio that has been played and the total audio length in (mm:ss)/(mm:ss) format.', () => {
181
+ audioPlayerPage.steps.startPlayback();
182
+ audioPlayerPage.steps.waitForPlaybackToBegin();
183
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:03', '00:45');
184
+ });
185
+
186
+ it('When the user hovers over the \'Pause\' button, a tooltip \'Pause\' should be displayed and on moving away the focus, the tooltip should disappear', () => {
187
+ audioPlayerPage.playbackPauseButton()
188
+ .verifyTooltip('Pause');
189
+ });
190
+
191
+ it('CSS of \'Preview\' section if playback is initiated', { tags: 'css' }, () => {
192
+ utilities.verifyCSS(audioPlayerPage.standardPreviewPlayerWrapper(), {
193
+ 'border': `1px solid ${css.color.figDefaultComponentBorder}`
194
+ });
195
+ utilities.verifyCSS(audioPlayerPage.standardPreviewPlayerWrapper().find('#Icon_awesome-microphone'), {
196
+ 'fill': css.color.microphoneIcon
197
+ });
198
+ utilities.verifyCSS(audioPlayerPage.playbackPauseButton().find('#pause'), {
199
+ 'stroke': css.color.secondaryBtnActive,
200
+ });
201
+ utilities.verifyCSS(audioPlayerPage.playbackElapsedTime(), {
202
+ 'color': css.color.playbackTime,
203
+ 'font-size': css.fontSize.small,
204
+ 'font-weight': css.fontWeight.bold
205
+ });
206
+ utilities.verifyCSS(audioPlayerPage.playbackTotalTime(), {
207
+ 'color': css.color.playbackTime,
208
+ 'font-size': css.fontSize.small,
209
+ 'font-weight': css.fontWeight.bold
210
+ });
211
+ utilities.verifyCSS(audioPlayerPage.progressBar().find('.MuiSlider-rail'), {
212
+ 'background-color': css.color.progressBarRemainingFill
213
+ });
214
+ utilities.verifyCSS(audioPlayerPage.progressBar().find('.MuiSlider-track'), {
215
+ 'background-color': css.color.progressBarElapsedFill
216
+ });
217
+ });
218
+
219
+ it('Accessibility of \'Preview\' section if playback is initiated', { tags: 'a11y' }, () => {
220
+ cy.checkAccessibility(audioPlayerPage.playbackPauseButton().parents('.audio-resource-preview-wrapper'));
221
+ });
222
+
223
+ it('When the audio player is in playback state and the user clicks on \'Pause\' button, then playback should get paused. Progress bar and timer should not update further and the \'Pause\' button should get replaced with \'Play\' button', () => {
224
+ audioPlayerPage.steps.resetQuestionPreview();
225
+ audioPlayerPage.steps.startPlayback();
226
+ audioPlayerPage.steps.waitForPlaybackToBegin();
227
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:10', '00:45');
228
+ audioPlayerPage.steps.pauseAndVerifyProgressBarSliderPosition();
229
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:10', '00:45');
230
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPlayButton(), 'visible');
231
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPauseButton(), 'notExist');
232
+ });
233
+
234
+ it('Accessibility of \'Preview\' section if if playback is paused', { tags: 'a11y' }, () => {
235
+ cy.checkAccessibility(audioPlayerPage.playbackPlayButton().parents('.audio-resource-preview-wrapper'));
236
+ });
237
+
238
+ it('When audio player is in paused state and user clicks on \'Play\' button, then playback should get resumed and \'Play\' button should get replaced with \'Pause\' button.', () => {
239
+ audioPlayerPage.steps.startPlayback();
240
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPauseButton(), 'visible');
241
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPlayButton(), 'notExist');
242
+ });
243
+
244
+ it('When the user seeks the progress bar slider while the audio is playing, then the audio should continue to play from the position where the slider is seeked', () => {
245
+ audioPlayerPage.steps.seekProgressBarSliderToCenter();
246
+ audioPlayerPage.steps.addWaitToPlayAudio(1000);
247
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(actualAudioSeekedInPercent);
248
+ });
249
+
250
+ it('When the user seeks the progress bar slider while the audio is paused, then the audio playback should be in paused state and on playing the audio, then the audio should play from the position where the slider is seeked', () => {
251
+ audioPlayerPage.steps.pausePlayback();
252
+ audioPlayerPage.steps.seekProgressBarSliderToCenter();
253
+ audioPlayerPage.steps.startPlayback();
254
+ audioPlayerPage.steps.addWaitToPlayAudio(3000);
255
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(actualAudioSeekedInPercent);
256
+ });
257
+
258
+ it('When the audio playback is completed, the \'Pause\' button should get replaced with \'Play\' button', () => {
259
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:45', '00:45');
260
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPlayButton(), 'visible');
261
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPauseButton(), 'notExist');
262
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(99);
263
+ });
264
+
265
+ it('CSS of progress bar in hover state', { tags: 'css' }, () => {
266
+ audioPlayerPage.steps.hoverOnProgressBarSlider();
267
+ utilities.verifyCSS(audioPlayerPage.progressBarSlider().parents('span[class*="MuiSlider-thumb"]'), {
268
+ 'box-shadow': `${css.color.progressBarSliderHoverBackground} 0px 0px 0px 8px`
269
+ });
270
+ });
271
+ });
272
+
273
+ describe('Standard playback player : Volume control', () => {
274
+ abortEarlySetup();
275
+ before(() => {
276
+ audioPlayerPage.steps.navigateToCreateResource('audio player');
277
+ audioPlayerPage.steps.uploadFile('uploads/sample.mp3');
278
+ audioPlayerPage.steps.selectAudioPlayerStyleToggleButton('Standard');
279
+ audioPlayerPage.steps.switchToPreviewTab();
280
+ audioPlayerPage.steps.startPlayback();
281
+ audioPlayerPage.steps.waitForPlaybackToBegin();
282
+ });
283
+
284
+ it('When the user hovers over \'Volume control\' button, volume control settings should open and by default it should be set to full volume and on hovering away from the button, the volume slider should disappear', () => {
285
+ audioPlayerPage.steps.hoverOnVolumeControlButton();
286
+ utilities.verifyElementVisibilityState(audioPlayerPage.volumeControlSlider(), 'visible');
287
+ audioPlayerPage.steps.verifyVolumeOfPlaybackPlayer('100');
288
+ utilities.hoverAwayFromElement();
289
+ utilities.verifyElementVisibilityState(audioPlayerPage.volumeControlSlider(), 'notExist');
290
+ });
291
+
292
+ it('When volume is not set as 0 and user hovers on \'Volume control\' button, then \'Mute\' text should be displayed in a tooltip and on hovering away from the button, the tooltip should disappear', () => {
293
+ audioPlayerPage.steps.hoverOnVolumeControlButton();
294
+ utilities.verifyElementVisibilityState(audioPlayerPage.tooltipText(), 'visible');
295
+ utilities.verifyInnerText(audioPlayerPage.tooltipText(), 'Mute');
296
+ utilities.hoverAwayFromElement();
297
+ utilities.verifyElementVisibilityState(audioPlayerPage.tooltipText(), 'notExist');
298
+ });
299
+
300
+ it('When the user hovers over \'Volume control slider\', then \'Volume control\' text should be displayed in a tooltip and on hovering away from the button, the tooltip should disappear', () => {
301
+ audioPlayerPage.steps.hoverOnVolumeControlButton();
302
+ audioPlayerPage.steps.hoverOnVolumeControlSlider();
303
+ audioPlayerPage.steps.hoverAwayFromVolumeControlButton();
304
+ utilities.verifyElementVisibilityState(audioPlayerPage.tooltipText(), 'visible');
305
+ utilities.verifyInnerText(audioPlayerPage.tooltipText(), 'Volume control');
306
+ utilities.hoverAwayFromElement();
307
+ utilities.verifyElementVisibilityState(audioPlayerPage.volumeControlSlider(), 'notExist');
308
+ utilities.verifyElementVisibilityState(audioPlayerPage.tooltipText(), 'notExist');
309
+ });
310
+
311
+ it('When volume is not set as 0 and user clicks on volume control button, then the audio should be muted and the volume control button should change to a muted state', () => {
312
+ audioPlayerPage.steps.clickOnVolumeButton();
313
+ audioPlayerPage.steps.hoverOnVolumeControlButton();
314
+ audioPlayerPage.steps.verifyVolumeOfPlaybackPlayer('0');
315
+ utilities.hoverAwayFromElement();
316
+ utilities.verifyElementVisibilityState(audioPlayerPage.volumeControlSlider(), 'notExist');
317
+ utilities.verifyElementVisibilityState(audioPlayerPage.muteVolumeIcon(), 'visible');
318
+ utilities.hoverAwayFromElement();
319
+ });
320
+
321
+ it('When the user hovers on muted \'Volume control\' button, \'Unmute\' text should be displayed in tooltip', () => {
322
+ audioPlayerPage.steps.hoverOnVolumeControlButton();
323
+ utilities.verifyElementVisibilityState(audioPlayerPage.tooltipText(), 'visible');
324
+ utilities.verifyInnerText(audioPlayerPage.tooltipText(), 'Unmute');
325
+ utilities.hoverAwayFromElement();
326
+ utilities.verifyElementVisibilityState(audioPlayerPage.tooltipText(), 'notExist');
327
+ });
328
+
329
+ it('When the user clicks on the muted volume control button then the volume setting slider should return to full volume and the volume control button should change to an unmuted state', () => {
330
+ audioPlayerPage.steps.clickOnVolumeButton();
331
+ audioPlayerPage.steps.hoverOnVolumeControlButton();
332
+ audioPlayerPage.steps.verifyVolumeOfPlaybackPlayer('100');
333
+ audioPlayerPage.steps.verifyUnmutedVolumeIconIsDisplayedInPreviewTab();
334
+ });
335
+
336
+ it('CSS of volume control section', { tags: 'css' }, () => {
337
+ utilities.verifyCSS(audioPlayerPage.volumeControlSlider(), {
338
+ 'background': `${css.color.transparent} linear-gradient(to right, ${css.color.progressBarElapsedFill} 0%, ${css.color.progressBarElapsedFill} 100%, ${css.color.defaultBackground} 0%, ${css.color.defaultBackground} 100%) repeat scroll 0% 0% / auto padding-box border-box`
339
+ });
340
+ audioPlayerPage.unmutedVolumeIcon()
341
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
342
+ });
343
+
344
+ it('Accessibility of volume control section', { tags: 'a11y' }, () => {
345
+ cy.checkAccessibility(audioPlayerPage.volumeControlSlider());
346
+ cy.checkAccessibility(audioPlayerPage.playbackPauseButton().parents('.audio-resource-preview-wrapper'));
347
+ });
348
+
349
+ it('When the user drags the volume control all the way down, audio should be muted and the button should update to a muted state', () => {
350
+ audioPlayerPage.steps.setVolumeSliderForPlayback(0);
351
+ audioPlayerPage.steps.verifyVolumeOfPlaybackPlayer('0');
352
+ utilities.verifyElementVisibilityState(audioPlayerPage.muteVolumeIcon(), 'visible');
353
+ });
354
+
355
+ it('CSS of volume control section in muted state', { tags: 'css' }, () => {
356
+ utilities.verifyCSS(audioPlayerPage.volumeControlSlider(), {
357
+ 'background': `${css.color.transparent} linear-gradient(to right, ${css.color.progressBarElapsedFill} 0%, ${css.color.progressBarElapsedFill} 0%, ${css.color.defaultBackground} -100%, ${css.color.defaultBackground} 100%) repeat scroll 0% 0% / auto padding-box border-box`
358
+ });
359
+ audioPlayerPage.muteVolumeIcon()
360
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
361
+ });
362
+
363
+ it('Accessibility of volume control section in muted state', { tags: 'a11y' }, () => {
364
+ cy.checkAccessibility(audioPlayerPage.volumeControlSlider());
365
+ cy.checkAccessibility(audioPlayerPage.playbackPauseButton().parents('.audio-resource-preview-wrapper'));
366
+ });
367
+
368
+ it('User should be able to unmute the audio by dragging the volume control higher again', () => {
369
+ audioPlayerPage.steps.setVolumeSliderForPlayback(99);
370
+ audioPlayerPage.steps.verifyVolumeOfPlaybackPlayer('100');
371
+ audioPlayerPage.steps.verifyUnmutedVolumeIconIsDisplayedInPreviewTab();
372
+ });
373
+ });
374
+
375
+ describe('Standard playback player : Playback speed', () => {
376
+ const playbackSpeedOptions = ['0.5', '1', '1.25', '1.5', '1.75', '2'];
377
+ abortEarlySetup();
378
+ before(() => {
379
+ audioPlayerPage.steps.navigateToCreateResource('audio player');
380
+ audioPlayerPage.steps.uploadFile('uploads/sample.mp3');
381
+ audioPlayerPage.steps.selectAudioPlayerStyleToggleButton('Standard');
382
+ audioPlayerPage.steps.switchToPreviewTab();
383
+ });
384
+
385
+ audioPlayerPage.tests.verifyPlaybackSpeedContents(playbackSpeedOptions);
386
+
387
+ for (let index = 0; index < playbackSpeedOptions.length; index++) {
388
+ it(`When the user selects playback speed option ${playbackSpeedOptions[index]}x, the audio playback speed should be changed accordingly`, () => {
389
+ audioPlayerPage.steps.resetQuestionPreview();
390
+ audioPlayerPage.steps.hoverOnPlaybackSpeedButton();
391
+ audioPlayerPage.steps.selectPlaybackSpeed(`${playbackSpeedOptions[index]}x`);
392
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackSpeedOption(), 'notExist');
393
+ audioPlayerPage.steps.startPlayback();
394
+ audioPlayerPage.steps.waitForPlaybackToBegin();
395
+ audioPlayerPage.steps.addWaitToPlayAudio(4000);
396
+ audioPlayerPage.steps.pausePlayback();
397
+ utilities.verifyInnerText(audioPlayerPage.playbackElapsedTime(), `00:0${1 + (2 * playbackSpeedOptions[index])}`);
398
+ });
399
+ };
400
+ });
401
+
402
+ describe('Standard playback player : Backward and Forward buttons', () => {
403
+ abortEarlySetup();
404
+ before(() => {
405
+ audioPlayerPage.steps.navigateToCreateResource('audio player');
406
+ audioPlayerPage.steps.uploadFile('uploads/sample.mp3');
407
+ audioPlayerPage.steps.selectAudioPlayerStyleToggleButton('Standard');
408
+ audioPlayerPage.steps.switchToPreviewTab();
409
+ });
410
+
411
+ it('When the user hovers over the \'Backward\' button, a tooltip \'Backward Button\' should be displayed and on moving away the focus, the tooltip should disappear', () => {
412
+ audioPlayerPage.backwardButton()
413
+ .verifyTooltip('Backward Button');
414
+ });
415
+
416
+ it('When the user hovers over the \'Forward\' button, a tooltip \'Forward Button\' should be displayed and on moving away the focus, the tooltip should disappear', () => {
417
+ audioPlayerPage.forwardButton()
418
+ .verifyTooltip('Forward Button');
419
+ });
420
+
421
+ it('CSS of \'Backward\' and \'Forward\' button in default and hover state', { tags: 'css' }, () => {
422
+ utilities.verifyCSS(audioPlayerPage.backwardButton().find('path').eq(1), {
423
+ 'stroke': css.color.activeButtons
424
+ });
425
+ utilities.verifyCSS(audioPlayerPage.forwardButton().find('path').eq(1), {
426
+ 'stroke': css.color.activeButtons
427
+ });
428
+ utilities.triggerMouseover(audioPlayerPage.backwardButton());
429
+ utilities.verifyCSS(audioPlayerPage.backwardButton(), {
430
+ 'background-color': css.color.selectToolbarOptionBg
431
+ });
432
+ utilities.triggerMouseout(audioPlayerPage.backwardButton());
433
+ utilities.triggerMouseover(audioPlayerPage.forwardButton());
434
+ utilities.verifyCSS(audioPlayerPage.forwardButton(), {
435
+ 'background-color': css.color.selectToolbarOptionBg
436
+ });
437
+ utilities.triggerMouseout(audioPlayerPage.forwardButton());
438
+ });
439
+
440
+ it('When playback is not initiated and user clicks on forward or backward button, then there should not be any changes', () => {
441
+ audioPlayerPage.steps.clickOnForwardButton();
442
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(0);
443
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:00', '00:00');
444
+ audioPlayerPage.steps.clickOnBackwardButton();
445
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(0);
446
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:00', '00:00');
447
+ });
448
+
449
+ it('When the audio player is in playback state and the user clicks on \'Forward\' button, then playback should get forwarded by 10 seconds and both the progress bar and elapsed time should be updated accordingly', () => {
450
+ audioPlayerPage.steps.startPlayback();
451
+ audioPlayerPage.steps.waitForPlaybackToBegin();
452
+ audioPlayerPage.steps.addWaitToPlayAudio(4000);
453
+ audioPlayerPage.steps.clickOnForwardButton();
454
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:15', '00:45');
455
+ });
456
+
457
+ it('When audio player is in paused state and the user clicks on \'Forward\' button, then playback should get forwarded by 10 seconds and both the progress bar and elapsed time should be updated accordingly', () => {
458
+ audioPlayerPage.steps.pausePlayback();
459
+ audioPlayerPage.steps.clickOnForwardButton();
460
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:25', '00:45');
461
+ });
462
+
463
+ it('When the audio player is in playback state and the user clicks on \'Backward\' button, then playback should get backtracked by 10 seconds and both the progress bar and elapsed time should be updated accordingly', () => {
464
+ audioPlayerPage.steps.startPlayback();
465
+ audioPlayerPage.steps.addWaitToPlayAudio(3000);
466
+ audioPlayerPage.steps.clickOnBackwardButton();
467
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:18', '00:45');
468
+ });
469
+
470
+ it('When audio player is in paused state and the user clicks on \'Backward\' button, then playback should get backtracked by 10 seconds and both the progress bar and elapsed time should be updated accordingly', () => {
471
+ audioPlayerPage.steps.pausePlayback();
472
+ audioPlayerPage.steps.clickOnBackwardButton();
473
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:09', '00:45');
474
+ });
475
+
476
+ it('When the elapsed time is less than 10 seconds and user clicks on backward button, then the playback should be backtracked to 0 and both the progress bar and elapsed time should be updated accordingly', () => {
477
+ audioPlayerPage.steps.clickOnBackwardButton();
478
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:00', '00:45');
479
+ });
480
+
481
+ it('When the difference between total time and elapsed time is less than 10 seconds and user clicks on forward button, then the playback should be forwarded to its completed state and both the progress bar and elapsed time should be updated accordingly', () => {
482
+ audioPlayerPage.steps.seekProgressBarSliderToCenter();
483
+ audioPlayerPage.steps.startPlayback();
484
+ audioPlayerPage.steps.addWaitToPlayAudio(15000);
485
+ audioPlayerPage.steps.clickOnForwardButton();
486
+ audioPlayerPage.steps.verifyAudioPlaybackTimer('00:45', '00:45');
487
+ });
488
+ });
489
+
490
+ describe('Standard playback player : Add pin', () => {
491
+ abortEarlySetup();
492
+ before(() => {
493
+ audioPlayerPage.steps.navigateToCreateResource('audio player');
494
+ audioPlayerPage.steps.uploadFile('uploads/sample.mp3');
495
+ audioPlayerPage.steps.selectAudioPlayerStyleToggleButton('Standard');
496
+ audioPlayerPage.steps.switchToPreviewTab();
497
+ });
498
+
499
+ it('When playback is not initiated and user clicks on add pin button, then there should not be any changes and pins panel should not be displayed', () => {
500
+ audioPlayerPage.steps.clickOnAddPinButton();
501
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanel(), 'notExist');
502
+ });
503
+
504
+ it('When the audio player is in playback state and the user clicks on \'Add pin\' button, pins panel should be displayed', () => {
505
+ audioPlayerPage.steps.startPlayback();
506
+ audioPlayerPage.steps.waitForPlaybackToBegin();
507
+ audioPlayerPage.steps.clickOnAddPinButton();
508
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanel(), 'visible');
509
+ });
510
+
511
+ it('By default in the pins panel \'Pins\' title, close \'X\' button, \'+Add pin\' button and \'No pins added\' help text should be displayed', () => {
512
+ utilities.verifyInnerText(audioPlayerPage.pinsTitle(), 'Pins');
513
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsTitle(), 'visible');
514
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelCloseButton(), 'visible');
515
+ utilities.verifyInnerText(audioPlayerPage.pinsPanelAddPinButton(), 'Add pin');
516
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelAddPinButton(), 'visible');
517
+ utilities.verifyInnerText(audioPlayerPage.noPinsAddedHelpText(), 'No pins added');
518
+ utilities.verifyElementVisibilityState(audioPlayerPage.noPinsAddedHelpText(), 'visible');
519
+ });
520
+
521
+ it('When the user clicks on add pin button in the pins panel, then add pin button should be displayed in active state, \'Time\' label, input field with the text \'00:00\', \'Cancel\' button and \'Save\' button should be displayed in the pins panel', () => {
522
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
523
+ audioPlayerPage.steps.verifyPinsPanelAddPinButtonActiveState();
524
+ utilities.verifyInnerText(audioPlayerPage.pinsPanelTimeLabel(), 'Time');
525
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelTimeLabel(), 'visible');
526
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelTimeInputFieldWrapper(), 'visible');
527
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldMinutes(), '00');
528
+ utilities.verifyInnerText(audioPlayerPage.pinsPanelTimeInputFieldWrapper(), ':');
529
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), '00');
530
+ utilities.verifyInnerText(audioPlayerPage.addPinSectionCancelButton(), 'Cancel');
531
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinSectionCancelButton(), 'visible');
532
+ utilities.verifyInnerText(audioPlayerPage.addPinSectionSaveButton(), 'Save');
533
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinSectionSaveButton(), 'visible');
534
+ });
535
+
536
+ it('CSS of selected add pin button and add pin section', { tags: 'css' }, () => {
537
+ utilities.verifyCSS(audioPlayerPage.pinsPanelAddPinButton(), {
538
+ 'background-color': css.color.selectToolbarOptionBg
539
+ });
540
+ utilities.verifyCSS(audioPlayerPage.pinsPanelAddPinButton().find('span'), {
541
+ 'color': css.color.activeButtons,
542
+ 'font-size': css.fontSize.default,
543
+ 'font-weight': css.fontWeight.semibold
544
+ });
545
+ audioPlayerPage.pinsPanelAddPinButton()
546
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
547
+ utilities.verifyCSS(audioPlayerPage.pinsPanelTimeLabel().find('span'), {
548
+ 'color': css.color.labels,
549
+ 'font-size': css.fontSize.normal,
550
+ 'font-weight': css.fontWeight.semibold
551
+ });
552
+ utilities.verifyCSS(audioPlayerPage.pinsPanelTimeInputFieldMinutes(), {
553
+ 'color': css.color.text,
554
+ 'font-size': css.fontSize.default,
555
+ 'font-weight': css.fontWeight.regular
556
+ });
557
+ utilities.verifyCSS(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), {
558
+ 'color': css.color.text,
559
+ 'font-size': css.fontSize.default,
560
+ 'font-weight': css.fontWeight.regular
561
+ });
562
+ utilities.verifyCSS(audioPlayerPage.addPinSectionCancelButton(), {
563
+ 'text-decoration': 'underline'
564
+ });
565
+ utilities.verifyCSS(audioPlayerPage.addPinSectionCancelButton().find('span'), {
566
+ 'color': css.color.activeButtons,
567
+ 'font-size': css.fontSize.normal,
568
+ 'font-weight': css.fontWeight.regular
569
+ });
570
+ utilities.verifyCSS(audioPlayerPage.addPinSectionSaveButton(), {
571
+ 'background-color': css.color.activeButtons
572
+ });
573
+ utilities.verifyCSS(audioPlayerPage.addPinSectionSaveButton().find('p'), {
574
+ 'color': css.color.whiteText,
575
+ 'font-size': css.fontSize.default,
576
+ 'font-weight': css.fontWeight.semibold
577
+ });
578
+ utilities.verifyCSS(audioPlayerPage.noPinsAddedHelpText().find('span'), {
579
+ 'color': css.color.text,
580
+ 'font-size': css.fontSize.normal,
581
+ 'font-weight': css.fontWeight.regular
582
+ });
583
+ });
584
+
585
+ it('Accessibility of add pin section and add pin button in selected state', () => {
586
+ cy.checkAccessibility(audioPlayerPage.pinsPanelAddPinButton().parents('[class*="AddPinstyles__PinsCollectionWrapper"]'));
587
+ });
588
+
589
+ it('No pins added help text should still be displayed', () => {
590
+ utilities.verifyElementVisibilityState(audioPlayerPage.noPinsAddedHelpText(), 'visible');
591
+ });
592
+
593
+ it('User should be able to give a timestamp input in the time input field', () => {
594
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('00:30');
595
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldMinutes(), '00');
596
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), '30');
597
+ });
598
+
599
+ it('The minute and seconds input field should have the maximum and minimum value as per the uploaded audio and the values should update accordingly', () => {
600
+ audioPlayerPage.steps.verifyMaximumAndMinimumValueOfMinutesTimeInputField(0, 0);
601
+ audioPlayerPage.steps.verifyMaximumAndMinimumValueOfSecondsTimeInputField(0, 45);
602
+ audioPlayerPage.steps.switchToEditTab();
603
+ audioPlayerPage.steps.uploadFile('uploads/sample1.mp3');
604
+ utilities.verifyTextContent(audioPlayerPage.uploadedFileNameLabel(), 'sample1.mp3');
605
+ audioPlayerPage.steps.switchToPreviewTab();
606
+ audioPlayerPage.steps.resetQuestionPreview(); //Added as audio does not load when quickly switched to preview tab
607
+ utilities.verifyElementVisibilityState(audioPlayerPage.playbackPlayButton(), 'visible');
608
+ audioPlayerPage.steps.startPlayback();
609
+ audioPlayerPage.steps.waitForPlaybackToBegin();
610
+ audioPlayerPage.steps.clickOnAddPinButton();
611
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
612
+ audioPlayerPage.steps.verifyMaximumAndMinimumValueOfMinutesTimeInputField(0, 0);
613
+ audioPlayerPage.steps.verifyMaximumAndMinimumValueOfSecondsTimeInputField(0, 58);
614
+ });
615
+
616
+ it('When the user add inputs a value greater than the maximum value in time input fields then it should be reset to the maximum value', () => {
617
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('10:59');
618
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldMinutes(), '00');
619
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), '58');
620
+ });
621
+
622
+ it('User should only be able to give real numbers input in the time input field', () => {
623
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('a0b0:3.#0');
624
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldMinutes(), '00');
625
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), '30');
626
+ });
627
+
628
+ it('When user clicks on cancel button, then the add pin section should not be displayed', () => {
629
+ audioPlayerPage.steps.clickOnAddPinSectionCancelButton();
630
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinContainer(), 'notExist');
631
+ });
632
+
633
+ it('When the user clicks on pins panel add pin button again, then the time input field, cancel button and save button should be displayed in their default state', () => {
634
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
635
+ utilities.verifyInnerText(audioPlayerPage.pinsPanelTimeLabel(), 'Time');
636
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelTimeLabel(), 'visible');
637
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelTimeInputFieldWrapper(), 'visible');
638
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldMinutes(), '00');
639
+ utilities.verifyInnerText(audioPlayerPage.pinsPanelTimeInputFieldWrapper(), ':');
640
+ utilities.verifyInputFieldValue(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), '00');
641
+ utilities.verifyInnerText(audioPlayerPage.addPinSectionCancelButton(), 'Cancel');
642
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinSectionCancelButton(), 'visible');
643
+ utilities.verifyInnerText(audioPlayerPage.addPinSectionSaveButton(), 'Save');
644
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinSectionSaveButton(), 'visible');
645
+ });
646
+
647
+ it('When user gives an input in time input field and clicks on save button, then add pin section should not be displayed and the pin should be saved', () => {
648
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('00:29');
649
+ audioPlayerPage.steps.clickOnAddPinSectionSaveButton();
650
+ utilities.verifyElementVisibilityState(audioPlayerPage.addPinContainer(), 'notExist');
651
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelAddedPinWrapper(), 'visible');
652
+ });
653
+
654
+ it('The added pin time should be displayed in the pins panel along with a delete button', () => {
655
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(0, '00:29');
656
+ });
657
+
658
+ it('No pins added help text should not be displayed', () => {
659
+ utilities.verifyElementVisibilityState(audioPlayerPage.noPinsAddedHelpText(), 'notExist');
660
+ });
661
+
662
+ it('User should be able to add multiple pins', () => {
663
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
664
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('00:15');
665
+ audioPlayerPage.steps.clickOnAddPinSectionSaveButton();
666
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(1, '00:15');
667
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
668
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('00:43');
669
+ audioPlayerPage.steps.clickOnAddPinSectionSaveButton();
670
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(2, '00:43');
671
+ });
672
+
673
+ it('The added pins should be displayed on the progress bar', () => {
674
+ audioPlayerPage.steps.verifyProgressBarPin(0, '00:29');
675
+ audioPlayerPage.steps.verifyProgressBarPin(1, '00:15');
676
+ audioPlayerPage.steps.verifyProgressBarPin(2, '00:43');
677
+ });
678
+
679
+ it('When the player is in play state and the user clicks on a pin, then the progress bar slider should be set to the clicked pin bookmark', () => {
680
+ audioPlayerPage.steps.clickOnProgressBarPin('00:29');
681
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(50);
682
+ audioPlayerPage.steps.clickOnProgressBarPin('00:43');
683
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(75);
684
+ });
685
+
686
+ it('When the player is in paused state and the user clicks on a pin, then the progress bar slider should be set to the clicked pin bookmark', () => {
687
+ audioPlayerPage.steps.pausePlayback();
688
+ audioPlayerPage.steps.clickOnProgressBarPin('00:15');
689
+ audioPlayerPage.steps.verifyProgressBarSliderPosition(25);
690
+ });
691
+
692
+ it('When the user clicks on the pin delete button, then the pin should be deleted from the pins panel and the progress bar', () => {
693
+ audioPlayerPage.steps.clickOnAddedPinDeleteButton(1);
694
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(0, '00:29');
695
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(1, '00:43');
696
+ utilities.verifyElementCount(audioPlayerPage.pinsPanelAddedPinWrapper(), 2);
697
+ audioPlayerPage.steps.verifyProgressBarPin(0, '00:29');
698
+ audioPlayerPage.steps.verifyProgressBarPin(1, '00:43');
699
+ utilities.verifyElementCount(audioPlayerPage.progressBarPin(), 2);
700
+ });
701
+
702
+ it('When no pins are present, then the no pins added help text should be displayed again', () => {
703
+ audioPlayerPage.steps.clickOnAddedPinDeleteButton(0);
704
+ audioPlayerPage.steps.clickOnAddedPinDeleteButton(0);
705
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanelAddedPinWrapper(), 'notExist');
706
+ utilities.verifyElementVisibilityState(audioPlayerPage.noPinsAddedHelpText(), 'visible');
707
+ });
708
+
709
+ it('When the user clicks on pins panel close button, then the pins panel should not be displayed', () => {
710
+ cy.log('Pre-step: Add pins before closing pins panel');
711
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
712
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('00:29');
713
+ audioPlayerPage.steps.clickOnAddPinSectionSaveButton();
714
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(0, '00:29');
715
+ audioPlayerPage.steps.clickOnPinsPanelAddPinButton();
716
+ audioPlayerPage.steps.addInputToTimeInputFieldInPinsPanel('00:15');
717
+ audioPlayerPage.steps.clickOnAddPinSectionSaveButton();
718
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(1, '00:15');
719
+ audioPlayerPage.steps.clickOnPinsPanelCloseButton();
720
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanel(), 'notExist');
721
+ });
722
+
723
+ it('When user has added pins and closed the pins panel, then the added pins should be displayed on the progress bar', () => {
724
+ audioPlayerPage.steps.verifyProgressBarPin(0, '00:29');
725
+ audioPlayerPage.steps.verifyProgressBarPin(1, '00:15');
726
+ });
727
+
728
+ it('When the user clicks on the add pin button in the toolbar, then the pins panel should be displayed again and the previously added pins should be displayed', () => {
729
+ audioPlayerPage.steps.clickOnAddPinButton()
730
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanel(), 'visible');
731
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(0, '00:29');
732
+ audioPlayerPage.steps.verifyAddedPinTimeStampAndDeleteButton(1, '00:15');
733
+ });
734
+
735
+ it('CSS of toolbar \'Add pin\' button and pins panel', { tags: 'css' }, () => {
736
+ utilities.verifyCSS(audioPlayerPage.addPinButton().find('path'), {
737
+ 'fill': css.color.activeButtons
738
+ });
739
+ utilities.triggerMouseover(audioPlayerPage.addPinButton());
740
+ utilities.verifyCSS(audioPlayerPage.addPinButton(), {
741
+ 'background-color': css.color.selectToolbarOptionBg
742
+ });
743
+ utilities.triggerMouseout(audioPlayerPage.addPinButton());
744
+ utilities.verifyCSS(audioPlayerPage.pinsPanelAddPinButton(), {
745
+ 'background-color': css.color.transparent
746
+ });
747
+ utilities.verifyCSS(audioPlayerPage.pinsPanelAddPinButton().find('span'), {
748
+ 'color': css.color.activeButtons,
749
+ 'font-size': css.fontSize.default,
750
+ 'font-weight': css.fontWeight.semibold
751
+ });
752
+ audioPlayerPage.pinsPanelAddPinButton()
753
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
754
+ utilities.verifyCSS(audioPlayerPage.pinsPanelTimeLabel().find('span'), {
755
+ 'color': css.color.labels,
756
+ 'font-size': css.fontSize.normal,
757
+ 'font-weight': css.fontWeight.semibold
758
+ });
759
+ utilities.verifyCSS(audioPlayerPage.pinsTitle(), {
760
+ 'color': css.color.labels,
761
+ 'font-size': css.fontSize.default,
762
+ 'font-weight': css.fontWeight.semibold
763
+ });
764
+ utilities.verifyCSS(audioPlayerPage.pinsPanelCloseButton().find('svg'), {
765
+ 'fill': css.color.activeButtons
766
+ });
767
+ utilities.verifyCSS(audioPlayerPage.pinsPanelTimeInputFieldSeconds(), {
768
+ 'color': css.color.text,
769
+ 'font-size': css.fontSize.default,
770
+ 'font-weight': css.fontWeight.regular
771
+ });
772
+ utilities.verifyCSS(audioPlayerPage.pinsPanelAddedPinTimeStamp(), {
773
+ 'color': css.color.playbackTime,
774
+ 'font-size': css.fontSize.default,
775
+ 'font-weight': css.fontWeight.bold
776
+ });
777
+ utilities.getNthElement(audioPlayerPage.pinsPanelAddedPinDeleteButton(), 0)
778
+ .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
779
+ utilities.getNthElement(audioPlayerPage.progressBar(), 0)
780
+ .verifyPseudoClassBeforeProperty('background-color', css.color.progressBarPin);
781
+ });
782
+
783
+ it('Accessibility of pins panel', () => {
784
+ cy.checkAccessibility(audioPlayerPage.pinsPanelAddPinButton().parents('.resource-and-tool-preview-wrapper'));
785
+ })
786
+
787
+ it('When the user clicks on the add pin button in the toolbar, then the pins panel should not be displayed', () => {
788
+ audioPlayerPage.steps.clickOnAddPinButton()
789
+ utilities.verifyElementVisibilityState(audioPlayerPage.pinsPanel(), 'notExist');
790
+ });
791
+ });
792
+ });