itemengine-cypress-automation 1.0.193-packageUpdated-b3f3d0b.0 → 1.0.193

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/cypress/e2e/ILC/AudioPlayerNew/allSupportedFileTypes.js +3 -3
  2. package/cypress/e2e/ILC/AudioPlayerNew/audioOverviewAndTranscript.js +568 -0
  3. package/cypress/e2e/ILC/AudioPlayerNew/barAudioPlayerStyle.js +4 -4
  4. package/cypress/e2e/ILC/AudioPlayerNew/compactAudioPlayerStyle.js +5 -5
  5. package/cypress/e2e/ILC/AudioPlayerNew/customizePlayerLayoutSettings.js +2 -2
  6. package/cypress/e2e/ILC/AudioPlayerNew/headerSection.js +125 -0
  7. package/cypress/e2e/ILC/AudioPlayerNew/previewContents.smoke.js +5 -5
  8. package/cypress/e2e/ILC/AudioPlayerNew/standardAudioPlayerStyle.js +4 -4
  9. package/cypress/e2e/ILC/AudioPlayerNew/studentViewSettings.js +3 -3
  10. package/cypress/e2e/ILC/AudioPlayerNew/uploadAndAddAudioFile.js +19 -17
  11. package/cypress/e2e/ILC/ChartsBar/previewContentsForAllViews.smoke.js +7 -4
  12. package/cypress/e2e/ILC/ChartsLine/allOrNothingScoringForAllViews.smoke.js +366 -0
  13. package/cypress/e2e/ILC/ChartsLine/checkAnswerFunctionalityForAllViews.smoke.js +183 -0
  14. package/cypress/e2e/ILC/ChartsLine/gradingViewAndCorrectAnswerView.smoke.js +281 -0
  15. package/cypress/e2e/ILC/ChartsLine/previewContentsForAllViews.smoke.js +595 -0
  16. package/cypress/e2e/ILC/GridFill/allOrNothingBasicForAllViews.smoke.js +8 -8
  17. package/cypress/e2e/ILC/ImageHighlight/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +241 -0
  18. package/cypress/e2e/ILC/ImageHighlight/Scoring/allOrNothingWithCorrectPointsEqualToAlternativePoints.js +241 -0
  19. package/cypress/e2e/ILC/ImageHighlight/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternatePoints.js +285 -0
  20. package/cypress/e2e/ILC/ImageHighlight/Scoring/manuallyAndNonScored.js +164 -0
  21. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +281 -0
  22. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialDifferentWeightsScoring.js +467 -0
  23. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +250 -0
  24. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialDifferentWeigtsCorrectPointsGreaterThanAlternativePoints.js +281 -0
  25. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +260 -0
  26. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialEqualWeightsScoring.js +184 -0
  27. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +229 -0
  28. package/cypress/e2e/ILC/ImageHighlight/Scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +261 -0
  29. package/cypress/e2e/ILC/chartsDotsPlot/allOrNothingForAllViews.smoke.js +409 -0
  30. package/cypress/e2e/ILC/chartsDotsPlot/checkAnswerFunctionalityForAllViews.smoke.js +199 -0
  31. package/cypress/e2e/ILC/chartsDotsPlot/gradingViewAndCorrectAnswerView.smoke.js +223 -0
  32. package/cypress/e2e/ILC/chartsDotsPlot/previewContentsForAllViews.smoke.js +402 -0
  33. package/cypress/pages/audioPlayerPage.js +229 -9
  34. package/cypress/pages/chartsBarPage.js +2 -70
  35. package/cypress/pages/chartsDotPlotPage.js +986 -3
  36. package/cypress/pages/chartsLinePage.js +368 -9
  37. package/cypress/pages/components/autoScoredScoringSectionMultiResponseType.js +0 -1
  38. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +3 -0
  39. package/cypress/pages/components/backgroundImageUploadComponent.js +1 -1
  40. package/cypress/pages/components/barAndLineChartComponent.js +27 -1
  41. package/cypress/pages/components/chartsCommonComponent.js +31 -2
  42. package/cypress/pages/components/createQuestionBasePage.js +1 -0
  43. package/cypress/pages/components/layoutSectionComponent.js +2 -2
  44. package/cypress/pages/components/singleMultipleSelectionModeComponent.js +5 -0
  45. package/cypress/pages/components/toolSettingsComponent.js +2 -2
  46. package/cypress/pages/feedbackScalePage.js +1 -1
  47. package/cypress/pages/gridFillPage.js +13 -6
  48. package/cypress/pages/imageHighlightPage.js +308 -2
  49. package/cypress/pages/numberLinePage.js +40 -16
  50. package/cypress/pages/videoResponsePage.js +350 -6
  51. package/package.json +1 -1
