itemengine-cypress-automation 1.0.181 → 1.0.182

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/clickAndDrop.js +1 -1
  2. package/cypress/e2e/ILC/DrawingResponse/drawingResponseGradingViewAndCorrectAnswerViewContents.smoke.js +5 -4
  3. package/cypress/e2e/ILC/EditTabSettingPage/itemPreviewSettingsTabFunctionality.js +3 -64
  4. package/cypress/e2e/ILC/EssayResponse/editCategoryFlyout.js +1 -1
  5. package/cypress/e2e/ILC/EssayResponse/essayResponseAdditionalSettings.js +432 -0
  6. package/cypress/e2e/ILC/EssayResponse/essayResponseAdditionalSettingsBasic.js +134 -0
  7. package/cypress/e2e/ILC/FeedbackScaleNew/headerSection.js +1 -29
  8. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +2 -2
  9. package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/studentViewSettings.js +1 -1
  10. package/cypress/e2e/ILC/FillInTheGapsDropdownNew/studentViewSettings.js +1 -1
  11. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/editTabScoring.js +0 -1
  12. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/previewContentsForAllViews.smoke.js +2 -2
  13. package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/studentViewSettings.js +1 -1
  14. package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/studentViewSettings.js +1 -1
  15. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +4 -4
  16. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
  17. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/studentViewSettings.js +1 -1
  18. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +5 -5
  19. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +4 -3
  20. package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
  21. package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +0 -1
  22. package/cypress/e2e/ILC/FillInTheGapsTextNew/studentViewSettings.js +1 -1
  23. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +2 -2
  24. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +2 -2
  25. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +2 -2
  26. package/cypress/e2e/ILC/Graphing/addBackgroundShapesSection.js +2 -2
  27. package/cypress/e2e/ILC/Graphing/studentViewSettings.js +1 -1
  28. package/cypress/e2e/ILC/GridFill/previewContentsForAllViews.smoke.js +3 -3
  29. package/cypress/e2e/ILC/GridFill/studentViewSettingsSection.js +1 -1
  30. package/cypress/e2e/ILC/Matching/studentViewSettings.js +1 -1
  31. package/cypress/e2e/ILC/MultipleSelection/allOrNothingWithAlternativeAnswer.js +0 -1
  32. package/cypress/e2e/ILC/MultipleSelectionGridNew/studentViewSettings.js +1 -1
  33. package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +3 -3
  34. package/cypress/e2e/ILC/NumberLine/previewTabContentsForAllViews.smoke.js +1 -1
  35. package/cypress/e2e/ILC/NumberLine/studentViewSettings.js +1 -1
  36. package/cypress/e2e/ILC/NumberLine/toolSettings.js +1 -2
  37. package/cypress/e2e/ILC/Protractor/protractorPreviewContents.smoke.js +1 -1
  38. package/cypress/e2e/ILC/ReadingRuler/readingRulerEditTabBasicsSection.js +1 -49
  39. package/cypress/e2e/ILC/ShortTextResponseNew/studentViewSettings.js +1 -1
  40. package/cypress/e2e/ILC/SingleSelectionGridNew/studentViewSettings.js +1 -1
  41. package/cypress/e2e/ILC/TextEntryMath/responseEvaluationMethodsAndCustomSettings.js +2 -2
  42. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingAlternatePointsMoreThanCorrectPoints.js +1 -0
  43. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +1 -0
  44. package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsMoreThanAlternatePoints.js +1 -0
  45. package/cypress/e2e/ILC/TextSelection/Scoring/basicScoringForAllTextSelectionTypes.smoke.js +1 -0
  46. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +1 -0
  47. package/cypress/e2e/ILC/TextSelection/checkAnswerFunctionalityForAllViews.smoke.js +1 -0
  48. package/cypress/e2e/ILC/TextSelection/editTabScoringSection.js +4 -5
  49. package/cypress/e2e/ILC/TextSelection/previewContentsForAllViews.smoke.js +2 -2
  50. package/cypress/e2e/ILC/ToolSettings/toolSettingsContent.js +5 -5
  51. package/cypress/fixtures/constants.js +1 -1
  52. package/cypress/fixtures/equationEditorCategoriesAndSymbols .js +20 -20
  53. package/cypress/fixtures/theme/ilc.json +16 -16
  54. package/cypress/pages/audioPlayerPage.js +543 -55
  55. package/cypress/pages/brainingCampManipulativePage.js +1 -1
  56. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +3 -3
  57. package/cypress/pages/components/autoScoredStudentViewSettings.js +4 -4
  58. package/cypress/pages/components/commonComponents.js +0 -1
  59. package/cypress/pages/components/draggableOptionContainer.js +0 -1
  60. package/cypress/pages/components/equationEditorFlyout.js +2 -3
  61. package/cypress/pages/components/essayResponseCommonComponents.js +2 -8
  62. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +0 -1
  63. package/cypress/pages/components/imageCanvasComponent.js +1 -2
  64. package/cypress/pages/components/index.js +0 -1
  65. package/cypress/pages/components/optionsWrapperComponent.js +0 -11
  66. package/cypress/pages/components/toolSettingsComponent.js +0 -6
  67. package/cypress/pages/contentBlocksPage.js +2 -2
  68. package/cypress/pages/createItemPage.js +0 -29
  69. package/cypress/pages/dialogBoxBase.js +2 -2
  70. package/cypress/pages/drawingResponsePage.js +4 -23
  71. package/cypress/pages/feedbackScalePage.js +0 -3
  72. package/cypress/pages/graphingPage.js +0 -18
  73. package/cypress/pages/gridFillPage.js +2 -18
  74. package/cypress/pages/index.js +1 -1
  75. package/cypress/pages/itemPreviewSettingsPage.js +0 -4
  76. package/cypress/pages/listOrderingPage.js +647 -122
  77. package/cypress/pages/matchingPage.js +1 -1
  78. package/cypress/pages/multipleSelectionPage.js +1 -23
  79. package/cypress/pages/numberLinePage.js +59 -1196
  80. package/cypress/pages/rulerPage.js +2 -6
  81. package/cypress/pages/textSelectionPage.js +22 -460
  82. package/package.json +2 -2
  83. package/cypress/e2e/ILC/AudioPlayerNew/previewContents.smoke.js +0 -162
  84. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +0 -216
  85. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +0 -214
  86. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +0 -251
  87. package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingPenaltyScoring.js +0 -52
  88. package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +0 -243
  89. package/cypress/e2e/ILC/ListOrderingNew/checkAnswerFunctionalityForAllViews.smoke.js +0 -128
  90. package/cypress/e2e/ILC/ListOrderingNew/previewContentsForAllViews.smoke.js +0 -176
  91. package/cypress/e2e/ILC/NumberLine/LayoutSection.js +0 -530
  92. package/cypress/e2e/ILC/NumberLine/lineSettingsSection.js +0 -119
  93. package/cypress/e2e/ILC/NumberLine/numberLineSection.js +0 -263
  94. package/cypress/e2e/ILC/TextSelection/additionalSettings.js +0 -125
  95. package/cypress/e2e/ILC/TextSelection/headerSection.js +0 -73
  96. package/cypress/e2e/ILC/TextSelection/questionInstructionsAndQuestion.smoke.js +0 -179
  97. package/cypress/e2e/ILC/TextSelection/specifyCorrectAnswerSection.js +0 -89
  98. package/cypress/e2e/ILC/TextSelection/studentViewSettings.js +0 -436
  99. package/cypress/e2e/ILC/TextSelection/styleAndLayoutCustomizationAccordion.js +0 -277
  100. package/cypress/e2e/ILC/TextSelection/textSelectionModesInPreviewTab.js +0 -222
  101. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyCorrectAnswerSection.js +0 -260
  102. package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyPossibleOptionsSection.js +0 -380
  103. package/cypress/pages/components/styleAndLayoutCustomizationAccordionComponent.js +0 -46
