itemengine-cypress-automation 1.0.192-8MayFixes-959a25e.0 → 1.0.192

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. package/cypress/e2e/ILC/ImageHighlight/allOrNothingForAllViews.smoke.js +1 -2
  2. package/cypress/e2e/ILC/ImageHighlight/previewContentsForAllViews.smoke.js +2 -1
  3. package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +1 -1
  4. package/cypress/e2e/ILC/NumberLine/verticalNumberLine/previewTabContentsForAllViews.smoke.js +1 -1
  5. package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +2 -1
  6. package/cypress/e2e/ILC/UploadResponse/previewContentsForAllViews.smoke.js +6 -7
  7. package/cypress/e2e/ILC/VideoResponseNew/compactRecorderStyle.smoke.js +605 -0
  8. package/cypress/e2e/ILC/VideoResponseNew/customizePlaybackControlsCompactRecorderStyle.js +300 -0
  9. package/cypress/e2e/ILC/VideoResponseNew/{customizePlaybackControls.js → customizePlaybackControlsStandardRecorderStyle.js} +7 -4
  10. package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +93 -0
  11. package/cypress/e2e/ILC/VideoResponseNew/gradingViewAndCorrectAnswerViewContents.smoke.js +1 -1
  12. package/cypress/e2e/ILC/VideoResponseNew/previewContentsForAllViews.smoke.js +2 -2
  13. package/cypress/e2e/ILC/VideoResponseNew/standardRecorderStyle.js +4 -42
  14. package/cypress/e2e/ILC/VideoResponseNew/studentViewSettingsCompactRecorderStyle.js +268 -0
  15. package/cypress/fixtures/uploads/sampleVirus.zip +0 -0
  16. package/package.json +1 -1
  17. /package/cypress/e2e/ILC/VideoResponseNew/{studentViewSettings.js → studentViewSettingsStandardRecorderStyle.js} +0 -0
  18. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosFourFunctionCalculatorEditTabBasicSection.js +0 -0
  19. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosFourFunctionCalculatorPreviewContents.smoke.js +0 -0
  20. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosGeometryToolEditTabBasicSection.js +0 -0
  21. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosGeometryToolPreviewContents.smoke.js +0 -0
  22. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosGraphingCalculatorEditTabBasicSection.js +0 -0
  23. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosGraphingCalculatorPreviewContents.smoke.js +0 -0
  24. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosMatrixCalculatorEditTabBasicSection.js +0 -0
  25. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosMatrixCalculatorPreviewContents.smoke.js +0 -0
  26. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosScientificCalculatorEditTabBasicSection.js +0 -0
  27. /package/cypress/e2e/{ILC/ThirdPartyDesmos → ThirdPartyQuestions/Desmos}/desmosScientificCalculatorPreviewContents.smoke.js +0 -0
  28. /package/cypress/e2e/{ILC/ThirdPartyDesmosGraphing → ThirdPartyQuestions/DesmosGraphing}/additionalSettings.js +0 -0
  29. /package/cypress/e2e/{ILC/ThirdPartyDesmosGraphing → ThirdPartyQuestions/DesmosGraphing}/editTabBasic.js +0 -0
  30. /package/cypress/e2e/{ILC/ThirdPartyDesmosGraphing → ThirdPartyQuestions/DesmosGraphing}/editTabScoring.js +0 -0
  31. /package/cypress/e2e/{ILC/ThirdPartyDesmosGraphing → ThirdPartyQuestions/DesmosGraphing}/gradingViewAndCorrectAnswerViewContents.smoke.js +0 -0
  32. /package/cypress/e2e/{ILC/ThirdPartyDesmosGraphing → ThirdPartyQuestions/DesmosGraphing}/previewTabContent.smoke.js +0 -0
  33. /package/cypress/e2e/{ILC/ThirdPartyDesmosGraphing → ThirdPartyQuestions/DesmosGraphing}/studentViewSettings.js +0 -0
  34. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/3DGraphingCalculatorEditTabBasicSection.js +0 -0
  35. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/3DGraphingCalculatorPreviewTabContents.smoke.js +0 -0
  36. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/casCalculatorEditTabBasicSection.js +0 -0
  37. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/casCalculatorPreviewTabContents.smoke.js +0 -0
  38. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/geometryCalculatorEditTabBasicSection.js +0 -0
  39. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/geometryCalculatorPreviewTabContents.smoke.js +0 -0
  40. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/graphingCalculatorEditTabBasicSection.js +0 -0
  41. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/graphingCalculatorPreviewTabContents.smoke.js +0 -0
  42. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/probablityCalculatorEditTabBasicSection.js +0 -0
  43. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/probablityCalculatorPreviewTabContents.smoke.js +0 -0
  44. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/scientificCalculatorEditTabBasicSection.js +0 -0
  45. /package/cypress/e2e/{ILC/ThirdPartyGeoGebra → ThirdPartyQuestions/GeoGebra}/scientificCalculatorPreviewTabContents.smoke.js +0 -0
  46. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/additionalSettings.js +0 -0
  47. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/editTabScoringSection.js +0 -0
  48. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/gradingViewAndCorrectAnswerViewContents.smoke.js +0 -0
  49. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/headerSection.js +0 -0
  50. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/insertResourceLink.js +0 -0
  51. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/previewTabContent.smoke.js +0 -0
  52. /package/cypress/e2e/{ILC/ThirdPartyGeogebraActivity → ThirdPartyQuestions/GeogebraActivity}/questionInstructions.js +0 -0
