itemengine-cypress-automation 1.0.185-repoUpdate26April-b17eb46.0 → 1.0.186-packageUpdate-5632086.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. package/cypress/e2e/ILC/AudioResponseNew/barRecorderStyle.smoke.js +1 -1
  2. package/cypress/e2e/ILC/AudioResponseNew/compactRecorderStyle.smoke.js +1 -1
  3. package/cypress/e2e/ILC/AudioResponseNew/standardRecorderStyle.smoke.js +1 -1
  4. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/clickAndDrop.js +1 -1
  5. package/cypress/e2e/ILC/DrawingResponse/drawingResponseGradingViewAndCorrectAnswerViewContents.smoke.js +8 -5
  6. package/cypress/e2e/ILC/EditTabSettingPage/itemPreviewSettingsTabFunctionality.js +28 -417
  7. package/cypress/e2e/ILC/EssayResponse/editCategoryFlyout.js +1 -1
  8. package/cypress/e2e/ILC/FeedbackScaleNew/headerSection.js +1 -29
  9. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +2 -2
  10. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/studentViewSettings.js +1 -1
  11. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/studentViewSettings.js +1 -1
  12. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/editTabScoring.js +0 -1
  13. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/previewContentsForAllViews.smoke.js +2 -2
  14. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/studentViewSettings.js +1 -1
  15. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/studentViewSettings.js +1 -1
  16. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +4 -4
  17. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
  18. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/studentViewSettings.js +1 -1
  19. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +5 -5
  20. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +4 -3
  21. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
  22. package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +0 -1
  23. package/cypress/e2e/ILC/FillInTheGapsTextNew/studentViewSettings.js +1 -1
  24. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +2 -2
  25. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +2 -2
  26. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +2 -2
  27. package/cypress/e2e/ILC/Graphing/addBackgroundShapesSection.js +2 -2
  28. package/cypress/e2e/ILC/Graphing/studentViewSettings.js +1 -1
  29. package/cypress/e2e/ILC/GridFill/checkAnswerFunctionalityForAllViews.smoke.js +2 -2
  30. package/cypress/e2e/ILC/GridFill/gridLayoutContents.js +3 -11
  31. package/cypress/e2e/ILC/GridFill/previewContentsForAllViews.smoke.js +3 -3
  32. package/cypress/e2e/ILC/GridFill/studentViewSettingsSection.js +1 -1
  33. package/cypress/e2e/ILC/Matching/studentViewSettings.js +1 -1
  34. package/cypress/e2e/ILC/MultipleSelection/allOrNothingWithAlternativeAnswer.js +0 -1
  35. package/cypress/e2e/ILC/MultipleSelectionGridNew/studentViewSettings.js +1 -1
  36. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +3 -3
  37. package/cypress/e2e/ILC/NumberLine/allOrNothingScoringForAllViews.smoke.js +1 -57
  38. package/cypress/e2e/ILC/NumberLine/previewTabContentsForAllViews.smoke.js +1 -1
  39. package/cypress/e2e/ILC/NumberLine/studentViewSettings.js +1 -1
  40. package/cypress/e2e/ILC/NumberLine/toolSettings.js +1 -2
  41. package/cypress/e2e/ILC/Protractor/protractorPreviewContents.smoke.js +1 -1
  42. package/cypress/e2e/ILC/ReadingRuler/readingRulerEditTabBasicsSection.js +1 -49
  43. package/cypress/e2e/ILC/ShortTextResponseNew/studentViewSettings.js +1 -1
  44. package/cypress/e2e/ILC/SingleSelectionGridNew/studentViewSettings.js +1 -1
  45. package/cypress/e2e/ILC/TextEntryMath/responseEvaluationMethodsAndCustomSettings.js +2 -2
  46. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingAlternatePointsMoreThanCorrectPoints.js +1 -0
  47. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +1 -0
  48. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsMoreThanAlternatePoints.js +1 -0
  49. package/cypress/e2e/ILC/TextSelection/Scoring/basicScoringForAllTextSelectionTypes.smoke.js +1 -0
  50. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +1 -0
  51. package/cypress/e2e/ILC/TextSelection/checkAnswerFunctionalityForAllViews.smoke.js +2 -1
  52. package/cypress/e2e/ILC/TextSelection/editTabScoringSection.js +4 -5
  53. package/cypress/e2e/ILC/TextSelection/previewContentsForAllViews.smoke.js +7 -6
  54. package/cypress/e2e/ILC/ToolSettings/toolSettingsContent.js +5 -5
  55. package/cypress/e2e/ILC/ToolSettings/toolSettingsPreviewContents.smoke.js +3 -3
  56. package/cypress/fixtures/constants.js +1 -1
  57. package/cypress/fixtures/equationEditorCategoriesAndSymbols .js +20 -20
  58. package/cypress/fixtures/theme/ilc.json +18 -20
  59. package/cypress/pages/audioPlayerPage.js +504 -274
  60. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  61. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +3 -3
  62. package/cypress/pages/components/autoScoredStudentViewSettings.js +5 -5
  63. package/cypress/pages/components/commonComponents.js +0 -1
  64. package/cypress/pages/components/draggableOptionContainer.js +0 -1
  65. package/cypress/pages/components/equationEditorFlyout.js +2 -3
  66. package/cypress/pages/components/essayResponseCommonComponents.js +2 -8
  67. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +0 -1
  68. package/cypress/pages/components/imageCanvasComponent.js +1 -2
  69. package/cypress/pages/components/index.js +0 -3
  70. package/cypress/pages/components/optionsWrapperComponent.js +2 -13
  71. package/cypress/pages/components/playbackControlsBaseComponent.js +13 -20
  72. package/cypress/pages/components/toolSettingsComponent.js +0 -6
  73. package/cypress/pages/contentBlocksPage.js +2 -18
  74. package/cypress/pages/createItemPage.js +8 -75
  75. package/cypress/pages/dialogBoxBase.js +2 -2
  76. package/cypress/pages/drawingResponsePage.js +4 -24
  77. package/cypress/pages/feedbackScalePage.js +0 -3
  78. package/cypress/pages/graphingPage.js +1 -19
  79. package/cypress/pages/gridFillPage.js +8 -25
  80. package/cypress/pages/index.js +1 -2
  81. package/cypress/pages/itemPreviewSettingsPage.js +0 -4
  82. package/cypress/pages/listOrderingPage.js +557 -435
  83. package/cypress/pages/matchingPage.js +1 -1
  84. package/cypress/pages/multipleSelectionPage.js +1 -23
  85. package/cypress/pages/numberLinePage.js +132 -1370
  86. package/cypress/pages/rulerPage.js +2 -6
  87. package/cypress/pages/textSelectionPage.js +23 -461
  88. package/package.json +1 -1
  89. package/cypress/e2e/ILC/AudioPlayerNew/allSupportedFileTypes.js +0 -79
  90. package/cypress/e2e/ILC/AudioPlayerNew/barAudioPlayerStyle.js +0 -345
  91. package/cypress/e2e/ILC/AudioPlayerNew/compactAudioPlayerStyle.js +0 -429
  92. package/cypress/e2e/ILC/AudioPlayerNew/previewContents.smoke.js +0 -162
  93. package/cypress/e2e/ILC/AudioPlayerNew/standardAudioPlayerStyle.js +0 -489
  94. package/cypress/e2e/ILC/AudioPlayerNew/uploadAndAddAudioFile.js +0 -313
  95. package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +0 -230
  96. package/cypress/e2e/ILC/ListOrderingDropdown/checkAnswerFunctionalityForAllViews.smoke.js +0 -124
  97. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +0 -201
  98. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +0 -216
  99. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +0 -214
  100. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +0 -251
  101. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingPenaltyScoring.js +0 -52
  102. package/cypress/e2e/ILC/ListOrderingNew/Scoring/manuallyAndNonScored.js +0 -128
  103. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +0 -279
  104. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsBasic.js +0 -109
  105. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +0 -278
  106. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +0 -278
  107. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +0 -335
  108. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +0 -250
  109. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsBasic.js +0 -161
  110. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +0 -216
  111. package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +0 -252
  112. package/cypress/e2e/ILC/ListOrderingNew/additionalSettings.js +0 -118
  113. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +0 -243
  114. package/cypress/e2e/ILC/ListOrderingNew/checkAnswerFunctionalityForAllViews.smoke.js +0 -128
  115. package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +0 -155
  116. package/cypress/e2e/ILC/ListOrderingNew/editTabScoring.js +0 -195
  117. package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +0 -78
  118. package/cypress/e2e/ILC/ListOrderingNew/minimumScoringPenaltyPointsAndRoundingDropdown.js +0 -194
  119. package/cypress/e2e/ILC/ListOrderingNew/previewContentsForAllViews.smoke.js +0 -176
  120. package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +0 -112
  121. package/cypress/e2e/ILC/ListOrderingNew/studentViewSettings.js +0 -244
  122. package/cypress/e2e/ILC/NumberLine/LayoutSection.js +0 -181
  123. package/cypress/e2e/ILC/NumberLine/lineSettingsSection.js +0 -33
  124. package/cypress/e2e/ILC/NumberLine/numberLineSection.js +0 -46
  125. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/allOrNothingScoringForAllViews.smoke.js +0 -696
  126. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +0 -173
  127. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/layoutSection.js +0 -183
  128. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/numberLineSection.js +0 -73
  129. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/previewTabContentsForAllViews.smoke.js +0 -204
  130. package/cypress/e2e/ILC/NumberLineLabel/allOrNothingForAllViews.smoke.js +0 -288
  131. package/cypress/e2e/ILC/NumberLineLabel/checkAnswerFunctionalityForAllViews.smoke.js +0 -153
  132. package/cypress/e2e/ILC/NumberLineLabel/gradingViewAndCorrectAnswerView.smoke.js +0 -164
  133. package/cypress/e2e/ILC/NumberLineLabel/previewContentsForAllViews.smoke.js +0 -120
  134. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +0 -125
  135. package/cypress/e2e/ILC/TextSelection/headerSection.js +0 -73
  136. package/cypress/e2e/ILC/TextSelection/questionInstructionsAndQuestion.js +0 -179
  137. package/cypress/e2e/ILC/TextSelection/specifyCorrectAnswerSection.js +0 -89
  138. package/cypress/e2e/ILC/TextSelection/studentViewSettings.js +0 -436
  139. package/cypress/e2e/ILC/TextSelection/styleAndLayoutCustomizationAccordion.js +0 -277
  140. package/cypress/e2e/ILC/TextSelection/textSelectionModesInPreviewTab.js +0 -222
  141. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyCorrectAnswerSection.js +0 -260
  142. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyPossibleOptionsSection.js +0 -380
  143. package/cypress/pages/components/layoutSectionComponent.js +0 -1191
  144. package/cypress/pages/components/numberLineCommonComponent.js +0 -36
  145. package/cypress/pages/components/styleAndLayoutCustomizationAccordionComponent.js +0 -46
  146. package/cypress/pages/numberLineLabelPage.js +0 -333