@@ -1,17 +1,96 @@
1
+ import utilities from "../support/helpers/utilities";
2
+ import { autoScoredScoringPreviewTab, autoScoredStudentViewSettings, barAndLineChartComponent, chartsCommonComponent, commonComponents, createQuestionBasePage, questionInstructionsComponent, resetPopupComponent } from "./components";
3
+ import { dialogBoxBase } from "./dialogBoxBase";
4
+ const css = Cypress.env('css');
5
+
1
6
  const selectors = {
7
+ ...questionInstructionsComponent,
8
+ ...barAndLineChartComponent,
9
+ ...chartsCommonComponent,
10
+ ...commonComponents,
11
+ ...dialogBoxBase,
12
+ point: () => cy.get('.ngie-chart-point'),
2
13
  selectChartTypePoint: () => cy.get('[class*="Chartsstyles__ChartsQuestionWrapper"] .ngie-chart-point'),
14
+ pointLockIcon: () => cy.get('[class*="ChartGridstyle__LineLockIconWrapper"]'),
15
+ lineChartDragIcon: () => cy.get('.line-chart-drag-icon'),
16
+
17
+ //specify correct answer section
18
+ specifyCorrectAnswerPoint: () => cy.get('.ngie-accordion .ngie-chart-point'),
19
+
20
+ //Preview tab
21
+ previewTabPoint: () => cy.get('[class*="ChartsPreviewstyles__PreviewWrapper"]:visible .ngie-chart-point'),
22
+ previewTabConnectorLine: () => cy.get('[class*="ChartsPreviewstyles__PreviewWrapper"]:visible .line-chart-connector-line'),
23
+
24
+ //Preview tab
25
+ previewTabPointLabel: () => cy.get('[class*="ChartsPreviewstyles__PreviewWrapper"]:visible [class*="ChartGridstyle__NameDiv-"]'),
3
26
  }
4
27
 