@@ -1,91 +1,521 @@
1
+ import constants from "../fixtures/constants";
1
2
  import utilities from "../support/helpers/utilities";
2
- import { createQuestionBasePage, playbackControlsBaseComponent } from "./components";
3
+ import { dialogBoxBase } from "./dialogBoxBase";
4
+ import { selectQuestionResourceToolPage } from "./selectQuestionResourceToolPage";
5
+ import { createQuestionBasePage, commonComponents, ckEditorToolbar, equationEditorFlyout, playbackControlsBaseComponent } from "./components"
3
6
 
4
7
  const selectors = {
8
+ ...commonComponents,
9
+ ...ckEditorToolbar,
5
10
  ...playbackControlsBaseComponent,
6
- uploadAudioFileLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(0),
7
- uploadAudioFileRadioButton: () => cy.get('.ngie-radio-btn input').eq(0),
8
- addAudioURLLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(1),
9
- addAudioURLRadioButton: () => cy.get('.ngie-radio-btn input').eq(1),
10
- uploadAudioFileUploadLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(0),
11
- uploadAudioFileNameLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(1),
12
- uploadAudioChooseFileButton: () => cy.get('.choose-file-upload-button'),
13
- uploadAudioNoFileChosenLabel: () => cy.get('[aria-label="No file chosen"]').eq(0),
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),
16
+ sourceUrlInputField: () => cy.get('input[aria-label="Source URL"]'),
17
+ noFileChosenLabel: () => cy.get('[aria-label="No file chosen"]'),
14
18
  uploadedFileNameLabel: () => cy.get('.selected-file'),