@@ -0,0 +1,300 @@
1
+ import { videoResponsePage } from '../../../pages/videoResponsePage';
2
+ import abortEarlySetup from "../../../support/helpers/abortEarly";
3
+ import utilities from '../../../support/helpers/utilities';
4
+ const css = Cypress.env('css');
5
+
6
+ describe('Create Item page - Video response: Customize playback controls (for student player) - Compact recorder style', () => {
7
+ before(() => {
8
+ cy.loginAs('admin');
9
+ });
10
+
11
+ describe('\'Customize playback controls (for student player)\' section for - Compact recorder style', () => {
12
+ abortEarlySetup();
13
+ before(() => {
14
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
15
+ cy.barsPreLoaderWait();
16
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
17
+ });
18
+
19
+ it('\'Customize playback controls (for student player)\' accordion should be displayed and by default it should be in collapsed state', () => {
20
+ utilities.verifyInnerText(videoResponsePage.customizePlaybackControlsAccordion(), 'Customize playback controls (for student player)');
21
+ videoResponsePage.steps.verifyCustomizePlaybackControlsAccordionCollapsedState();
22
+ });
23
+
24
+ it('User should be able to expand and collapse \'Customize playback controls (for student player)\' accordion', () => {
25
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
26
+ videoResponsePage.steps.collapseCustomizePlaybackControlsAccordion();
27
+ });
28
+
29
+ it('\'Controls for playback\' label should be displayed', () => {
30
+ cy.log('Pre-step : Expanding \'Customize playback controls (for student player)\' accordion');
31
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
32
+ utilities.verifyInnerText(videoResponsePage.controlsForPlaybackLabel(), 'Controls for playback');
33
+ });
34
+
35
+ it('\'Controls for playback\' options - "Play", "Pause", "Seek", "Record again", "Volume", "Playback speed", "Full screen" and "Forward/Backward" should be displayed. By default, all options except for "Forward/Backward" should be in selected state', () => {
36
+ utilities.verifyElementVisibilityState(videoResponsePage.playButtonControlsForPlayback(), 'visible');
37
+ utilities.verifyInnerText(utilities.getNthElement(videoResponsePage.controlsForPlaybackButtonLabel(), 0), 'Play');
38
+ utilities.verifyElementVisibilityState(videoResponsePage.pauseButtonControlsForPlayback(), 'visible');
39
+ utilities.verifyInnerText(utilities.getNthElement(videoResponsePage.controlsForPlaybackButtonLabel(), 1), 'Pause');
40
+ utilities.verifyElementVisibilityState(videoResponsePage.seekButtonControlsForPlayback(), 'visible');
41
+ utilities.verifyInnerText(utilities.getNthElement(videoResponsePage.controlsForPlaybackButtonLabel(), 2), 'Seek');
42
+ utilities.verifyElementVisibilityState(videoResponsePage.recordAgainButtonControlsForPlayback(), 'visible');
43
+ utilities.verifyInnerText(utilities.getNthElement(videoResponsePage.controlsForPlaybackButtonLabel(), 3), 'Record again');
44
+ utilities.verifyElementVisibilityState(videoResponsePage.volumeButtonControlsForPlayback(), 'visible');
45
+ utilities.verifyInnerText(utilities.getNthElement(videoResponsePage.controlsForPlaybackButtonLabel(), 4), 'Volume');
46
+ utilities.verifyElementVisibilityState(videoResponsePage.playbackSpeedButtonControlsForPlayback(), 'visible');
47
+ utilities.verifyInnerText(utilities.getNthElement(videoResponsePage.controlsForPlaybackButtonLabel(), 5), 'Playback speed');
48
+ utilities.verifyElementVisibilityState(videoResponsePage.fullScreenButtonControlsForPlayback(), 'notExist');
49
+ utilities.verifyElementVisibilityState(videoResponsePage.forwardBackwardButtonControlsForPlayback(), 'notExist');
50
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Play');
51
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Pause');
52
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Seek');
53
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Record again');
54
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Volume');
55
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Playback speed');
56
+ });
57
+
58
+ it('CSS of \'Customize playback controls (for student player)\' section', { tags: 'css' }, () => {
59
+ utilities.verifyCSS(videoResponsePage.customizePlaybackControlsAccordion().find('.customize_recorder_label'), {
60
+ 'color': css.color.accordionLabel,
61
+ 'font-size': css.fontSize.default,
62
+ 'font-weight': css.fontWeight.bold
63
+ });
64
+ utilities.verifyCSS(videoResponsePage.controlsForPlaybackLabel(), {
65
+ 'color': css.color.sectionHeading,
66
+ 'font-size': css.fontSize.normal,
67
+ 'font-weight': css.fontWeight.semibold
68
+ });
69
+ utilities.verifyCSS(videoResponsePage.playButtonControlsForPlayback(), {
70
+ 'color': css.color.defaultBackground,
71
+ 'background-color': css.color.activeButtons,
72
+ 'border': `1px solid ${css.color.activeButtons}`
73
+ });
74
+ utilities.verifyCSS(videoResponsePage.tickIconForOptionButtons(), {
75
+ 'background-color': css.color.defaultBackground,
76
+ });
77
+ utilities.verifyCSS(videoResponsePage.tickIconForOptionButtons().find('[data-name="Icon feather-check"]'), {
78
+ 'fill': css.color.activeButtons,
79
+ });
80
+ utilities.verifyCSS(videoResponsePage.controlsForPlaybackButtonLabel(), {
81
+ 'color': css.color.customizeControlButtonLabels,
82
+ 'font-size': css.fontSize.normal,
83
+ 'font-weight': css.fontWeight.semibold
84
+ });
85
+ });
86
+
87
+ it('When the user deselects the \'Play\' button, all other controls for playback buttons except "Record again" should get deselected and disabled. Progress indicator and timer buttons should also get deselected from the \'Video settings\' section. The timer button should be in enabled state', () => {
88
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Play');
89
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Play');
90
+ utilities.verifyElementDisabled(videoResponsePage.pauseButtonControlsForPlayback());
91
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Pause');
92
+ utilities.verifyElementDisabled(videoResponsePage.pauseButtonControlsForPlayback());
93
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Seek');
94
+ utilities.verifyElementDisabled(videoResponsePage.seekButtonControlsForPlayback());
95
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonSelectedState('Record again');
96
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Volume');
97
+ utilities.verifyElementDisabled(videoResponsePage.volumeButtonControlsForPlayback());
98
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Playback speed');
99
+ utilities.verifyElementDisabled(videoResponsePage.playbackSpeedButtonControlsForPlayback());
100
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonSelectedState('Timer');
101
+ utilities.verifyElementNotDisabled(videoResponsePage.timerButtonVideoSettings());
102
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonDeselectedState('Progress indicator');
103
+ utilities.verifyElementDisabled(videoResponsePage.progressIndicatorButtonVideoSettings());
104
+ });
105
+
106
+ it('When the user selects the \'Play\' button, "Pause", "Volume", "Playback speed" should get enabled but continue to stay in deselected state. "Progress indicator" should also get enabled from the \'Video settings\' section. "Seek" button should continue to stay in disabled state while "Progress indicator" is in deselected state.', () => {
107
+ videoResponsePage.steps.selectControlsForPlaybackToggleButton('Play');
108
+ utilities.verifyElementNotDisabled(videoResponsePage.pauseButtonControlsForPlayback());
109
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Pause');
110
+ utilities.verifyElementDisabled(videoResponsePage.seekButtonControlsForPlayback());
111
+ utilities.verifyElementNotDisabled(videoResponsePage.volumeButtonControlsForPlayback());
112
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Volume');
113
+ utilities.verifyElementNotDisabled(videoResponsePage.playbackSpeedButtonControlsForPlayback());
114
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Playback speed');
115
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonSelectedState('Timer');
116
+ utilities.verifyElementNotDisabled(videoResponsePage.timerButtonVideoSettings());
117
+ utilities.verifyElementNotDisabled(videoResponsePage.progressIndicatorButtonVideoSettings());
118
+ });
119
+
120
+ it('When the user selects the "Progress indicator" button, "Seek" button should get enabled', () => {
121
+ videoResponsePage.steps.selectVideoSettingsToggleButton('Progress indicator');
122
+ utilities.verifyElementNotDisabled(videoResponsePage.seekButtonControlsForPlayback());
123
+ });
124
+ });
125
+
126
+ describe('Controls for playback - Play', () => {
127
+ abortEarlySetup();
128
+ before(() => {
129
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
130
+ cy.barsPreLoaderWait();
131
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
132
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
133
+ });
134
+
135
+ it('In compact mode, when the \'Play\' option is selected the play button should be enabled in the playback player of preview tab', () => {
136
+ videoResponsePage.steps.switchToPreviewTab();
137
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
138
+ utilities.verifyElementVisibilityState(videoResponsePage.playPlaybackButtonCompactPreview(), 'visible');
139
+ utilities.verifyElementVisibilityState(videoResponsePage.playPlaybackFlyoutButton(), 'visible');
140
+ });
141
+
142
+ it('In compact mode, when the play option is deselected the play button should be disabled in the preview tab and player should not able to playback the recording. "Your response has been recorded." should be displayed in the flyout', () => {
143
+ cy.log('Pre-step : Switching to Edit tab and deselecting Play button');
144
+ videoResponsePage.steps.switchToEditTab();
145
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Play');
146
+ cy.log('Switching to Preview tab');
147
+ videoResponsePage.steps.switchToPreviewTab();
148
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
149
+ utilities.verifyElementVisibilityState(videoResponsePage.playPlaybackButtonCompactPreview(), 'notExist');
150
+ utilities.verifyElementVisibilityState(videoResponsePage.playPlaybackFlyoutButton(), 'notExist');
151
+ utilities.verifyInnerText(videoResponsePage.recordedResponseHelpText(), 'Your response has been recorded.');
152
+ });
153
+ });
154
+
155
+ describe('Controls for playback - Pause', () => {
156
+ abortEarlySetup();
157
+ before(() => {
158
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
159
+ cy.barsPreLoaderWait();
160
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
161
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
162
+ });
163
+
164
+ it('In compact mode, when the \'Pause\' option is selected the pause button should be enabled in the preview tab', () => {
165
+ videoResponsePage.steps.switchToPreviewTab();
166
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
167
+ videoResponsePage.steps.startPlaybackCompactPreview();
168
+ utilities.verifyElementNotDisabled(videoResponsePage.pausePlaybackButtonCompactPreview());
169
+ utilities.verifyElementNotDisabled(videoResponsePage.pausePlaybackFlyoutButton());
170
+ });
171
+
172
+ it('In compact mode, when the pause option is deselected the pause button should be disabled in the preview tab and player should not able to pause recorded response', () => {
173
+ videoResponsePage.steps.switchToEditTab();
174
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Pause');
175
+ videoResponsePage.steps.switchToPreviewTab();
176
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
177
+ videoResponsePage.steps.startPlaybackCompactPreview();
178
+ utilities.verifyElementDisabled(videoResponsePage.pausePlaybackButtonCompactPreview());
179
+ utilities.verifyElementDisabled(videoResponsePage.pausePlaybackFlyoutButton());
180
+ });
181
+ });
182
+
183
+ describe('Controls for playback - Seek', () => {
184
+ abortEarlySetup();
185
+ before(() => {
186
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
187
+ cy.barsPreLoaderWait();
188
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
189
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
190
+ videoResponsePage.steps.switchToPreviewTab();
191
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
192
+ });
193
+
194
+ it('In compact mode, when the \'Seek\' option is selected the seek functionality should be enabled in the preview tab user should be able to seek the video from the progress bar and waveform', () => {
195
+ let actualVideoSeekedInPercent = 50
196
+ videoResponsePage.steps.startPlaybackCompactPreview();
197
+ videoResponsePage.steps.waitForPlaybackToBeginCompactPreview();
198
+ cy.log('Clicking at the middle of the progress bar to seek till 50% of the recording');
199
+ videoResponsePage.steps.seekProgressBarSliderToCenter();
200
+ videoResponsePage.steps.verifyProgressBarSliderPosition(actualVideoSeekedInPercent);
201
+ utilities.verifyElementVisibilityState(videoResponsePage.progressBarSlider(), 'exist');
202
+ });
203
+
204
+ it('In compact mode, when the \'Seek\' option is deselected, the progress bar should not have a slider handle and waveform should not have cursor if user hover on it and user should not be able to seek the video from the progress bar and waveform', () => {
205
+ let actualVideoSeekedInPercent = 25
206
+ cy.log('Pre-step: Switching to Edit tab, deselecting \'Seek\' button, switching back to Preview tab and saving a record response');
207
+ videoResponsePage.steps.switchToEditTab();
208
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Seek');
209
+ videoResponsePage.steps.switchToPreviewTab();
210
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(4000);
211
+ videoResponsePage.steps.startPlaybackCompactPreview();
212
+ videoResponsePage.steps.waitForPlaybackToBeginCompactPreview();
213
+ videoResponsePage.steps.pausePlaybackCompactPreview();
214
+ cy.log('Clicking at the middle of the progress bar to seek till 50% of the recording');
215
+ videoResponsePage.steps.seekProgressBarSliderToCenter();
216
+ videoResponsePage.steps.verifyProgressBarSliderPosition(actualVideoSeekedInPercent);
217
+ utilities.verifyElementVisibilityState(videoResponsePage.progressBarSlider(), 'hidden');
218
+ });
219
+ });
220
+
221
+ describe('Controls for playback - Record again', () => {
222
+ abortEarlySetup();
223
+ before(() => {
224
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
225
+ cy.barsPreLoaderWait();
226
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
227
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
228
+ });
229
+
230
+ it('In compact mode, when the \'Record again\' option is selected the record again button should be enabled in the preview tab', () => {
231
+ videoResponsePage.steps.switchToPreviewTab();
232
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
233
+ videoResponsePage.steps.startPlaybackCompactPreview();
234
+ utilities.verifyElementNotDisabled(videoResponsePage.retakeButtonCompactPreview());
235
+ });
236
+
237
+ it('In compact mode, when the record again option is deselected the record again button should be disabled in the preview tab and player should not able to retake the recorded response', () => {
238
+ videoResponsePage.steps.switchToEditTab();
239
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Record again');
240
+ videoResponsePage.steps.switchToPreviewTab();
241
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
242
+ videoResponsePage.steps.startPlaybackCompactPreview();
243
+ utilities.verifyElementVisibilityState(videoResponsePage.retakeButtonCompactPreview(), 'notExist');
244
+ });
245
+ });
246
+
247
+ describe('Controls for playback - Volume', () => {
248
+ abortEarlySetup();
249
+ before(() => {
250
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
251
+ cy.barsPreLoaderWait();
252
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
253
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
254
+ });
255
+
256
+ it('In compact mode, when the \'Volume\' option is selected the volume button should be enabled in the preview tab', () => {
257
+ videoResponsePage.steps.switchToPreviewTab();
258
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
259
+ videoResponsePage.steps.startPlaybackCompactPreview();
260
+ videoResponsePage.steps.verifyVolumeButtonEnabledState();
261
+ });
262
+
263
+ it('In compact mode, when the volume option is deselected \'volume\' should not be displayed on the playback player', () => {
264
+ cy.log('Pre-step : User switches to Edit tab, deselects \'volume\' button, switches back to Preview tab and saves a recording');
265
+ videoResponsePage.steps.switchToEditTab();
266
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Volume');
267
+ videoResponsePage.steps.switchToPreviewTab();
268
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
269
+ videoResponsePage.steps.startPlaybackCompactPreview();
270
+ utilities.verifyElementVisibilityState(videoResponsePage.volumeControlButton(), 'notExist');
271
+ });
272
+ });
273
+
274
+ describe('Controls for playback - Playback speed', () => {
275
+ abortEarlySetup();
276
+ before(() => {
277
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
278
+ cy.barsPreLoaderWait();
279
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
280
+ videoResponsePage.steps.expandCustomizePlaybackControlsAccordion();
281
+ });
282
+
283
+ it('In compact mode, when the \'Playback speed\' option is selected the \'Playback speed\' button should be enabled in the preview tab', () => {
284
+ videoResponsePage.steps.switchToPreviewTab();
285
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
286
+ videoResponsePage.steps.startPlaybackCompactPreview();
287
+ videoResponsePage.steps.verifyPlaybackSpeedButtonEnabledState();
288
+ });
289
+
290
+ it('In compact mode, when the \'Playback speed\' option is deselected \'Playback speed\' button should not be displayed on the playback player', () => {
291
+ cy.log('Pre-step : User switches to Edit tab, deselects \'Playback speed\' button, switches back to Preview tab and saves a recording');
292
+ videoResponsePage.steps.switchToEditTab();
293
+ videoResponsePage.steps.deselectControlsForPlaybackToggleButton('Playback speed');
294
+ videoResponsePage.steps.switchToPreviewTab();
295
+ videoResponsePage.steps.recordAndSaveVideoCompactPreview(5000);
296
+ videoResponsePage.steps.startPlaybackCompactPreview();
297
+ utilities.verifyElementVisibilityState(videoResponsePage.playbackSpeedButton(), 'notExist');
298
+ });
299
+ });
300
+ });
@@ -3,7 +3,7 @@ import abortEarlySetup from "../../../support/helpers/abortEarly";
3
3
  import utilities from '../../../support/helpers/utilities';