@@ -1,136 +1,103 @@
1
+ import constants from "../fixtures/constants";
1
2
  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"
4
6
 
5
7
  const selectors = {
6
- ...playbackControlsBaseComponent,
7
8
  ...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),
9
+ ...ckEditorToolbar,
10
+ ...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),
17
16
  sourceUrlInputField: () => cy.get('input[aria-label="Source URL"]'),
18
- uploadAudioChooseFileButton: () => cy.get('.choose-file-upload-button'),
19
- uploadAudioNoFileChosenLabel: () => cy.get('[aria-label="No file chosen"]').eq(0),
17
+ noFileChosenLabel: () => cy.get('[aria-label="No file chosen"]'),
20
18
  uploadedFileNameLabel: () => cy.get('.selected-file'),
21
- audioFileUploadProgressBar: () => cy.get('[class*="AudioPlayerstyles__ProgressBar-"]').eq(0),
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-"]'),
22
23
  inputTypeFile: () => cy.get('input[type="file"]'),
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
- audioDescriptionInputField: () => cy.get('.description-wrapper [role="textbox"]'),
36
- uploadTranscriptFileLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(2),
37
- uploadTranscriptFileRadioButton: () => cy.get('.ngie-radio-btn input').eq(2),
38
- typeInTranscriptLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(3),
39
- typeInTranscriptRadioButton: () => cy.get('.ngie-radio-btn input').eq(3),
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),
40
33
  transcriptInputField: () => cy.get('[role="textbox"][title="Transcript"]'),