5
28
  const steps = {
29
+ ...barAndLineChartComponent.steps,
30
+ ...createQuestionBasePage.steps,
31
+ ...questionInstructionsComponent.steps,
32
+ ...resetPopupComponent.steps,
33
+ ...autoScoredScoringPreviewTab.steps,
34
+ ...autoScoredStudentViewSettings.steps,
35
+ ...chartsCommonComponent.steps,
6
36
  /**
7
37
  * @description set the point height/value in the select chart type section chart
8
- * @param {Object} pointProperties - The properties and changes to be done on the bar
9
- * @param {number} pointProperties.pointIndex index of the bar
38
+ * @param {Object} pointProperties - The properties and changes to be done on the point
39
+ * @param {number} pointProperties.pointIndex index of the point
40
+ * @param {number} pointProperties.value value to which the point is to be set as per Y axis
41
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
42
+ */
43
+ setPointValueInSelectChartTypeSection: ({ pointIndex, value, range }) => {
44
+ utilities.getNthElement(chartsLinePage.selectChartTypePoint(), pointIndex)
45
+ .invoke('attr', 'height')
46
+ .then((pointValue) => {
47
+ let updatedPointValue = parseFloat(value /= range)
48
+ let originalPointValue = parseFloat(pointValue)
49
+ let unitChange = parseFloat(1 / range)
50
+ if (originalPointValue < updatedPointValue) {
51
+ for (let i = originalPointValue; i < updatedPointValue; i = parseFloat((i + unitChange).toFixed(2))) {
52
+ utilities.getNthElement(chartsLinePage.selectChartTypePoint(), pointIndex)
53
+ .focus()
54
+ .type('{upArrow}');
55
+ }
56
+ } else if (originalPointValue > updatedPointValue) {
57
+ for (let i = originalPointValue; i > updatedPointValue; i = parseFloat((i - unitChange).toFixed(2))) {
58
+ utilities.getNthElement(chartsLinePage.selectChartTypePoint(), pointIndex)
59
+ .focus()
60
+ .type('{downArrow}');
61
+ }
62
+ }
63
+ utilities.getNthElement(chartsLinePage.selectChartTypePoint(), pointIndex)
64
+ .should('have.attr', 'height', updatedPointValue);
65
+ });
66
+ },
67
+
68
+ /**
69
+ * @description Lock the point in select chart type section chart
70
+ * @param {number} pointIndex Index of the point to be locked
71
+ */
72
+ lockPoint: (pointIndex) => {
73
+ utilities.hoverOverElement(utilities.getNthElement(chartsLinePage.selectChartTypePoint(), pointIndex))
74
+ barAndLineChartComponent.barAndPointTooltipLockUnlockButton()
75
+ .click();
76
+ barAndLineChartComponent.barAndPointTooltipLockUnlockButton()
77
+ .should('have.attr', 'aria-label', 'locked bar');
78
+ utilities.hoverAwayFromElement();
79
+ utilities.getNthElement(chartsLinePage.selectChartTypePoint(), pointIndex)
80
+ .within(() => {
81
+ utilities.verifyElementVisibilityState(chartsLinePage.pointLockIcon(), 'visible');
82
+ });
83
+ },
84
+
85
+ /**
86
+ * @description set the point height/value in the specify correct answer section
87
+ * @param {Object} pointProperties - The properties and changes to be done on the point
88
+ * @param {number} pointProperties.pointIndex index of the point
10
89
  * @param {number} pointProperties.value value to which the point is to be set as per Y axis
11
- * @param {number} pointProperties.range Maximum value of the axis on which bar value is determined
90
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
12
91
  */
13
- setPointValueInSelectChartTypeSection: ({ barIndex, value, range }) => {
14
- utilities.getNthElement(chartsBarPage.selectChartTypePoint(), barIndex)
92
+ setPointValueInSpecifyCorrectAnswerSection: ({ pointIndex, value, range }) => {
93
+ utilities.getNthElement(chartsLinePage.specifyCorrectAnswerPoint(), pointIndex)
15
94
  .invoke('attr', 'height')
16
95
  .then((pointValue) => {
17
96
  let updatedPointValue = parseFloat(value /= range)
@@ -19,24 +98,304 @@ const steps = {
19
98
  let unitChange = parseFloat(1 / range)
20
99
  if (originalPointValue < updatedPointValue) {
21
100
  for (let i = originalPointValue; i < updatedPointValue; i = parseFloat((i + unitChange).toFixed(2))) {
22
- utilities.getNthElement(chartsBarPage.selectChartTypePoint(), barIndex)
101
+ utilities.getNthElement(chartsLinePage.specifyCorrectAnswerPoint(), pointIndex)
23
102
  .focus()
24
103
  .type('{upArrow}');
25
104
  }
26
105
  } else if (originalPointValue > updatedPointValue) {
27
106
  for (let i = originalPointValue; i > updatedPointValue; i = parseFloat((i - unitChange).toFixed(2))) {
28
- utilities.getNthElement(chartsBarPage.selectChartTypePoint(), barIndex)
107
+ utilities.getNthElement(chartsLinePage.specifyCorrectAnswerPoint(), pointIndex)
29
108
  .focus()
30
109
  .type('{downArrow}');
31
110
  }
32
111
  }
33
- utilities.getNthElement(chartsBarPage.selectChartTypePoint(), barIndex)
112
+ utilities.getNthElement(chartsLinePage.specifyCorrectAnswerPoint(), pointIndex)
34
113
  .should('have.attr', 'height', updatedPointValue);
35
114
  });
36
115
  },
116
+
117
+ //Preview tab
118
+ /**
119
+ * Verify the point value in preview tab
120
+ * @param {Object} pointProperties - The properties of the point
121
+ * @param {number} pointProperties.pointIndex index of the point
122
+ * @param {number} pointProperties.value Height of the point as per the axis
123
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
124
+ */
125
+ verifyPointValueInPreviewTab: ({ pointIndex, value, range }) => {
126
+ let pointHeight = parseFloat(value /= range)
127
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
128
+ .should('have.attr', 'height', pointHeight);
129
+ },
130
+
131
+ /**
132
+ * Verify the point is locked in preview tab
133
+ * @param {number} pointIndex index of the line
134
+ */
135
+ verifyPointIsLockedInPreviewTab: (pointIndex) => {
136
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
137
+ .within(() => {
138
+ utilities.verifyElementVisibilityState(chartsLinePage.pointLockIcon(), 'visible');
139
+ });
140
+ },
141
+
142
+ /**
143
+ * Verify locked point is uneditable in preview tab
144
+ * @param {number} pointIndex index of the point
145
+ */
146
+ verifyLockedPointIsUneditableInPreviewTab: (pointIndex) => {
147
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
148
+ .invoke('attr', 'height')
149
+ .then((pointValue) => {
150
+ let originalPointValue = parseFloat(pointValue)
151
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
152
+ .focus()
153
+ .type('{upArrow}{upArrow}{upArrow}{downArrow}{downArrow}{downArrow}', { force: true });
154
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
155
+ .should('have.attr', 'height', originalPointValue);
156
+ });
157
+ },
158
+
159
+ /**
160
+ * @description set the point height/value in the preview tab
161
+ * @param {Object} pointProperties - The properties and changes to be done on the point
162
+ * @param {number} pointProperties.pointIndex index of the point
163
+ * @param {number} pointProperties.value value to which the point is to be set as per Y axis
164
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
165
+ */
166
+ setPointValueInPreviewTab: ({ pointIndex, value, range }) => {
167
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
168
+ .invoke('attr', 'height')
169
+ .then((pointValue) => {
170
+ let updatedPointValue = parseFloat(value /= range)
171
+ let originalPointValue = parseFloat(pointValue)
172
+ let unitChange = parseFloat(1 / range)
173
+ if (originalPointValue < updatedPointValue) {
174
+ for (let i = originalPointValue; i < updatedPointValue; i = parseFloat((i + unitChange).toFixed(2))) {
175
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
176
+ .focus()
177
+ .type('{upArrow}');
178
+ }
179
+ } else if (originalPointValue > updatedPointValue) {
180
+ for (let i = originalPointValue; i > updatedPointValue; i = parseFloat((i - unitChange).toFixed(2))) {
181
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
182
+ .focus()
183
+ .type('{downArrow}');
184
+ }
185
+ }
186
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
187
+ .should('have.attr', 'height', updatedPointValue);
188
+ });
189
+ },
190
+
191
+ keyBoardUpPointInPreviewTab: (pointIndex) => {
192
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
193
+ .focus()
194
+ .type('{upArrow}');
195
+ },
196
+
197
+ keyBoardDownPointInPreviewTab: (pointIndex) => {
198
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
199
+ .focus()
200
+ .type('{downArrow}');
201
+ },
202
+
203
+ /**
204
+ * @description Edit point label in preview tab chart
205
+ * @param {number} pointIndex Index of the point to be edited
206
+ * @param {string} pointLabel Label to be given to the point
207
+ */
208
+ editPointLabelInPreviewTab: (pointIndex, pointLabel) => {
209
+ utilities.hoverOverElement(utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex))
210
+ chartsLinePage.barAndPointTooltipLabelButton()
211
+ .click();
212
+ chartsLinePage.steps.addInputToChartLabelPopupInputField(pointLabel);
213
+ chartsLinePage.steps.saveGraphLabelPopup();
214
+ utilities.hoverAwayFromElement();
215
+ utilities.verifyInnerText(utilities.getNthElement(chartsLinePage.previewTabPointLabel(), pointIndex), pointLabel);
216
+ },
217
+
218
+ /**
219
+ * @description Delete point in preview tab
220
+ * @param {number} pointIndex Index of the point to be deleted
221
+ */
222
+ deletePointInPreviewTab: (pointIndex) => {
223
+ utilities.hoverOverElement(utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex))
224
+ chartsLinePage.barAndPointTooltipDeleteButton()
225
+ .click();
226
+ },
227
+
228
+ /**
229
+ * Verify the point value in correct answer section tab
230
+ * @param {Object} pointProperties - The properties of the point
231
+ * @param {number} pointProperties.pointIndex index of the point
232
+ * @param {number} pointProperties.value Height of the point as per the axis
233
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
234
+ */
235
+ verifyPointValueInCorrectAnswerSection: ({ pointIndex, value, range }) => {
236
+ let pointValue = parseFloat(value /= range)
237
+ chartsLinePage.previewTabChartWrapper()
238
+ .eq(1)
239
+ .within(() => {
240
+ utilities.getNthElement(chartsLinePage.point(), pointIndex)
241
+ .should('have.attr', 'height', pointValue);
242
+ });
243
+ },
244
+
245
+ /**
246
+ * Verify the correct/incorrect icon of point in correct answer section
247
+ * @param {number} pointIndex index of the point
248
+ * @example verifyPointCorrectIconInCorrectAnswerSection(0)
249
+ */
250
+ verifyPointCorrectIconInCorrectAnswerSection: (pointIndex) => {
251
+ chartsLinePage.previewTabChartWrapper()
252
+ .eq(1)
253
+ .within(() => {
254
+ utilities.getNthElement(chartsLinePage.point(), pointIndex)
255
+ .within(() => {
256
+ chartsLinePage.tickIconWrapper()
257
+ .and('have.class', 'correct-option-icon')
258
+ .parent()
259
+ .should('be.visible');
260
+ });
261
+ });
262
+ },
263
+
264
+ /**
265
+ * Verify the correct/incorrect icon not exists for point in correct answer section
266
+ * @param {number} pointIndex index of the point
267
+ */
268
+ verifyPointCorrectIncorrectIconNotExistsInCorrectAnswerSection: (pointIndex) => {
269
+ chartsLinePage.previewTabChartWrapper()
270
+ .eq(1)
271
+ .within(() => {
272
+ utilities.getNthElement(chartsLinePage.point(), pointIndex)
273
+ .within(() => {
274
+ utilities.verifyElementVisibilityState(chartsLinePage.tickIconWrapper(), 'notExist');
275
+ });
276
+ });
277
+ },
278
+
279
+ /**
280
+ * Verify the correct/incorrect icon of point in preview tab
281
+ * @param {number} pointIndex index of the point
282
+ * @param {string} icon correct or incorrect icon
283
+ * @example verifyPointCorrectIncorrectIconInPreviewTab(0, 'correct')
284
+ */
285
+ verifyPointCorrectIncorrectIconInPreviewTab: (pointIndex, icon) => {
286
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
287
+ .within(() => {
288
+ chartsLinePage.tickIconWrapper()
289
+ .and('have.class', `${icon}-option-icon`)
290
+ .parent()
291
+ .should('be.visible');
292
+ });
293
+ },
294
+
295
+ /**
296
+ * Verify the correct/incorrect icon not exists for point in preview tab
297
+ * @param {number} pointIndex index of the point
298
+ */
299
+ verifyPointCorrectIncorrectIconNotExistsInPreviewTab: (pointIndex) => {
300
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
301
+ .within(() => {
302
+ utilities.verifyElementVisibilityState(chartsLinePage.tickIconWrapper(), 'notExist');
303
+ });
304
+ },
305
+
306
+ /**
307
+ * @description verify point in correct answer section
308
+ * @param {Object} pointProperties - The properties and changes to be done on the point
309
+ * @param {number} pointProperties.pointIndex index of the point
310
+ * @param {number} pointProperties.value value of th point as per Y axis
311
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
312
+ */
313
+ verifyPointInCorrectAnswerSection: ({ pointIndex, value, range }) => {
314
+ chartsLinePage.steps.verifyPointValueInCorrectAnswerSection({ pointIndex: pointIndex, value: value, range: range });
315
+ chartsLinePage.steps.verifyPointCorrectIconInCorrectAnswerSection(pointIndex);
316
+ },
317
+
318
+ /**
319
+ * @description verify locked point in correct answer section
320
+ * @param {Object} pointProperties - The properties and changes to be done on the point
321
+ * @param {number} pointProperties.pointIndex index of the point
322
+ * @param {number} pointProperties.value value of th point as per Y axis
323
+ * @param {number} pointProperties.range Maximum value of the axis on which point value is determined
324
+ */
325
+ verifyLockedPointInCorrectAnswerSection: ({ pointIndex, value, range }) => {
326
+ chartsLinePage.steps.verifyPointValueInCorrectAnswerSection({ pointIndex: pointIndex, value: value, range: range });
327
+ chartsLinePage.steps.verifyPointIsLockedInCorrectAnswerSection(pointIndex);
328
+ chartsLinePage.steps.verifyPointCorrectIncorrectIconNotExistsInCorrectAnswerSection(pointIndex);
329
+ },
330
+
331
+ /**
332
+ * Verify the point is locked in correct answer section
333
+ * @param {number} pointIndex index of the point
334
+ */
335
+ verifyPointIsLockedInCorrectAnswerSection: (pointIndex) => {
336
+ chartsLinePage.previewTabChartWrapper()
337
+ .eq(1)
338
+ .within(() => {
339
+ utilities.getNthElement(chartsLinePage.point(), pointIndex)
340
+ .within(() => {
341
+ utilities.verifyElementVisibilityState(chartsLinePage.pointLockIcon(), 'visible');
342
+ });
343
+ });
344
+ },
345
+ }
346
+
347
+ const tests = {
348
+ ...resetPopupComponent.tests,
349
+ ...autoScoredScoringPreviewTab.tests,
350
+ /**
351
+ * Verify point tooltip contents with css and a11y in preview tab
352
+ * @param {number} pointIndex index of the point
353
+ * @param {string} pointLabel label of the point
354
+ */
355
+ verifyPointTooltipContentsCSSAndA11yInPreviewTab: (pointIndex, pointLabel) => {
356
+ it('When user hovers over the point, then point tooltip should be displayed', () => {
357
+ utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex)
358
+ .realHover({ position: 'left' });
359
+ utilities.verifyElementVisibilityState(chartsLinePage.barAndPointTooltipWrapper(), 'visible');
360
+ });
361
+
362
+ it('The point tooltip should contain and point label button, and delete button', () => {
363
+ utilities.verifyInnerText(barAndLineChartComponent.barAndPointTooltipLabelButton(), pointLabel);
364
+ utilities.verifyElementVisibilityState(barAndLineChartComponent.barAndPointTooltipDeleteButton(), 'visible');
365
+ });
366
+
367
+ it('When user hovers on the delete button, then \'Delete point\' tooltip should be displayed', () => {
368
+ chartsLinePage.barAndPointTooltipDeleteButton()
369
+ .verifyTooltip('Delete point');
370
+ });
371
+
372
+ it('When user hovers away from the point, then point tooltip should be not be displayed', () => {
373
+ utilities.hoverAwayFromElement();
374
+ utilities.verifyElementVisibilityState(chartsLinePage.barAndPointTooltipWrapper(), 'hidden');
375
+ });
376
+
377
+ it('CSS of point tooltip', { tags: 'css' }, () => {
378
+ utilities.hoverOverElement(utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex));
379
+ utilities.verifyCSS(barAndLineChartComponent.barAndPointTooltipLabelButton(), {
380
+ 'color': css.color.activeButtons,
381
+ 'font-size': css.fontSize.default,
382
+ 'font-weight': css.fontWeight.bold
383
+ });
384
+ barAndLineChartComponent.barAndPointTooltipDeleteButton()
385
+ .verifyPseudoClassBeforeProperty('color', css.color.deleteIcon);
386
+ utilities.hoverAwayFromElement();
387
+ });
388
+
389
+ it('Accessibility of point tooltip', { tags: 'a11y' }, () => {
390
+ utilities.hoverOverElement(utilities.getNthElement(chartsLinePage.previewTabPoint(), pointIndex));
391
+ cy.checkAccessibility(chartsLinePage.barAndPointTooltipWrapper());
392
+ utilities.hoverAwayFromElement();
393
+ });
394
+ }
37
395
  }