19
+ uploadLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(0),
20
+ fileNameLabel: () => cy.get('[class*="AudioPlayerstyles__AudioLabel"]').eq(1),
21
+ chooseFileButton: () => cy.get('.choose-file-button'),
15
22
  fileUploadProgressBar: () => cy.get('[class*="AudioPlayerstyles__ProgressBar-"]'),
16
23
  inputTypeFile: () => cy.get('input[type="file"]'),
17
- audioDescriptionInputField: () => cy.get('.description-wrapper [role="textbox"]'),
18
- uploadTranscriptFileLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(2),
19
- uploadTranscriptFileRadioButton: () => cy.get('.ngie-radio-btn input').eq(2),
20
- typeInTranscriptLabel: () => cy.get('[class*="RadioGroupMUI5styles__RadioOptionContainer"] .ngie-radio-label').eq(3),
21
- 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),
22
33
  transcriptInputField: () => cy.get('[role="textbox"][title="Transcript"]'),
23
-
24
- //Preview tab
25
- backwardButton: () => cy.get('.forward-backward-buttons-wrapper [title*="Backward"]'),
26
- forwardButton: () => cy.get('.forward-backward-buttons-wrapper [title*="Forward"]'),
27
- playbackElapsedTime: () => cy.get('.audio-player-current-time').eq(0),
28
- playbackTotalTime: () => cy.get('.audio-player-duration').eq(0),
29
- 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'),
30
53
  audioFileSrc: () => cy.get('.audio-player-toolbar audio'),
54
+ titlePreviewTab: () => cy.get('.audio-resource-title'),
31
55
  descriptionPreviewTab: () => cy.get('.audio-resource-preview-wrapper .question-text-wrapper'),
32
56
  transcriptTitlePreviewTab: () => cy.get('.transcript-title'),
33
57
  transcriptPrintButton: () => cy.get('button[aria-label="Print preview"]'),
34
58
  transcriptModalCloseButton: () => cy.get('button[aria-label="Close"]'),
35
- transcriptContentPreviewTab: () => cy.get('.transcript-content'),
59
+ transcriptContentPreviewTab: () => cy.get('[class*="Transcriptstyles__TranscriptContent"]'),
36
60
  transcriptButton: () => cy.get('button[aria-label="Transcript"]'),
37
61
  transcriptModal: () => cy.get('[class*="Transcriptstyles__TranscriptWrapper"]'),
62
+ audioDownloadButton: () => cy.get('.audio-download-icon-wr'),
63
+ playbackLimitHelpText: () => cy.get('.playback-limit-remaining'),
64
+ playbackPlayer: () => cy.get('.audio-player-toolbar')
38
65
  }
39
66
 