41
- deleteTranscriptButton: () => cy.get('[aria-label*="Delete transcript]'),
42
-
43
- //Preview tab
44
- backwardButton: () => cy.get('.forward-backward-buttons-wrapper [aria-label*="Backward"]'),
45
- forwardButton: () => cy.get('.forward-backward-buttons-wrapper [aria-label*="Forward"]'),
46
- playbackElapsedTime: () => cy.get('.audio-player-current-time').eq(0),
47
- playbackTotalTime: () => cy.get('.audio-player-duration').eq(0),
48
- addPinButton: () => cy.get('.audio-add-pin-wr button'),
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
+ allowStudentsToDownloadAudioLabel: () => cy.get('[data-ngie-testid="allow-students-to-download-the-audio-checkbox"] .MuiFormControlLabel-label'),
45
+ 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'),
49
53
  audioFileSrc: () => cy.get('.audio-player-toolbar audio'),
54
+ titlePreviewTab: () => cy.get('.audio-resource-title'),
50
55
  descriptionPreviewTab: () => cy.get('.audio-resource-preview-wrapper .question-text-wrapper'),
51
56
  transcriptTitlePreviewTab: () => cy.get('.transcript-title'),
52
57
  transcriptPrintButton: () => cy.get('button[aria-label="Print preview"]'),
53
58
  transcriptModalCloseButton: () => cy.get('button[aria-label="Close"]'),
54
- transcriptContentPreviewTab: () => cy.get('.transcript-content'),
59
+ transcriptContentPreviewTab: () => cy.get('[class*="Transcriptstyles__TranscriptContent"]'),
55
60
  transcriptButton: () => cy.get('button[aria-label="Transcript"]'),
56
61
  transcriptModal: () => cy.get('[class*="Transcriptstyles__TranscriptWrapper"]'),