38
396
 
39
397
  export const chartsLinePage = {
40
398
  ...selectors,
41
- steps
399
+ steps,
400
+ tests
42
401
  }
@@ -275,7 +275,6 @@ const steps = {
275
275
  utilities.verifyElementVisibilityState(autoScoredScoringSectionMultiResponseType.pointsPerResponseLabel(), 'visible');
276
276
  },
277
277
 
278
-
279
278
  verifyAutomaticallySetPenaltyPointsCheckboxUncheckedState: () => {
280
279
  autoScoredScoringSectionMultiResponseType.automaticallySetPenaltyPointsCheckbox()
281
280
  .should('not.be.checked');
@@ -213,6 +213,9 @@ const tests = {
213
213
  case 'number line - label':
214
214
  helpText = 'You can set the correct answer by dragging the correct answer(s) in the response area(s).';
215
215
  break;
216
+ case 'image highlight':
217
+ helpText = 'You can set the correct answer by selecting the correct answer option.'
218
+ break;
216
219
  default:
217
220
  throw new Error('Invalid question type');
218
221
  }
@@ -114,7 +114,7 @@ const tests = {
114
114
  backgroundImageUploadComponent.steps.uploadFile('highlightImage.jpg');
115
115
  utilities.verifyElementVisibilityState(backgroundImageUploadComponent.uploadImageProgressBar(), 'visible');
116
116
  backgroundImageUploadComponent.steps.verifyFileNameLabel('highlightImage.jpg');
117
- if (questionType !== 'graphing' && questionType !== 'grid fill') {
117
+ if (questionType !== 'graphing' && questionType !== 'grid fill' && questionType !== 'image highlight') {
118
118
  imageCanvasComponent.steps.verifyImageIsUploaded();
119
119
  }
120
120
  });
@@ -1,9 +1,12 @@
1
+ import utilities from "../../support/helpers/utilities";
1
2
  import { chartsCommonComponent } from "./chartsCommonComponent";
2
3
 
3
4
  const selectors = {
4
5
  toolsLabel: () => cy.get('[class*="SelectChartTypestyles__OptionTitle"]'),
5
6
  addBarOrPointOptionButton: () => cy.get('#add .icon-button-custom-format'),
6
7
  addBarOrPointOptionLabel: () => cy.get('.drag-item-label-wrapper'),
8
+ selectChartTypeMaxYLabel: () => cy.get('[class*="ChartsPreviewstyles__CustomInputFieldLabel"]'),
9
+ selectChartTypeMaxYInputField: () => cy.get('[class*="ChartsPreviewstyles__CustomInputFieldWrapper"] input'),
7
10
  yAxisCoordinate: () => cy.get('[class*="ChartGridstyle__ValueDiv"]'),
8
11
  yAxisLabel: () => cy.get('[class*="ChartsPreviewstyles__LeftWrapper"] .title-container'),
9
12
  selectChartTypeChartToolsAddBarOrPointButton: () => cy.get('[class*="Chartsstyles__ChartsQuestionWrapper"] [class*="ChartToolsstyles__ChartToolsWrapper"] button').eq(0),
@@ -34,6 +37,17 @@ const selectors = {
34
37
  }
35
38
 
36
39
  const steps = {
40
+ /**
41
+ * @description Set the Max Y value in its input field
42
+ * @param {number} value Max Y value to be set
43
+ */
44
+ setMaxYValue: (value) => {
45
+ barAndLineChartComponent.selectChartTypeMaxYInputField()
46
+ .type(`{backspace}{backspace}${value}`, { force: true })
47
+ .should('have.value', value)
48
+ .blur();
49
+ },
50
+
37
51
  selectAddBarOrPointToolbarOption: () => {
38
52
  barAndLineChartComponent.addBarOrPointOptionButton()
39
53
  .click()
@@ -114,7 +128,19 @@ const steps = {
114
128
  barAndLineChartComponent.steps.clickOnYAxisLabelButtonInPreviewTab();
115
129
  chartsCommonComponent.steps.addInputToChartLabelPopupInputField(text);
116
130
  chartsCommonComponent.steps.saveGraphLabelPopup();
117
- }
131
+ },
132
+
133
+ /**
134
+ * @description Verify Y axis label in correct answer section
135
+ * @param {string} yAxisLabel
136
+ */
137
+ verifyYAxisLabelInCorrectAnswerSection: (yAxisLabel) => {
138
+ chartsCommonComponent.previewTabChartWrapper()
139
+ .eq(1)
140
+ .within(() => {
141
+ utilities.verifyTextContent(utilities.getNthElement(barAndLineChartComponent.yAxisLabel(), 0), yAxisLabel);
142
+ });
143
+ },
118
144
  }
119
145
 
120
146
  export const barAndLineChartComponent = {
@@ -26,11 +26,16 @@ const selectors = {
26
26
  previewTabChartWrapper: () => cy.get('[class*="ChartsPreviewstyles__PreviewWrapper"]:visible'),
27
27
  previewTabGraphTitle: () => cy.get('[class*="ChartsPreviewstyles__PreviewWrapper"]:visible [class*="ChartsPreviewstyles__TopWrapper"] .title-container'),
28
28
  previewTabXAxisLabelButton: () => cy.get('[class*="ChartsPreviewstyles__PreviewWrapper"]:visible [class*="ChartsPreviewstyles__BottomWrapper"] .title-container'),
29
- tickIconWrapper: () => cy.get('.tick-icon-wrapper svg'),
29
+ tickIconWrapper: () => cy.get('[class*="tick-icon-wrapper"] svg'),
30
30
  correctAnswersLabel: () => cy.get('[class*="Chartsstyle__CorrectAnswerHeader"]')
31
31
  }
32
32
 
33
33
  const steps = {
34
+ selectLineButton: () => {
35
+ chartsCommonComponent.lineToggleButton()
36
+ .click();
37
+ },
38
+
34
39
  /**
35
40
  * @description Set graph title
36
41
  * @param {string} text text to be set as graph title
@@ -129,7 +134,31 @@ const steps = {
129
134
  chartsCommonComponent.previewTabChartWrapper()
130
135
  .eq(1)
131
136
  .should('not.exist');
132
- }
137
+ },
138
+
139
+ /**
140
+ * @description Verify graph title in correct answer section
141
+ * @param {string} graphTitle Title of graph
142
+ */
143
+ verifyGraphTitleInCorrectAnswerSection: (graphTitle) => {
144
+ chartsCommonComponent.previewTabChartWrapper()
145
+ .eq(1)
146
+ .within(() => {
147
+ utilities.verifyTextContent(utilities.getNthElement(chartsCommonComponent.graphTitle(), 0), graphTitle);
148
+ });
149
+ },
150
+
151
+ /**
152
+ * @description Verify X axis label in correct answer section
153
+ * @param {string} yAxisLabel
154
+ */
155
+ verifyXAxisLabelInCorrectAnswerSection: (XAxisLabel) => {
156
+ chartsCommonComponent.previewTabChartWrapper()
157
+ .eq(1)
158
+ .within(() => {
159
+ utilities.verifyTextContent(utilities.getNthElement(chartsCommonComponent.xAxisLabel(), 0), XAxisLabel);
160
+ });
161
+ },
133
162
  }
134
163
 
135
164
  export const chartsCommonComponent = {
@@ -3,6 +3,7 @@ import { createItemPage } from "../createItemPage";
3
3
  import { dialogBoxBase } from "../dialogBoxBase";
4
4
  import { selectQuestionResourceToolPage } from "../selectQuestionResourceToolPage";
5
5
  import { commonComponents } from "./commonComponents";
6
+ import { playbackControlsBaseComponent } from "./playbackControlsBaseComponent";
6
7
  import { questionInstructionsComponent } from "./questionInstructionsComponent";
7
8
  import { scoringSectionBase } from "./scoringSectionBase";
8
9
  const css = Cypress.env('css');
@@ -63,9 +63,9 @@ const selectors = {
63
63
  maxLabel: () => cy.get('[class*="LineGraphComponentsstyles__GraphRightLeft"] [class*="LineGraphComponentsstyles__CustomInputFieldLabel"]').eq(1),
64
64
  maxInputField: () => cy.get('[class*="LineGraphComponentsstyles__GraphRightLeft"] input').eq(1),
65
65
  intervalLabel: () => cy.get('[class*="LineGridSettingstyles__LineSettingFlexWrapper"] [aria-labelledby="Interval"]'),
66
- intervalInputField: () => cy.get('[class*="LineGridSettingstyles__LineSettingFlexWrapper"] input[id="Interval"]'),
66
+ intervalInputField: () => cy.get('input[id="Interval"]'),
67
67
  annotateEveryLabel: () => cy.get('[class*="LineGridSettingstyles__LineSettingFlexWrapper"] [aria-labelledby="Annotate every"]'),
68
- annotateEveryInputField: () => cy.get('[class*="LineGridSettingstyles__LineSettingFlexWrapper"] input[id="Annotate every"]'),
68
+ annotateEveryInputField: () => cy.get('input[id="Annotate every"]'),
69
69
  lineSettingsToggleButtonWrapper: () => cy.get('[class*="LineGridSettingstyles__LineSettingFlexWrapper"] [class*="SingleSelectToggleGroupstyles__ToggleButtonWrapper"]').eq(0),
70
70
  lineSettingsLabel: () => cy.get('[class*="LineGridSettingstyles__LineSettingFlexWrapper"] .single-select-toggle-group-title').eq(0),
71
71
  lineSettingsToggleButton: (ariaLabel = null) => {
@@ -7,6 +7,11 @@ const steps = {
7
7
  selectMultipleSelectionToggle: () => {
8
8
  singleMultipleSelectionModeComponent.multipleSelectionToggleButton()
9
9
  .click();
10
+ },
11
+
12
+ selectSingleSelectionToggle: () => {
13
+ singleMultipleSelectionModeComponent.singleSelectionToggleButton()
14
+ .click();
10
15
  }
11
16
  }
12
17
 
@@ -1,7 +1,7 @@
1
1
  import utilities from "../../support/helpers/utilities";
2
2
  const css = Cypress.env('css');
3
3
 
4
- const tools = ['Ruler', 'Protractor', 'Reading ruler', 'Simple Calculator', 'Scientific Calculator'];
4
+ const tools = ['Ruler', 'Protractor', 'Reading ruler', 'Simple Calculator', 'Scientific Calculator', 'Compass'];
5
5
  const selectors = {
6
6
  toolSettingsPanel: () => cy.get('.tool-settings-customization-wrapper .ngie-accordion-summary'),
7
7
  toolSettingsRegion: () => cy.get('.tool-settings-customization-wrapper [role="region"]'),
@@ -149,7 +149,7 @@ const tests = {
149
149
  it(`When \'Tool settings\' accordion is expanded, then \'Add tools\' and \'Select the tools that will be displayed to the students.\' labels should be displayed. Five tools ${tools} should be displayed with their labels, icons, drag handle button and edit icon. By default tools should not be selected`, () => {
150
150
  utilities.verifyInnerText(toolSettingsComponent.addToolsLabel(), 'Add tools');
151
151
  utilities.verifyInnerText(toolSettingsComponent.toolSettingsHelpText(), 'Select the tools that will be displayed to the students.');
152
- utilities.verifyElementCount(toolSettingsComponent.toolButton(), 5);
152
+ utilities.verifyElementCount(toolSettingsComponent.toolButton(), 6);
153
153
  tools.forEach((toolName, toolIndex) => {
154
154
  toolSettingsComponent.steps.verifyToolButton(toolIndex, toolName);
155
155
  });
@@ -38,7 +38,7 @@ const selectors = {
38
38
  deleteOptionAccordionButton: () => cy.get('[aria-label*="Delete"][aria-label*="ption"]'),
39
39
  optionTextInputField: () => cy.get('input[aria-label="Option text"]'),
40
40
  legendTextLabel: () => cy.get('.legend-wrapper [class*="LabelWrapper"]'),
41
- legendTextInputField: () => cy.get('.legend-wrapper input'),
41
+ legendTextInputField: () => cy.get('.legend-wrapper [role="textbox"]'),
42
42
  optionTextLabel: () => cy.get('[class*="FeedbackScaleOptionWrapper"] [class*="LabelWrapper"]'),
43
43
  addOptionButton: () => cy.get('.feedback-scale-add-option button'),
44
44
  colorSectionLabel: () => cy.get('[class*="FeedbackScalestyles__ColorLabelWrapper"]'),
@@ -1,5 +1,5 @@
1
1
  import { commonComponents, autoScoredScoringSectionMultiResponseType, questionInputFieldComponent, correctIncorrectAnswerLabelComponent, questionInstructionsComponent, scoringSectionBaseEditTab, createQuestionBasePage, additionalSettingsPanel, autoScoredScoringPreviewTab, additionalSettingsAccessibilitySectionComponent, autoScoredStudentViewSettings, autoScoredSpecifyCorrectAnswerSection, studentViewSettingsLabelComponent, colorPopupComponent, backgroundImageUploadComponent, imageCanvasComponent, imageActionsComponent } from "./components";
2
- import { dialogBoxBase } from ".";
2
+ import { dialogBoxBase, studentViewPage } from ".";
3
3
  import utilities from "../support/helpers/utilities";
4
4
  const css = Cypress.env('css');
5
5
 
@@ -2867,11 +2867,18 @@ const steps = {
2867
2867
  utilities.verifyElementVisibilityState(gridFillPage.gridWrapperPreviewTab().eq(1), 'notExist');
2868
2868
  },
2869
2869
 
2870
- /**
2871
- * @param {number} points - The points to be allotted.
2872
- * @description - Allots points in the scoring section.
2873
- */
2874
- allotPoints: (points) => {
2870
+ clickOnGoToGradingViewButton: () => {
2871
+ studentViewPage.buttonGoToGradingView()
2872
+ .click({ force: true });
2873
+ cy.url()
2874
+ .should('contain', 'grading-view');
2875
+ },
2876
+
2877
+ /**
2878
+ * @param {number} points - The points to be allotted.
2879
+ * @description - Allots points in the scoring section.
2880
+ */
2881
+ allotPoints: (points) => {
2875
2882
  scoringSectionBaseEditTab.pointsInputField()
2876
2883
  .eq(0)
2877
2884
  .clear()