4
4
  const css = Cypress.env('css');
5
5
 
6
- describe('Create Item page - video response: Customize playback controls', () => {
6
+ describe('Create Item page - Video response: Customize playback controls', () => {
7
7
  before(() => {
8
8
  cy.loginAs('admin');
9
9
  });
@@ -109,20 +109,23 @@ describe('Create Item page - video response: Customize playback controls', () =>
109
109
  utilities.verifyElementDisabled(videoResponsePage.fullScreenButtonControlsForPlayback());
110
110
  videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Forward/Backward');
111
111
  utilities.verifyElementDisabled(videoResponsePage.forwardBackwardButtonControlsForPlayback());
112
- videoResponsePage.steps.verifyVideoSettingsToggleButtonDeselectedState('Timer');
112
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonSelectedState('Timer');
113
113
  utilities.verifyElementNotDisabled(videoResponsePage.timerButtonVideoSettings());
114
114
  videoResponsePage.steps.verifyVideoSettingsToggleButtonDeselectedState('Progress indicator');
115
115
  utilities.verifyElementDisabled(videoResponsePage.progressIndicatorButtonVideoSettings());
116
116
  });
117
117
 
118
- //Note: Need to update below case after https://redmine.zeuslearning.com/issues/570839 gets resolved
119
- it('When the user selects the \'Play\' button, "Pause", "Volume", "Playback speed" and "Full screen" should get enabled. "Progress indicator" and "Timer" buttons should also get enabled from the \'Video settings\' section. "Seek" button should continue to stay in disabled state while "Progress indicator" is in deselected state.', () => {
118
+ it('When the user selects the \'Play\' button, "Pause", "Volume", "Playback speed", "Full screen", "Forward/Backward" should get enabled but continue to stay in deselected state. "Progress indicator" should also get enabled from the \'Video settings\' section. "Seek" button should continue to stay in disabled state while "Progress indicator" is in deselected state.', () => {
120
119
  videoResponsePage.steps.selectControlsForPlaybackToggleButton('Play');
121
120
  utilities.verifyElementNotDisabled(videoResponsePage.pauseButtonControlsForPlayback());
121
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Pause');
122
122
  utilities.verifyElementDisabled(videoResponsePage.seekButtonControlsForPlayback());
123
123
  utilities.verifyElementNotDisabled(videoResponsePage.volumeButtonControlsForPlayback());
124
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Volume');
124
125
  utilities.verifyElementNotDisabled(videoResponsePage.playbackSpeedButtonControlsForPlayback());
126
+ videoResponsePage.steps.verifyControlsForPlaybackToggleButtonDeselectedState('Playback speed');
125
127
  utilities.verifyElementNotDisabled(videoResponsePage.fullScreenButtonControlsForPlayback());
128
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonSelectedState('Timer');
126
129
  utilities.verifyElementNotDisabled(videoResponsePage.timerButtonVideoSettings());
127
130
  utilities.verifyElementNotDisabled(videoResponsePage.progressIndicatorButtonVideoSettings());
128
131
  });
@@ -12,6 +12,7 @@ describe('Create item page - Video response: Question instructions, Maximum reco
12
12
  abortEarlySetup();
13
13
  before(() => {
14
14
  videoResponsePage.steps.navigateToCreateQuestion('video response');
15
+ cy.barsPreLoaderWait();
15
16
  });
16
17
 
17
18
  videoResponsePage.tests.verifyQuestionInstructionsInputFieldEditTab();
@@ -21,16 +22,107 @@ describe('Create item page - Video response: Question instructions, Maximum reco
21
22
  abortEarlySetup();
22
23
  before(() => {
23
24
  videoResponsePage.steps.navigateToCreateQuestion('video response');
25
+ cy.barsPreLoaderWait();
24
26
  });
25
27
 
26
28
  videoResponsePage.tests.verifyQuestionInstructionsInputFieldPreviewTab();
27
29
  });
28
30
 
31
+ describe('Video recorder style toggle buttons', () => {
32
+ abortEarlySetup();
33
+ before(() => {
34
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
35
+ cy.barsPreLoaderWait();
36
+ });
37
+
38
+ it('\'Video recorder style\' label should be displayed along with three toggle buttons, "Standard" and "Compact". "Standard" button should be selected by default', () => {
39
+ utilities.verifyInnerText(videoResponsePage.videoRecorderStyleLabel(), 'Video recorder style');
40
+ utilities.verifyInnerText(videoResponsePage.standardRecorderStyleButton(), 'Standard');
41
+ utilities.verifyInnerText(videoResponsePage.compactRecorderStyleButton(), 'Compact');
42
+ videoResponsePage.steps.verifyStandardRecorderStyleToggleButtonSelectedState();
43
+ });
44
+
45
+ it('CSS of video Recorder Style section', { tags: 'css' }, () => {
46
+ utilities.verifyCSS(videoResponsePage.videoRecorderStyleLabel(), {
47
+ 'color': css.color.labels,
48
+ 'font-size': css.fontSize.normal,
49
+ 'font-weight': css.fontWeight.semibold
50
+ });
51
+ utilities.verifyCSS(videoResponsePage.standardRecorderStyleButton(), {
52
+ 'color': css.color.defaultBackground,
53
+ 'background-color': css.color.activeButtons,
54
+ 'font-size': css.fontSize.default,
55
+ 'font-weight': css.fontWeight.regular
56
+ });
57
+ });
58
+
59
+ it('When "Standard" option is selected in the video recorder style toggle buttons section, then "Video recorder default width (px)" label and input field should not be displayed', () => {
60
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonSelectedState('Timer');
61
+ videoResponsePage.steps.verifyVideoSettingsToggleButtonSelectedState('Progress indicator');
62
+ utilities.verifyElementVisibilityState(videoResponsePage.videoRecorderDefaultWidthLabel(), 'notExist');
63
+ utilities.verifyElementVisibilityState(videoResponsePage.videoRecorderDefaultWidthInputField(), 'notExist');
64
+ });
65
+
66
+ it('When the user selects "Compact" option in the video recorder style toggle buttons section, then "Video recorder default width (px)" label and input field should be displayed. By default, the input field value should be "324px"', () => {
67
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
68
+ utilities.verifyInnerText(videoResponsePage.videoRecorderDefaultWidthLabel(), "Video recorder default width (px)");
69
+ videoResponsePage.steps.verifyVideoRecorderDefaultWidthInputFieldValue(324);
70
+ });
71
+
72
+ it('When the user clears the "Video recorder default width (px)" value, then no error message should disappear', () => {
73
+ videoResponsePage.steps.clearVideoRecorderDefaultWidthInputField();
74
+ videoResponsePage.steps.verifyErrorMessageIsNotDisplayed();
75
+ });
76
+
77
+ it('When user adds decimal values or alphanumeric values then only numeric values should be displayed in the maximum recording length input field', () => {
78
+ videoResponsePage.steps.setVideoRecorderDefaultWidth('.500.0');
79
+ videoResponsePage.steps.verifyVideoRecorderDefaultWidthInputFieldValue(500);
80
+ videoResponsePage.steps.setVideoRecorderDefaultWidth('!@#abcde584');
81
+ videoResponsePage.steps.verifyVideoRecorderDefaultWidthInputFieldValue(584);
82
+ });
83
+
84
+ it('When user tries to add a value greater than 600 it should be automatically set back to 600 and should not allow to add greater than set value', () => {
85
+ videoResponsePage.steps.setVideoRecorderDefaultWidth(9999);
86
+ videoResponsePage.steps.verifyVideoRecorderDefaultWidthInputFieldValue(600);
87
+ });
88
+
89
+ it('When user tries to add a value less than 324 it should be automatically set back to 324 and should not allow to add lower than set value', () => {
90
+ videoResponsePage.steps.setVideoRecorderDefaultWidth(300);
91
+ videoResponsePage.steps.verifyVideoRecorderDefaultWidthInputFieldValue(324);
92
+ });
93
+ });
94
+
95
+ describe('Video recorder default width (px): Preview tab', () => {
96
+ abortEarlySetup();
97
+ before(() => {
98
+ videoResponsePage.steps.navigateToCreateQuestion('video response');
99
+ cy.barsPreLoaderWait();
100
+ videoResponsePage.steps.selectVideoRecorderStyle('Compact');
101
+ });
102
+
103
+ it('The default dimensions of the video recorder flyout should be 324x256px', () => {
104
+ videoResponsePage.steps.switchToPreviewTab();
105
+ videoResponsePage.steps.startRecordingCompactPreview();
106
+ videoResponsePage.steps.waitForRecordingToStartCompactPreview();
107
+ videoResponsePage.steps.verifyVideoRecorderFlyoutDimensions(324, 256);
108
+ });
109
+
110
+ it('When the user updates the "Video recorder default width (px)" input field value, then the dimensions of the video recorder flyout should get updated accordingly', () => {
111
+ videoResponsePage.steps.switchToEditTab();
112
+ videoResponsePage.steps.setVideoRecorderDefaultWidth(540);
113
+ videoResponsePage.steps.switchToPreviewTab();
114
+ videoResponsePage.steps.startRecordingCompactPreview();
115
+ videoResponsePage.steps.waitForRecordingToStartCompactPreview();
116
+ videoResponsePage.steps.verifyVideoRecorderFlyoutDimensions(540, 375);
117
+ });
118
+ });
119
+
29
120
  //Failing due to https://redmine.zeuslearning.com/issues/570772, https://redmine.zeuslearning.com/issues/570761
30
121
  describe('Maximum recording duration: Edit tab', () => {
31
122
  abortEarlySetup();
32
123
  before(() => {
33
124
  videoResponsePage.steps.navigateToCreateQuestion('video response');
125
+ cy.barsPreLoaderWait();
34
126
  });
35
127
 
36
128
  it('\'Maximum recording duration\' label, input field, "Secs" and "Mins" toggle buttons should be displayed. By default "Secs" toggle button should be in selected state. "300" should be displayed in \'Maximum recording duration\' field', () => {
@@ -149,6 +241,7 @@ describe('Create item page - Video response: Question instructions, Maximum reco
149
241
  abortEarlySetup();
150
242
  before(() => {
151
243
  videoResponsePage.steps.navigateToCreateQuestion('video response');
244
+ cy.barsPreLoaderWait();
152
245
  videoResponsePage.steps.switchToPreviewTab();
153
246
  });
154
247
 
@@ -115,7 +115,7 @@ describe('Create item page - Video response: Grading view, Correct answer view c
115
115
  videoResponsePage.steps.waitForPlaybackToBegin();
116
116
  videoResponsePage.steps.addWaitToPlayVideo(4000);
117
117
  videoResponsePage.steps.pausePlayback();
118
- videoResponsePage.steps.verifyPlaybackElapsedTime(1 + (4 * playbackSpeedMultiplier[index]));
118
+ videoResponsePage.steps.verifyPlaybackElapsedTime((1 + (4 * playbackSpeedMultiplier[index])), 'Standard');
119
119
  videoResponsePage.steps.startPlayback();
120
120
  videoResponsePage.steps.verifyVideoPlaybackTimer('0:12', '0:12');
121
121
  });
@@ -51,11 +51,11 @@ describe('Create item page - Video response: Preview contents', () => {
51
51
  utilities.verifyElementVisibilityState(videoResponsePage.questionInstructionsText(), 'visible');
52
52
  });
53
53
 
54
- it('A start recording interface with a \'Rec\' button and text \'Click/tap anywhere here to start recording\' should be displayed in the preview tab', () => {
54
+ it('A start recording interface with a \'Rec\' button and text \'Click the button to start recording...\' should be displayed in the preview tab', () => {
55
55
  utilities.verifyElementVisibilityState(videoResponsePage.clickTapAnywhereArea(), 'visible');
56
56
  utilities.verifyInnerText(videoResponsePage.recordButton(), 'REC');
57
57
  utilities.verifyElementVisibilityState(videoResponsePage.recordButton(), 'visible');
58
- utilities.verifyInnerText(videoResponsePage.startRecordingText(), 'Click/tap anywhere here to start recording');
58
+ utilities.verifyInnerText(videoResponsePage.startRecordingText(), 'Click the button to start recording...');
59
59
  utilities.verifyElementVisibilityState(videoResponsePage.startRecordingText(), 'visible');
60
60
  });
61
61
 
@@ -217,6 +217,7 @@ describe('Create item page - Video response: Preview tab - Standard recorder sty
217
217
  videoResponsePage.steps.switchToPreviewTab();
218
218
  videoResponsePage.steps.recordAndSaveVideo(10000);
219
219
  });
220
+
220
221
  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', () => {
221
222
  videoResponsePage.playbackPlayButton()
222
223
  .verifyTooltip('Play');
@@ -481,7 +482,7 @@ describe('Create item page - Video response: Preview tab - Standard recorder sty
481
482
  videoResponsePage.steps.waitForPlaybackToBegin();
482
483
  videoResponsePage.steps.addWaitToPlayVideo(4000);
483
484
  videoResponsePage.steps.pausePlayback();
484
- videoResponsePage.steps.verifyPlaybackElapsedTime(1 + (4 * playbackSpeedMultiplier[index]));
485
+ videoResponsePage.steps.verifyPlaybackElapsedTime((1 + (4 * playbackSpeedMultiplier[index])), 'Standard');
485
486
  });
486
487
  }
487
488
  });
@@ -504,49 +505,10 @@ describe('Create item page - Video response: Preview tab - Standard recorder sty
504
505
  videoResponsePage.steps.retakeRecording();
505
506
  utilities.verifyInnerText(dialogBoxBase.dialogBoxTitle(), 'Retake');
506
507
  utilities.verifyElementVisibilityState(dialogBoxBase.dialogBoxTitle(), 'visible');
507
- utilities.verifyInnerText(videoResponsePage.retakePopupContent(), 'Are you sure you want to overwrite the existing video recording?');
508
- utilities.verifyInnerText(videoResponsePage.confirmRetakeButton(), 'Confirm');
509
- utilities.verifyElementVisibilityState(videoResponsePage.confirmRetakeButton(), 'visible');
510
- utilities.verifyInnerText(videoResponsePage.cancelRetakeButton(), 'Cancel');
511
- utilities.verifyElementVisibilityState(videoResponsePage.cancelRetakeButton(), 'visible');
512
- });
513
-
514
- it('CSS of \'Retake recording\' popup', { tags: 'css' }, () => {
515
- utilities.verifyCSS(dialogBoxBase.dialogBox(), {
516
- 'border': `1px solid ${css.color.defaultDropdownBorder}`,
517
- 'background-color': css.color.defaultBackground
518
- });
519
- utilities.verifyCSS(dialogBoxBase.dialogBoxTitle(), {
520
- 'color': css.color.questionHeading,
521
- 'font-size': css.fontSize.default,
522
- 'font-weight': css.fontWeight.semibold
523
- });
524
- utilities.verifyCSS(videoResponsePage.retakePopupContent(), {
525
- 'color': css.color.labels,
526
- 'font-size': css.fontSize.default,
527
- 'font-weight': css.fontWeight.regular
528
- })
529
- utilities.verifyCSS(videoResponsePage.confirmRetakeButton(), {
530
- 'background-color': css.color.deleteBtn
531
- });
532
- utilities.verifyCSS(videoResponsePage.confirmRetakeButton().find('span'), {
533
- 'color': css.color.whiteText,
534
- 'font-size': css.fontSize.default,
535
- 'font-weight': css.fontWeight.regular
536
- });
537
- utilities.verifyCSS(videoResponsePage.cancelRetakeButton(), {
538
- 'background-color': css.color.defaultBackground
539
- });
540
- utilities.verifyCSS(videoResponsePage.cancelRetakeButton().find('span'), {
541
- 'color': css.color.secondaryBtn,
542
- 'font-size': css.fontSize.default,
543
- 'font-weight': css.fontWeight.regular
544
- });
508
+ videoResponsePage.steps.verifyRetakePopupContents();
545
509
  });
546
510
 
547
- it('Accessibility of \'Retake recording\' popup', { tags: 'a11y' }, () => {
548
- cy.checkAccessibility(dialogBoxBase.dialogBox());
549
- });
511
+ videoResponsePage.tests.verifyRetakePopupCSSAndA11y();
550
512
 
551
513
  it('When the user clicks on \'Cancel\' button, \'Retake recording\' popup should close and previous state of playback player should persist', () => {
552
514
  videoResponsePage.steps.cancelRetake();