57
- standardPreviewPlayerWrapper: () => cy.get('.standard-audio-resource-preview'),
58
- audioPlayerToolbar: () => cy.get('.audio-player-toolbar'),
59
- compactPlayerPlayButton: () => cy.get(' button'),
60
- playButton: () => cy.get('.audio-player-not-visible button'),
61
- stopButton: () => cy.get('.audio-player-visible button'),
62
+ audioDownloadButton: () => cy.get('.audio-download-icon-wr'),
63
+ playbackLimitHelpText: () => cy.get('.playback-limit-remaining'),
64
+ playbackPlayer: () => cy.get('.audio-player-toolbar')
62
65
  }
63
66
 
64
67
  const steps = {
65
- ...playbackControlsBaseComponent.steps,
66
68
  ...createQuestionBasePage.steps,
67
- ...dialogBoxBase.steps,
68
- /**
69
- * Uploads a file to the audio player by attaching the file located at the specified filePath.
70
- * @param {string} filePath - The file path to the file to be uploaded.
71
- * @returns {void}
72
- */
73
- uploadFile: (filePath) => {
74
- audioPlayerPage.inputTypeFile()
75
- .attachFile(filePath);
76
- utilities.verifyElementVisibilityState(audioPlayerPage.audioFileUploadProgressBar(), 'hidden');
77
- },
78
-
79
- /**
80
- * Uploads a file to the audio player by attaching the file located at the specified filePath.
81
- * @param {string} filePath - The file path to the file to be uploaded.
82
- * @returns {void}
83
- */
84
- attachFile: (filePath) => {
85
- audioPlayerPage.inputTypeFile()
86
- .attachFile(filePath);
87
- },
88
-
89
- addInputToAudioDescriptionInputField: (text) => {
90
- audioPlayerPage.audioDescriptionInputField()
91
- .type(text)
92
- .should('have.text', text)
93
- .blur();
94
- },
95
-
96
- selectTypeInTranscriptRadioButton: () => {
97
- audioPlayerPage.typeInTranscriptRadioButton()
98
- .click()
69
+ ...ckEditorToolbar.steps,
70
+ ...equationEditorFlyout.steps,
71
+ ...commonComponents.steps,
72
+ ...playbackControlsBaseComponent.steps,
73
+ verifyAddUrlCheckedState: () => {
74
+ audioPlayerPage.addUrlRadioButton()
99
75
  .should('be.checked');
100
76
  },
101
77
 
102
- enterTextInTranscriptInputField: (text) => {
103
- audioPlayerPage.transcriptInputField()
104
- .type(text)
105
- .should('have.text', text)
106
- .blur();
78
+ verifyAddUrlUncheckedState: () => {
79
+ audioPlayerPage.addUrlRadioButton()
80
+ .should('not.be.checked');
107
81
  },
108
82
 
109
- verifyUploadAudioFileRadioButtonIsSelected: () => {
110
- audioPlayerPage.uploadAudioFileRadioButton()
111
- .should('be.checked');
83
+ clickOnAddUrlRadioButton: () => {
84
+ audioPlayerPage.addUrlRadioButton()
85
+ .click();
112
86
  },
113
87
 
114
- verifyUploadAudioFileRadioButtonIsNotSelected: () => {
115
- audioPlayerPage.uploadAudioFileRadioButton()
116
- .should('not.be.checked');
88
+ verifyAddAudioFileCheckedState: () => {
89
+ audioPlayerPage.addAudioFileRadioButton()
90
+ .should('be.checked');
117
91
  },
118
92
 
119
- verifyAddAudioURLRadioButtonIsNotSelected: () => {
120
- audioPlayerPage.addAudioURLRadioButton()
93
+ verifyAddAudioFileUncheckedState: () => {
94
+ audioPlayerPage.addAudioFileRadioButton()
121
95
  .should('not.be.checked');
122
96
  },
123
97
 
124
- selectUploadAudioFileRadioButton: () => {
125
- audioPlayerPage.uploadAudioFileRadioButton()
126
- .click()
127
- .should('be.checked');
128
- },
129
-
130
- selectAddAudioURLRadioButton: () => {
131
- audioPlayerPage.addAudioURLRadioButton()
132
- .click()
133
- .should('be.checked');
98
+ clickOnAddAudioFileRadioButton: () => {
99
+ audioPlayerPage.addAudioFileRadioButton()
100
+ .click();
134
101
  },
135
102
 
136
103
  focusInAndFocusOutOfSourceURLInputField: () => {
@@ -140,180 +107,412 @@ const steps = {
140
107
  },
141
108
 
142
109
  /**
143
- * @description Verify audio player style toggle button is selected
144
- * @param {string} toggleButton Toggle button label
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}
145
113
  */
146
- verifyAudioPlayerStyleToggleButtonIsSelected: (toggleButton) => {
147
- switch (toggleButton) {
148
- case 'Standard':
149
- audioPlayerPage.standardStyleToggleButton()
150
- .should('have.attr', 'aria-pressed', 'true');
151
- break;
152
- case 'Bar':
153
- audioPlayerPage.barStyleToggleButton()
154
- .should('have.attr', 'aria-pressed', 'true');
155
- break;
156
- case 'Compact':
157
- audioPlayerPage.compactStyleToggleButton()
158
- .should('have.attr', 'aria-pressed', 'true');
159
- break;
160
- default:
161
- throw new Error('Invalid audio player style');
162
- }
114
+ enterTextInSourceURLInputField: (text) => {
115
+ audioPlayerPage.sourceUrlInputField()
116
+ .type(text, { delay: 0 })
117
+ .blur();
163
118
  },
164
119
 
165
- /**
166
- * @description Verify audio player style toggle button is not selected
167
- * @param {string} toggleButton Toggle button label
168
- */
169
- verifyAudioPlayerStyleToggleButtonIsNotSelected: (toggleButton) => {
170
- switch (toggleButton) {
171
- case 'Standard':
172
- audioPlayerPage.standardStyleToggleButton()
173
- .should('have.attr', 'aria-pressed', 'false');
174
- break;
175
- case 'Bar':
176
- audioPlayerPage.barStyleToggleButton()
177
- .should('have.attr', 'aria-pressed', 'false');
178
- break;
179
- case 'Compact':
180
- audioPlayerPage.compactStyleToggleButton()
181
- .should('have.attr', 'aria-pressed', 'false');
182
- break;
183
- default:
184
- throw new Error('Invalid audio player style');
185
- }
120
+ clearTextInSourceURLInputField: () => {
121
+ audioPlayerPage.sourceUrlInputField()
122
+ .clear();
186
123
  },
187
124
 
188
125
  /**
189
- * @description Select audio player style toggle button
190
- * @param {string} toggleButton Toggle button label
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}
191
129
  */
192
- selectAudioPlayerStyleToggleButton: (toggleButton) => {
193
- switch (toggleButton) {
194
- case 'Standard':
195
- audioPlayerPage.standardStyleToggleButton()
196
- .click()
197
- .should('have.attr', 'aria-pressed', 'true');
198
- break;
199
- case 'Bar':
200
- audioPlayerPage.barStyleToggleButton()
201
- .click()
202
- .should('have.attr', 'aria-pressed', 'true');
203
- break;
204
- case 'Compact':
205
- audioPlayerPage.compactStyleToggleButton()
206
- .click()
207
- .should('have.attr', 'aria-pressed', 'true');
208
- break;
209
- default:
210
- throw new Error('Invalid audio player style');
211
- }
130
+ uploadFile: (filePath) => {
131
+ audioPlayerPage.inputTypeFile()
132
+ .attachFile(filePath);
133
+ utilities.verifyElementVisibilityState(audioPlayerPage.fileUploadProgressBar(), 'hidden');
134
+ },
135
+
136
+ verifyPlayerTypeDropdownDisabledState: () => {
137
+ audioPlayerPage.playerTypeDropdown()
138
+ .should('have.class', 'Mui-disabled');
212
139
  },
213
140
 
214
141
  /**
215
- * @description Verify compact player option button is selected
216
- * @param {string} button button label
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}
217
145
  */
218
- verifyCompactPlayerOptionButtonIsSelected: (button) => {
219
- switch (button) {
220
- case 'Default':
221
- audioPlayerPage.defaultPlayerOptionButton()
222
- .should('have.attr', 'aria-pressed', 'true');
223
- break;
224
- case 'Text':
225
- audioPlayerPage.textPlayerOptionButton()
226
- .should('have.attr', 'aria-pressed', 'true');
227
- break;
228
- case 'Image':
229
- audioPlayerPage.imagePlayerOptionButton()
230
- .should('have.attr', 'aria-pressed', 'true');
231
- break;
232
- case 'Icon':
233
- audioPlayerPage.iconPlayerOptionButton()
234
- .should('have.attr', 'aria-pressed', 'true');
235
- break;
236
- default:
237
- throw new Error('Invalid compact player option');
238
- }
146
+ setPlaybackLimit: (value) => {
147
+ audioPlayerPage.playbackLimitInputField()
148
+ .clear()
149
+ .type(value)
239
150
  },
240
151
 
241
152
  /**
242
- * @description Verify compact player option button is not selected
243
- * @param {string} button button label
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}
244
156
  */
245
- verifyCompactPlayerOptionButtonIsNotSelected: (button) => {
246
- switch (button) {
247
- case 'Default':
248
- audioPlayerPage.defaultPlayerOptionButton()
249
- .should('have.attr', 'aria-pressed', 'false');
250
- break;
251
- case 'Text':
252
- audioPlayerPage.textPlayerOptionButton()
253
- .should('have.attr', 'aria-pressed', 'false');
254
- break;
255
- case 'Image':
256
- audioPlayerPage.imagePlayerOptionButton()
257
- .should('have.attr', 'aria-pressed', 'false');
258
- break;
259
- case 'Icon':
260
- audioPlayerPage.iconPlayerOptionButton()
261
- .should('have.attr', 'aria-pressed', 'false');
262
- break;
263
- default:
264
- throw new Error('Invalid compact player option');
265
- }
157
+ verifyPlaybackLimitInputFieldValue: (value) => {
158
+ audioPlayerPage.playbackLimitInputField()
159
+ .should('have.attr', 'value', value);
160
+ },
161
+
162
+ focusInAndFocusOutOfPlaybackLimitInputField: () => {
163
+ audioPlayerPage.playbackLimitInputField()
164
+ .click()
165
+ .blur();
266
166
  },
267
167
 
268
168
  /**
269
- * @description Verify compact player option button is selected
270
- * @param {string} toggleButton button label
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}
271
172
  */
272
- selectCompactPlayerOptionButton: (toggleButton) => {
273
- switch (button) {
274
- case 'Default':
275
- audioPlayerPage.defaultPlayerOptionButton()
276
- .click()
277
- .should('have.attr', 'aria-pressed', 'true');
278
- break;
279
- case 'Text':
280
- audioPlayerPage.textPlayerOptionButton()
281
- .click()
282
- .should('have.attr', 'aria-pressed', 'true');
283
- break;
284
- case 'Image':
285
- audioPlayerPage.imagePlayerOptionButton()
286
- .click()
287
- .should('have.attr', 'aria-pressed', 'true');
288
- break;
289
- case 'Icon':
290
- audioPlayerPage.iconPlayerOptionButton()
291
- .click()
292
- .should('have.attr', 'aria-pressed', 'true');
293
- break;
294
- default:
295
- throw new Error('Invalid compact player option');
296
- }
173
+ enterTextInTitleInputField: (text) => {
174
+ audioPlayerPage.titleInputField()
175
+ .type(text, { delay: 0 });
297
176
  },
298
177
 
299
178
  /**
300
- * Enters text into the source URL input field on the audio player page.
301
- * @param {string} text - The text to be entered into the source URL input field.
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.
302
181
  * @returns {void}
303
182
  */
304
- enterTextInSourceURLInputField: (text) => {
305
- audioPlayerPage.sourceUrlInputField()
306
- .type(text, { delay: 0 })
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)
307
196
  .blur();
308
197
  },
309
198
 
310
- clearTextInSourceURLInputField: () => {
311
- audioPlayerPage.sourceUrlInputField()
199
+ clearDescriptionInputField: () => {
200
+ audioPlayerPage.descriptionInputField()
312
201
  .clear();
313
202
  },
314
203
 
315
- deleteAudioFile: () => {
316
- audioPlayerPage.deleteAudioFileButton()
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);
216
+ },
217
+
218
+ verifyEquationInDescriptionInputField: () => {
219
+ audioPlayerPage.descriptionInputField()
220
+ .find('[data-widget="ngie_equation"]')
221
+ .should('have.attr', 'aria-label', constants.CKEditorInputFieldEnteredEquationAriaLabel)
222
+ .contains(constants.CKEditorInputFieldEnteredEquationText);
223
+ },
224
+
225
+ verifyEquationInDescriptionPreviewTab: () => {
226
+ audioPlayerPage.descriptionPreviewTab()
227
+ .find('[role="math"]')
228
+ .should('have.attr', 'aria-label', constants.CKEditorInputFieldEnteredEquationAriaLabel)
229
+ .contains(constants.CKEditorInputFieldEnteredEquationText);
230
+ },
231
+
232
+ verifyLinkInDescriptionInputField: () => {
233
+ audioPlayerPage.descriptionInputField()
234
+ .find('a')
235
+ .should('have.text', 'lorem')
236
+ .and('have.attr', 'href', `${Cypress.config().baseUrl}`);
237
+ },
238
+
239
+ verifyLinkInDescriptionPreviewTab: () => {
240
+ audioPlayerPage.descriptionPreviewTab()
241
+ .find('a')
242
+ .should('have.text', 'lorem')
243
+ .and('have.attr', 'href', `${Cypress.config().baseUrl}`);
244
+ },
245
+
246
+ verifyBoldTextInDescriptionInputField: () => {
247
+ audioPlayerPage.descriptionInputField()
248
+ .find('strong')
249
+ .should('exist')
250
+ .should('have.text', '​​​​​​​This is a bold text in description input field');
251
+ },
252
+
253
+ verifyBoldTextInDescriptionPreviewTab: () => {
254
+ audioPlayerPage.descriptionPreviewTab()
255
+ .find('strong')
256
+ .should('exist')
257
+ .should('have.text', 'This is a bold text in description');
258
+ },
259
+
260
+ focusInTranscriptInputField: () => {
261
+ audioPlayerPage.transcriptInputField()
262
+ .click();
263
+ },
264
+
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');
330
+ },
331
+
332
+ verifyCustomizeUIControlAccordionChevronIcon: () => {
333
+ audioPlayerPage.customizeUIControlAccordion()
334
+ .within(() => {
335
+ audioPlayerPage.accordionChevronIcon()
336
+ .should('be.visible');
337
+ });
338
+ },
339
+
340
+ verifyAdvancedPlayerAccordionChevronIcon: () => {
341
+ audioPlayerPage.advancedPlayerSettingsAccordion()
342
+ .within(() => {
343
+ audioPlayerPage.accordionChevronIcon()
344
+ .should('be.visible');
345
+ });
346
+ },
347
+
348
+ verifyCustomizeUIControlAccordionCollapsedState: () => {
349
+ audioPlayerPage.customizeUIControlAccordion()
350
+ .should('have.attr', 'aria-expanded', 'false');
351
+ },
352
+
353
+ verifyCustomizeUIControlAccordionExpandedState: () => {
354
+ audioPlayerPage.customizeUIControlAccordion()
355
+ .should('have.attr', 'aria-expanded', 'true');
356
+ },
357
+
358
+ clickOnCustomizeUIControlAccordion: () => {
359
+ audioPlayerPage.customizeUIControlAccordion()
360
+ .click();
361
+ },
362
+
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
+
373
+ clickOnAdvancedPlayerSettingsAccordion: () => {
374
+ audioPlayerPage.advancedPlayerSettingsAccordion()
375
+ .click();
376
+ },
377
+
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
+ });
392
+ },
393
+
394
+ verifyCustomizeControlSeekButtonSelectedState: () => {
395
+ audioPlayerPage.customizeControlSeekButton()
396
+ .should('have.class', 'ngie-toggle-button-selected')
397
+ .within(() => {
398
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
399
+ });
400
+ },
401
+
402
+ verifyCustomizeControlPlayButtonDeselectedState: () => {
403
+ audioPlayerPage.customizeControlPlayButton()
404
+ .should('have.class', 'ngie-toggle-button-not-selected')
405
+ .within(() => {
406
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
407
+ });
408
+ },
409
+
410
+ verifyCustomizeControlPauseButtonDeselectedState: () => {
411
+ audioPlayerPage.customizeControlPauseButton()
412
+ .should('have.class', 'ngie-toggle-button-not-selected')
413
+ .within(() => {
414
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
415
+ });
416
+ },
417
+
418
+ verifyCustomizeControlSeekButtonDeselectedState: () => {
419
+ audioPlayerPage.customizeControlSeekButton()
420
+ .should('have.class', 'ngie-toggle-button-not-selected')
421
+ .within(() => {
422
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
423
+ });
424
+ },
425
+
426
+ clickOnCustomizeControlPlayButton: () => {
427
+ audioPlayerPage.customizeControlPlayButton()
428
+ .click();
429
+ },
430
+
431
+ clickOnCustomizeControlPauseButton: () => {
432
+ audioPlayerPage.customizeControlPauseButton()
433
+ .click();
434
+ },
435
+
436
+ clickOnCustomizeControlSeekButton: () => {
437
+ audioPlayerPage.customizeControlSeekButton()
438
+ .click();
439
+ },
440
+
441
+ verifyAdvancedPlayerTimerButtonSelectedState: () => {
442
+ audioPlayerPage.advancedPlayerTimerButton()
443
+ .should('have.class', 'ngie-toggle-button-selected')
444
+ .within(() => {
445
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
446
+ });
447
+ },
448
+
449
+ verifyAdvancedPlayerProgressBarButtonSelectedState: () => {
450
+ audioPlayerPage.advancedPlayerProgressBarButton()
451
+ .should('have.class', 'ngie-toggle-button-selected')
452
+ .within(() => {
453
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
454
+ });
455
+ },
456
+
457
+ verifyAdvancedPlayerVolumeControlButtonSelectedState: () => {
458
+ audioPlayerPage.advancedPlayerVolumeControlButton()
459
+ .should('have.class', 'ngie-toggle-button-selected')
460
+ .within(() => {
461
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'visible');
462
+ });
463
+ },
464
+
465
+ verifyAdvancedPlayerTimerButtonDeselectedState: () => {
466
+ audioPlayerPage.advancedPlayerTimerButton()
467
+ .should('have.class', 'ngie-toggle-button-not-selected')
468
+ .within(() => {
469
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
470
+ });
471
+ },
472
+
473
+ verifyAdvancedPlayerProgressBarButtonDeselectedState: () => {
474
+ audioPlayerPage.advancedPlayerProgressBarButton()
475
+ .should('have.class', 'ngie-toggle-button-not-selected')
476
+ .within(() => {
477
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
478
+ });
479
+ },
480
+
481
+ verifyAdvancedPlayerVolumeControlButtonDeselectedState: () => {
482
+ audioPlayerPage.advancedPlayerVolumeControlButton()
483
+ .should('have.class', 'ngie-toggle-button-not-selected')
484
+ .within(() => {
485
+ utilities.verifyElementVisibilityState(audioPlayerPage.selectedButtonIcon(), 'hidden');
486
+ });
487
+ },
488
+
489
+ clickOnAdvancedPlayerTimerButton: () => {
490
+ audioPlayerPage.advancedPlayerTimerButton()
491
+ .click();
492
+ },
493
+
494
+ clickOnAdvancedPlayerProgressBarButton: () => {
495
+ audioPlayerPage.advancedPlayerProgressBarButton()
496
+ .click();
497
+ },
498
+
499
+ clickOnAdvancedPlayerVolumeControlButton: () => {
500
+ audioPlayerPage.advancedPlayerVolumeControlButton()
501
+ .click();
502
+ },
503
+
504
+ verifyAllowStudentsToDownloadAudioCheckboxNotChecked: () => {
505
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
506
+ .should('not.be.checked');
507
+ },
508
+
509
+ verifyAllowStudentsToDownloadAudioCheckboxChecked: () => {
510
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
511
+ .should('be.checked');
512
+ },
513
+
514
+ checkUncheckAllowStudentsToDownloadAudioCheckbox: () => {
515
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
317
516
  .click();
318
517
  },
319
518
 
@@ -324,25 +523,18 @@ const steps = {
324
523
  .should('have.text', '00:01');
325
524
  },
326
525
 
327
- waitForAudioFileSrcToLoad: () => {
328
- audioPlayerPage.audioFileSrc()
329
- .should('have.attr', 'src')
330
- .and('not.be.empty');
331
- },
332
-
333
-
334
526
  /**
335
- * Verifies the audio playback timer on the audio player.
336
- * @param {string} time - The elapsed time and total time in the format "elapsed/total."
337
- * @returns {void}
338
- */
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}
530
+ */
339
531
  verifyAudioPlaybackTimer: (time) => {
340
532
  const elapsedTime = time.split('/')[0];
341
533
  const totalTime = time.split('/')[1];
342
534
  audioPlayerPage.playbackElapsedTime()
343
535
  .should('have.text', elapsedTime)
344
536
  audioPlayerPage.playbackTotalTime()
345
- .should('have.text', totalTime)
537
+ .should('have.text', `/${totalTime}`)
346
538
  },
347
539
 
348
540
  /**
@@ -359,36 +551,74 @@ const steps = {
359
551
  .click();
360
552
  },
361
553
 
362
-
363
- clickOnBackwardButton: () => {
364
- audioPlayerPage.backwardButton()
554
+ closeTranscriptModal: () => {
555
+ audioPlayerPage.transcriptModalCloseButton()
365
556
  .click();
366
557
  },
367
558
 
368
- clickOnForwardButton: () => {
369
- audioPlayerPage.forwardButton()
370
- .click();
559
+ focusAwayFromElement: () => {
560
+ cy.get('body')
561
+ .click({ position: 'topLeft' });
371
562
  },
372
563
 
373
- clickOnPlayButton: () => {
374
- utilities.verifyElementVisibilityState(audioPlayerPage.playButton(), 'visible'); //Added to counter error occurrence when switching to preview tab and clinking on play button
375
- audioPlayerPage.playButton()
564
+ verifyWindowOpenMethodAfterClickingOnDownloadAudioButton: () => {
565
+ cy.window()
566
+ .then((win) => {
567
+ cy.stub(win, 'open')
568
+ .as('windowOpen')
569
+ });
570
+ audioPlayerPage.audioDownloadButton()
376
571
  .click();
572
+ cy.get('@windowOpen')
573
+ .should('be.calledWith', '');
377
574
  },
378
575
 
379
- clickOnStopButton: () => {
380
- audioPlayerPage.stopButton()
381
- .click();
382
- },
383
-
384
- verifyUnmutedVolumeIconIsDisplayedInPreviewTab: () => {
385
- utilities.verifyElementVisibilityState(audioPlayerPage.unmutedVolumeIcon(), 'visible');
576
+ waitForAudioFileSrcToLoad: () => {
577
+ audioPlayerPage.audioFileSrc()
578
+ .should('have.attr', 'src')
579
+ .and('not.be.empty');
386
580
  }
387
581
  }
388
582
 
389
583
  const tests = {
584
+ ...createQuestionBasePage.tests,
390
585
  ...commonComponents.tests,
391
- ...playbackControlsBaseComponent.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
+ },
392
622
  }
393
623
 
394
624
  export const audioPlayerPage = {