40
67
  const steps = {
41
- ...playbackControlsBaseComponent.steps,
42
68
  ...createQuestionBasePage.steps,
69
+ ...ckEditorToolbar.steps,
70
+ ...equationEditorFlyout.steps,
71
+ ...commonComponents.steps,
72
+ ...playbackControlsBaseComponent.steps,
73
+ verifyAddUrlCheckedState: () => {
74
+ audioPlayerPage.addUrlRadioButton()
75
+ .should('be.checked');
76
+ },
77
+
78
+ verifyAddUrlUncheckedState: () => {
79
+ audioPlayerPage.addUrlRadioButton()
80
+ .should('not.be.checked');
81
+ },
82
+
83
+ clickOnAddUrlRadioButton: () => {
84
+ audioPlayerPage.addUrlRadioButton()
85
+ .click();
86
+ },
87
+
88
+ verifyAddAudioFileCheckedState: () => {
89
+ audioPlayerPage.addAudioFileRadioButton()
90
+ .should('be.checked');
91
+ },
92
+
93
+ verifyAddAudioFileUncheckedState: () => {
94
+ audioPlayerPage.addAudioFileRadioButton()
95
+ .should('not.be.checked');
96
+ },
97
+
98
+ clickOnAddAudioFileRadioButton: () => {
99
+ audioPlayerPage.addAudioFileRadioButton()
100
+ .click();
101
+ },
102
+
103
+ focusInAndFocusOutOfSourceURLInputField: () => {
104
+ audioPlayerPage.sourceUrlInputField()
105
+ .click()
106
+ .blur();
107
+ },
108
+
43
109
  /**
44
- * Uploads a file to the audio player by attaching the file located at the specified filePath.
45
- * @param {string} filePath - The file path to the file to be uploaded.
46
- * @returns {void}
47
- */
110
+ * Enters text into the source URL input field on the audio player page.
111
+ * @param {string} text - The text to be entered into the source URL input field.
112
+ * @returns {void}
113
+ */
114
+ enterTextInSourceURLInputField: (text) => {
115
+ audioPlayerPage.sourceUrlInputField()
116
+ .type(text, { delay: 0 })
117
+ .blur();
118
+ },
119
+
120
+ clearTextInSourceURLInputField: () => {
121
+ audioPlayerPage.sourceUrlInputField()
122
+ .clear();
123
+ },
124
+
125
+ /**
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}
129
+ */
48
130
  uploadFile: (filePath) => {
49
131
  audioPlayerPage.inputTypeFile()
50
132
  .attachFile(filePath);
51
133
  utilities.verifyElementVisibilityState(audioPlayerPage.fileUploadProgressBar(), 'hidden');
52
134
  },
53
135
 
54
- addInputToAudioDescriptionInputField: (text) => {
55
- audioPlayerPage.audioDescriptionInputField()
136
+ verifyPlayerTypeDropdownDisabledState: () => {
137
+ audioPlayerPage.playerTypeDropdown()
138
+ .should('have.class', 'Mui-disabled');
139
+ },
140
+
141
+ /**
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}
145
+ */
146
+ setPlaybackLimit: (value) => {
147
+ audioPlayerPage.playbackLimitInputField()
148
+ .clear()
149
+ .type(value)
150
+ },
151
+
152
+ /**
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}
156
+ */
157
+ verifyPlaybackLimitInputFieldValue: (value) => {
158
+ audioPlayerPage.playbackLimitInputField()
159
+ .should('have.attr', 'value', value);
160
+ },
161
+
162
+ focusInAndFocusOutOfPlaybackLimitInputField: () => {
163
+ audioPlayerPage.playbackLimitInputField()
164
+ .click()
165
+ .blur();
166
+ },
167
+
168
+ /**
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}
172
+ */
173
+ enterTextInTitleInputField: (text) => {
174
+ audioPlayerPage.titleInputField()
175
+ .type(text, { delay: 0 });
176
+ },
177
+
178
+ /**
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.
181
+ * @returns {void}
182
+ */
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()
56
195
  .type(text)
57
- .should('have.text', text)
58
196
  .blur();
59
197
  },
60
198
 
61
- selectTypeInTranscriptRadioButton: () => {
62
- audioPlayerPage.typeInTranscriptRadioButton()
63
- .click()
64
- .should('be.checked');
199
+ clearDescriptionInputField: () => {
200
+ audioPlayerPage.descriptionInputField()
201
+ .clear();
202
+ },
203
+
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();
65
263
  },
66
264
 
67
265
  enterTextInTranscriptInputField: (text) => {
68
266
  audioPlayerPage.transcriptInputField()
69
267
  .type(text)
70
- .should('have.text', text)
71
268
  .blur();
72
269
  },
73
270
 
74
- verifyUploadAudioFileRadioButtonIsSelected: () => {
75
- audioPlayerPage.uploadAudioFileRadioButton()
76
- .should('be.checked');
271
+ clearTranscriptInputField: () => {
272
+ audioPlayerPage.transcriptInputField()
273
+ .clear();
77
274
  },
78
275
 
79
- verifyUploadAudioFileRadioButtonIsNotSelected: () => {
80
- audioPlayerPage.uploadAudioFileRadioButton()
81
- .should('not.be.checked');
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
+ });
82
479
  },
83
480
 
84
- verifyAddAudioURLRadioButtonIsNotSelected: () => {
85
- audioPlayerPage.addAudioURLRadioButton()
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()
86
506
  .should('not.be.checked');
87
507
  },
88
508
 
509
+ verifyAllowStudentsToDownloadAudioCheckboxChecked: () => {
510
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
511
+ .should('be.checked');
512
+ },
513
+
514
+ checkUncheckAllowStudentsToDownloadAudioCheckbox: () => {
515
+ audioPlayerPage.allowStudentsToDownloadAudioCheckbox()
516
+ .click();
517
+ },
518
+
89
519
  //Preview tab
90
520
  waitForPlaybackToBegin: () => {
91
521
  steps.waitForAudioFileSrcToLoad();
@@ -93,25 +523,18 @@ const steps = {
93
523
  .should('have.text', '00:01');
94
524
  },
95
525
 
96
- waitForAudioFileSrcToLoad: () => {
97
- audioPlayerPage.audioFileSrc()
98
- .should('have.attr', 'src')
99
- .and('not.be.empty');
100
- },
101
-
102
-
103
526
  /**
104
- * Verifies the audio playback timer on the audio player.
105
- * @param {string} time - The elapsed time and total time in the format "elapsed/total."
106
- * @returns {void}
107
- */
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
+ */
108
531
  verifyAudioPlaybackTimer: (time) => {
109
532
  const elapsedTime = time.split('/')[0];
110
533
  const totalTime = time.split('/')[1];
111
534
  audioPlayerPage.playbackElapsedTime()
112
535
  .should('have.text', elapsedTime)
113
536
  audioPlayerPage.playbackTotalTime()
114
- .should('have.text', totalTime)
537
+ .should('have.text', `/${totalTime}`)
115
538
  },
116
539
 
117
540
  /**
@@ -127,10 +550,75 @@ const steps = {
127
550
  audioPlayerPage.transcriptButton()
128
551
  .click();
129
552
  },
553
+
554
+ closeTranscriptModal: () => {
555
+ audioPlayerPage.transcriptModalCloseButton()
556
+ .click();
557
+ },
558
+
559
+ focusAwayFromElement: () => {
560
+ cy.get('body')
561
+ .click({ position: 'topLeft' });
562
+ },
563
+
564
+ verifyWindowOpenMethodAfterClickingOnDownloadAudioButton: () => {
565
+ cy.window()
566
+ .then((win) => {
567
+ cy.stub(win, 'open')
568
+ .as('windowOpen')
569
+ });
570
+ audioPlayerPage.audioDownloadButton()
571
+ .click();
572
+ cy.get('@windowOpen')
573
+ .should('be.calledWith', '');
574
+ },
575
+
576
+ waitForAudioFileSrcToLoad: () => {
577
+ audioPlayerPage.audioFileSrc()
578
+ .should('have.attr', 'src')
579
+ .and('not.be.empty');
580
+ }
130
581
  }
131
582
 
132
583
  const tests = {
584
+ ...createQuestionBasePage.tests,
585
+ ...commonComponents.tests,
586
+ //Header section
587
+ verifyCancelButton: () => {
588
+ it('When user has made no edits and clicks on Cancel button, the user should be directed back to the \'Select a Question\' page', () => {
589
+ createQuestionBasePage.cancelButton()
590
+ .click();
591
+ utilities.verifyElementVisibilityState(selectQuestionResourceToolPage.selectAQuestionHeaderText(), 'visible');
592
+ utilities.verifyElementVisibilityState(selectQuestionResourceToolPage.questionTypeOptionTitle(), 'visible');
593
+ });
594
+
595
+ it('When user has made some edits/changes and clicks on Cancel button, a popup should be displayed', () => {
596
+ selectQuestionResourceToolPage.steps.selectResourceType('Audio Player');
597
+ audioPlayerPage.steps.setPlaybackLimit('5');
598
+ createQuestionBasePage.cancelButton()
599
+ .click();
600
+ utilities.verifyElementVisibilityState(dialogBoxBase.dialogBox(), 'visible')
601
+ });
133
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
+ },
134
622
  }
135
623
 
136
624
  export const audioPlayerPage = {
@@ -112,7 +112,7 @@ const tests = {
112
112
  ...scoringSectionBaseEditTab.tests,
113
113
  ...additionalSettingsPanel.tests,
114
114
  ...additionalSettingsAccessibilitySectionComponent.tests,
115
- ...toolSettingsComponent.tests,
115
+ ...toolSettingsComponent.steps,
116
116
  }
117
117
 
118
118
  export const brainingCampManipulativePage = {