itemengine-cypress-automation 1.0.68 → 1.0.70

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. package/cypress/e2e/ILC/EssayResponse/essayResponseAdditionalSettings.js +2 -2
  2. package/cypress/e2e/ILC/EssayResponse/essayResponseAdditionalSettingsBasic.js +1 -1
  3. package/cypress/e2e/ILC/EssayResponse/essayResponseScoringSection.js +2 -2
  4. package/cypress/e2e/ILC/FeedbackScale/feedbackScaleAdditionalSettingsBasic.js +8 -9
  5. package/cypress/e2e/ILC/FillInTheGapsDragAndDrop/fillInTheGapsDragAndDropGroupedOptionsPartialEqualWeightsWithAlternateAnswer.js +0 -4
  6. package/cypress/e2e/ILC/Highlight/HighlightScoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +2 -0
  7. package/cypress/e2e/ILC/Highlight/HighlightScoring/allOrNothingScoring.js +2 -0
  8. package/cypress/e2e/ILC/Highlight/{highlightBasicScoringForTextSelectionTypes.js → HighlightScoring/highlightBasicScoringForTextSelectionTypes.js} +1 -1
  9. package/cypress/e2e/ILC/Highlight/HighlightScoring/{manualAndNonScored.js → manuallyAndNonScored.js} +1 -1
  10. package/cypress/e2e/ILC/Highlight/HighlightScoring/{partialDifferentWeightsCorrectEqualToAlternatePoints.js → partialDifferentWeightsCorrectPointsEqualToAlternatePoints.js} +2 -0
  11. package/cypress/e2e/ILC/Highlight/HighlightScoring/partialDifferentWeightsScoring.js +7 -2
  12. package/cypress/e2e/ILC/Highlight/HighlightScoring/partialEqualWeightsCorrectPointEqualToAlternatePoints.js +2 -0
  13. package/cypress/e2e/ILC/Highlight/HighlightScoring/partialEqualWeightsScoring.js +6 -1
  14. package/cypress/e2e/ILC/Highlight/highlightAdditionalSettingsBasic.js +2 -3
  15. package/cypress/e2e/ILC/Highlight/highlightAdditionalSettingsMaximumNumberOfAnswers.js +0 -2
  16. package/cypress/e2e/ILC/Highlight/highlightEditTabScoringSection.js +4 -3
  17. package/cypress/e2e/ILC/HighlightImage/highlightImageAdditionalSettings.js +4 -4
  18. package/cypress/e2e/ILC/HighlightImage/highlightImageAdditionalSettingsBasic.js +4 -10
  19. package/cypress/e2e/ILC/HighlightImage/highlightImageAllOrNothingScoring.js +3 -3
  20. package/cypress/e2e/ILC/HighlightImage/highlightImageEditTabScoring.js +9 -5
  21. package/cypress/e2e/ILC/HighlightImage/highlightImageManuallyAndNonScoredScoring.js +1 -1
  22. package/cypress/e2e/ILC/HighlightImage/highlightImagePartialDifferentWeightsScoring.js +14 -15
  23. package/cypress/e2e/ILC/HighlightImage/highlightImagePartialDifferentWeightsWithAlternateAnswer.js +0 -3
  24. package/cypress/e2e/ILC/HighlightImage/highlightImagePartialEqualWeightsScoring.js +14 -14
  25. package/cypress/e2e/ILC/UploadResponse/uploadResponseAdditionalSettings.js +60 -66
  26. package/cypress/e2e/ILC/UploadResponse/uploadResponseEditTabBasicSections.js +84 -109
  27. package/cypress/e2e/ILC/UploadResponse/uploadResponseHeaderSection.js +4 -18
  28. package/cypress/e2e/ILC/UploadResponse/uploadResponsePreview.js +119 -150
  29. package/cypress/e2e/ILC/UploadResponse/uploadResponseScoringSection.js +2 -2
  30. package/cypress/e2e/ILC/UploadResponse/uplodResponsePreviewUploadedFileProperties.js +110 -164
  31. package/cypress/e2e/ILC/VideoResponse/videoResponseAdditionalSettings.js +1 -1
  32. package/cypress/e2e/ILC/VideoResponse/videoResponseAdditionalSettingsBasic.js +11 -12
  33. package/cypress/e2e/ILC/VideoResponse/videoResponsePreviewTab.js +6 -5
  34. package/cypress/fixtures/theme/ilc.json +2 -1
  35. package/cypress/pages/audioPlayerPage.js +2 -2
  36. package/cypress/pages/components/additionalSettingsPanel.js +46 -14
  37. package/cypress/pages/components/autoScoredAdditionalSettings.js +6 -6
  38. package/cypress/pages/components/autoScoredPreviewBase.js +6 -8
  39. package/cypress/pages/components/autoScoredScoringSection.js +22 -18
  40. package/cypress/pages/components/autoScoredScoringSectionMultipleResponsesType.js +60 -9
  41. package/cypress/pages/components/autoScoredSetCorrectAnswerSection.js +7 -7
  42. package/cypress/pages/components/createQuestionBasePage.js +8 -2
  43. package/cypress/pages/components/draggableOptionsContainer.js +2 -1
  44. package/cypress/pages/components/equationEditorFlyout.js +2 -1
  45. package/cypress/pages/components/essayResponseCommonComponents.js +10 -4
  46. package/cypress/pages/components/figOverImageCommonComponent.js +2 -1
  47. package/cypress/pages/components/fillInTheGapsCommonComponents.js +34 -14
  48. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +1 -1
  49. package/cypress/pages/components/fillInTheGapsTextCommonComponent.js +7 -7
  50. package/cypress/pages/components/listSortingAndOrderingBase.js +1 -1
  51. package/cypress/pages/components/mcqAdditionalSettingsBase.js +10 -0
  52. package/cypress/pages/components/mcqQuestionCommonComponents.js +1 -1
  53. package/cypress/pages/components/mcqScoringComponent.js +1 -1
  54. package/cypress/pages/components/previewScoringAndShowCorrectAnswerComponent.js +20 -18
  55. package/cypress/pages/components/questionInstructionsComponent.js +1 -1
  56. package/cypress/pages/components/scoringSectionBase.js +30 -1
  57. package/cypress/pages/components/setPointsPopupBase.js +2 -1
  58. package/cypress/pages/components/uploadImageSectionComponent.js +8 -8
  59. package/cypress/pages/createItemPage.js +83 -1
  60. package/cypress/pages/dialogBoxBase.js +3 -7
  61. package/cypress/pages/dragAndDropIntoCategoriesPage.js +5 -4
  62. package/cypress/pages/essayResponsePage.js +1 -0
  63. package/cypress/pages/fillInTheGapsDragAndDropPage.js +1 -0
  64. package/cypress/pages/fillInTheGapsScoring.js +215 -317
  65. package/cypress/pages/highlightImagePage.js +6 -4
  66. package/cypress/pages/highlightPage.js +1 -2
  67. package/cypress/pages/index.js +4 -0
  68. package/cypress/pages/listMatchingPage.js +5 -4
  69. package/cypress/pages/listMatchingScoring.js +274 -272
  70. package/cypress/pages/listOrderingPage.js +23 -14
  71. package/cypress/pages/listSortingPage.js +7 -9
  72. package/cypress/pages/multipleSelectionPage.js +2 -1
  73. package/cypress/pages/shortTextResponsePage.js +9 -0
  74. package/cypress/pages/singleSelectionPage.js +1 -0
  75. package/cypress/pages/uploadResponsePage.js +296 -15
  76. package/cypress/pages/videoResponsePage.js +5 -6
  77. package/package.json +1 -1
@@ -5,7 +5,7 @@ const css = Cypress.env('css');
5
5
 
6
6
  const selectors = {
7
7
  allowStudentsToCheckAnswerLabel: () => cy.get('.allow-student-check-answer-checkbox-wrapper .MuiFormControlLabel-label'),
8
- allowStudentsToCheckAnswerCheckbox: () => cy.get('.ngie-checkbox [aria-label="Allow students to check answer"]'),
8
+ allowStudentsToCheckAnswerCheckbox: () => cy.get('.ngie-checkbox [aria-label="Allow student to check answer"]'),
9
9
  checkAnswerLabel: () => cy.get('.edit-check-answer-label'),
10
10
  maximumCheckAnswerAttemptsLabel: () => cy.get('[class*="CheckAnswerstyles__OptionWrapper"] label[class*="MuiFormLabel-root MuiInputLabel-root"]'),
11
11
  maximumCheckAnswerAttemptsInputField: () => cy.get('[class*="CheckAnswerstyles__OptionWrapper"] input[type="text"]'),
@@ -48,11 +48,11 @@ const tests = {
48
48
  .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
49
49
  });
50
50
 
51
- it('\'Check Answer\' label, \'Allow students to check answer\' checkbox label and checkbox should be displayed and by default it should be unchecked', () => {
51
+ it('\'Check Answer\' label, \'Allow student to check answer\' checkbox label and checkbox should be displayed and by default it should be unchecked', () => {
52
52
  autoScoredAdditionalSettings.checkAnswerLabel()
53
53
  .verifyInnerText('Check answer');
54
54
  autoScoredAdditionalSettings.allowStudentsToCheckAnswerLabel()
55
- .verifyInnerText('Allow students to check answer');
55
+ .verifyInnerText('Allow student to check answer');
56
56
  autoScoredAdditionalSettings.allowStudentsToCheckAnswerCheckbox()
57
57
  .should('not.be.checked');
58
58
  if (questionType === 'multiple selection' || questionType === 'single selection') {
@@ -64,7 +64,7 @@ const tests = {
64
64
  }
65
65
  });
66
66
 
67
- it('When the user checks the \'Allow students to check answer\' checkbox, \'Maximum check answer attempts\' label and input field should be displayed', () => {
67
+ it('When the user checks the \'Allow student to check answer\' checkbox, \'Maximum check answer attempts\' label and input field should be displayed', () => {
68
68
  autoScoredAdditionalSettings.allowStudentsToCheckAnswerCheckbox()
69
69
  .click()
70
70
  .should('be.checked');
@@ -121,7 +121,7 @@ const tests = {
121
121
  .should('not.have.class', 'Mui-disabled');
122
122
  });
123
123
 
124
- it('When the user unchecks the \'Allow students to check answer\' checkbox, then the \'Maximum check answer attempts\' input field should not be displayed and in Preview tab the \'Check Answer\' button should not be displayed', () => {
124
+ it('When the user unchecks the \'Allow student to check answer\' checkbox, then the \'Maximum check answer attempts\' input field should not be displayed and in Preview tab the \'Check Answer\' button should not be displayed', () => {
125
125
  cy.log('Pre step: Switching to Edit tab')
126
126
  createQuestionBasePage.steps.switchToEditTab();
127
127
  autoScoredAdditionalSettings.allowStudentsToCheckAnswerCheckbox()
@@ -164,7 +164,7 @@ const tests = {
164
164
  .click();
165
165
  autoScoredPreviewBase.checkAnswerButton()
166
166
  .click();
167
- autoScoredPreviewBase.correctIncorectAnswerLabel()
167
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
168
168
  .should('not.exist');
169
169
  autoScoredPreviewBase.correctIcon()
170
170
  .should('not.exist');
@@ -4,7 +4,7 @@ const css = Cypress.env('css');
4
4
  const selectors = {
5
5
  correctIcon: () => cy.get('.icon-correct'),
6
6
  incorrectIcon: () => cy.get('.icon-incorrect'),
7
- correctIncorectAnswerLabel: () => cy.get('.answer-label-text'),
7
+ correctIncorrectAnswerLabel: () => cy.get('.answer-label-text'),
8
8
  checkAnswerButton: () => cy.get('.check-answer-and-status-wrapper button'),
9
9
  correctIncorrectAnswerBorder: () => cy.get('[class*="question-preview-wrapper"] [class*="correct-answer-border"]')
10
10
  }
@@ -29,7 +29,7 @@ const steps = {
29
29
  },
30
30
 
31
31
  verifyCorrectIncorrectAnswerLabel: (labelText) => {
32
- autoScoredPreviewBase.correctIncorectAnswerLabel()
32
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
33
33
  .should('be.visible')
34
34
  .verifyInnerText(`${labelText} answer`)
35
35
  .parents('[class*="CorrectIncorrectAnswerstyles__AnswerLabelWrapper"]')
@@ -60,20 +60,18 @@ const steps = {
60
60
  },
61
61
 
62
62
  verifyCorrectIncorrectAnswerLabelNotExists: () => {
63
- autoScoredPreviewBase.correctIncorectAnswerLabel()
63
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
64
64
  .should('not.exist');
65
65
  },
66
66
 
67
67
  verifyQuestionPreviewStateWhenShowCorrectAnswerIsUnchecked: () => {
68
- cy.log('After deselecting Show correct answer checkbox, the question preview should return to the previous state');
69
- previewScoringAndShowCorrectAnswerComponent.showCorrectAnswerCheckbox()
70
- .click()
71
- .should('not.be.checked');
68
+ cy.log('After selecting student view radio button, the question preview should return to the previous state');
69
+ previewScoringAndShowCorrectAnswerComponent.steps.uncheckShowCorrectAnswerCheckbox();
72
70
  autoScoredPreviewBase.correctIcon()
73
71
  .should('not.exist');
74
72
  autoScoredPreviewBase.incorrectIcon()
75
73
  .should('not.exist');
76
- autoScoredPreviewBase.correctIncorectAnswerLabel()
74
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
77
75
  .should('not.exist');
78
76
  autoScoredPreviewBase.correctIncorrectAnswerBorder()
79
77
  .should('not.exist');
@@ -42,7 +42,7 @@ const steps = {
42
42
 
43
43
  verifyPreviewTabPointsBackgroundForIncorrectOrPartiallyCorrectAnswer: () => {
44
44
  previewScoringAndShowCorrectAnswerComponent.previewScoreText()
45
- .should('have.css', 'color', css.color.labels)
45
+ .should('have.css', 'color', css.color.text)
46
46
  .and('not.have.css', 'background-color', css.color.correctAnswer);
47
47
  },
48
48
 
@@ -62,8 +62,10 @@ const tests = {
62
62
  scoringSectionBase.pointsInputField()
63
63
  .should('have.value', '')
64
64
  .and('be.visible');
65
+ scoringSectionBase.steps.expandMinimumScoringDropdown();
66
+ scoringSectionBase.steps.selectMinimumScoringTypeListOption('Award minimum score only if attempted');
65
67
  scoringSectionBase.minimumScoreIfAttemptedLabel()
66
- .verifyInnerText('Minimum score awarded (if attempted)')
68
+ .verifyInnerText('Minimum points')
67
69
  .and('be.visible');
68
70
  scoringSectionBase.minimumScoreIfAttemptedInputField()
69
71
  .should('have.value', '')
@@ -96,7 +98,7 @@ const tests = {
96
98
  scoringSectionBase.pointsInputField()
97
99
  .should('have.value', '0')
98
100
  .should('be.disabled');
99
- scoringSectionBase.minimumScoreIfAttemptedInputField()
101
+ scoringSectionBase.minimumScoringDropdown()
100
102
  .should('not.exist');
101
103
  });
102
104
 
@@ -106,11 +108,17 @@ const tests = {
106
108
  },
107
109
 
108
110
  verifyShowCorrectAnswerAndPointsInPreviewTabWhenNoCorrectAnswerIsSet: () => {
109
- it('When the user has not set correct answer option(s) and alloted points, \'Show correct answer\' and points should not be displayed in the preview tab', () => {
111
+ it('When the user has not set correct answer option(s) and alloted points, \'Student view\' radio button should be checked, \'Grading view\' button should not be checked, 0 points should be displayed and no correct or incorrect icons should be displayed in the preview tab', () => {
110
112
  createQuestionBasePage.steps.switchToPreviewTab();
111
- previewScoringAndShowCorrectAnswerComponent.showCorrectAnswerCheckbox()
112
- .should('not.exist');
113
+ previewScoringAndShowCorrectAnswerComponent.studentViewRadioButton()
114
+ .should('be.checked');
115
+ previewScoringAndShowCorrectAnswerComponent.gradingViewRadioButton()
116
+ .should('not.be.checked');
113
117
  previewScoringAndShowCorrectAnswerComponent.previewScoreText()
118
+ .should('have.text', '0/0');
119
+ autoScoredPreviewBase.correctIcon()
120
+ .should('not.exist');
121
+ autoScoredPreviewBase.incorrectIcon()
114
122
  .should('not.exist');
115
123
  });
116
124
  },
@@ -134,14 +142,14 @@ const tests = {
134
142
  .should('have.css', 'color', css.color.primaryBtn)
135
143
  .and('have.css', 'background-color', css.color.correctAnswer)
136
144
  if (steps.correctIncorrectLabelAndBorderExists(questionType)) {
137
- autoScoredPreviewBase.correctIncorectAnswerLabel()
145
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
138
146
  .verifyCSS(css.color.correctAnswer, css.fontSize.normal, css.fontWeight.bold)
139
147
  .parent()
140
- .find('.answer-label-icon')
148
+ .find('.icon-correct')
141
149
  .verifyPseudoClassBeforeProperty('color', css.color.correctAnswer);
142
150
  autoScoredPreviewBase.steps.verifyCorrectAttemptBorder();
143
151
  } else {
144
- autoScoredPreviewBase.correctIncorectAnswerLabel()
152
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
145
153
  .should('not.exist');
146
154
  autoScoredPreviewBase.correctIncorrectAnswerBorder()
147
155
  .should('not.exist');
@@ -157,22 +165,20 @@ const tests = {
157
165
  it('CSS of incorrect answer state', { tags: 'css' }, () => {
158
166
  cy.log('Pre requisite: The user has attempted the question incorrectly')
159
167
  cy.log('Pre step: Select show answer checkbox')
160
- previewScoringAndShowCorrectAnswerComponent.showCorrectAnswerCheckbox()
161
- .click()
162
- .should('be.checked');
168
+ previewScoringAndShowCorrectAnswerComponent.steps.checkShowCorrectAnswerCheckbox();
163
169
  cy.log('Verifying CSS of incorrect crossmark icon')
164
170
  autoScoredPreviewBase.incorrectIcon()
165
171
  .eq(0)
166
172
  .verifyPseudoClassBeforeProperty('color', css.color.incorrectAnswer);
167
173
  if (steps.correctIncorrectLabelAndBorderExists(questionType)) {
168
- autoScoredPreviewBase.correctIncorectAnswerLabel()
174
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
169
175
  .verifyCSS(css.color.incorrectAnswer, css.fontSize.normal, css.fontWeight.bold)
170
176
  .parent()
171
- .find('.answer-label-icon')
177
+ .find('.icon-incorrect')
172
178
  .verifyPseudoClassBeforeProperty('color', css.color.incorrectAnswer);
173
179
  autoScoredPreviewBase.steps.verifyIncorrectAttemptBorder();
174
180
  } else {
175
- autoScoredPreviewBase.correctIncorectAnswerLabel()
181
+ autoScoredPreviewBase.correctIncorrectAnswerLabel()
176
182
  .should('not.exist');
177
183
  autoScoredPreviewBase.correctIncorrectAnswerBorder()
178
184
  .should('not.exist');
@@ -182,9 +188,7 @@ const tests = {
182
188
  it('Accessibility of incorrect answer state', { tags: 'a11y' }, () => {
183
189
  cy.checkAccessibility(commonComponents.previewTabQuestionWrapper());
184
190
  cy.log('Post step: Deselect show answer checkbox')
185
- previewScoringAndShowCorrectAnswerComponent.showCorrectAnswerCheckbox()
186
- .click()
187
- .should('not.be.checked');
191
+ previewScoringAndShowCorrectAnswerComponent.steps.uncheckShowCorrectAnswerCheckbox();
188
192
  });
189
193
  }
190
194
  }
@@ -1,3 +1,4 @@
1
+ import utilities from "../../support/helpers/utilities";
1
2
  import { commonComponents } from "./commonComponents";
2
3
  import { scoringSectionBase } from "./scoringSectionBase";
3
4
  const css = Cypress.env('css');
@@ -13,8 +14,24 @@ const selectors = {
13
14
  partialEqualWeightsPointsPerResponseScore: () => cy.get('.cloze-with-text-partial-points'),
14
15
  penaltyPointsLabel: () => cy.get('.penalty-points-label'),
15
16
  penaltyPointsInputField: () => cy.get('.penlty-points-input-field [type="text"]'),
16
- rounddownScoreCheckboxLabel: () => cy.get('[data-ngie-testid="round-down-score-checkbox"] .MuiFormControlLabel-label'),
17
+ rounddownScoreCheckboxLabel: () => cy.get('#rounding-dropdown-label'),
17
18
  rounddownScoreCheckbox: () => cy.get('[data-ngie-testid="round-down-score-checkbox"] input'),
19
+ roundingDropdown: () => cy.get('#rounding-select'),
20
+ roundingDropdownListOptions: (ariaLabel = null) => {
21
+ if (ariaLabel) {
22
+ return cy.get(`[aria-labelledby*="rounding-dropdown-label"] [role="option"][aria-label*="${ariaLabel}"]`)
23
+ } else {
24
+ return cy.get('[aria-labelledby*="rounding-dropdown-label"] [role="option"]')
25
+ }
26
+ },
27
+ penaltyScoringDropdown: () => cy.get('#penalty-scoring-select'),
28
+ penaltyScoringDropdownListOptions: (ariaLabel = null) => {
29
+ if (ariaLabel) {
30
+ return cy.get(`[aria-labelledby*="penalty-scoring-dropdown-label"] [role="option"][aria-label*="${ariaLabel}"]`)
31
+ } else {
32
+ return cy.get('[aria-labelledby*="penalty-scoring-dropdown-label"] [role="option"]')
33
+ }
34
+ },
18
35
  }
19
36
 
20
37
  const steps = {
@@ -41,6 +58,8 @@ const steps = {
41
58
 
42
59
  //V3 - This function should be updated in all files
43
60
  verifyDefaultPenaltyPointsInputFieldAndLabel: () => {
61
+ autoScoredScoringSectionMultipleResponsesType.steps.expandPenaltyScoringDropdown();
62
+ autoScoredScoringSectionMultipleResponsesType.steps.selectOptionFromPenaltyScoringDropdown('Penalty points for the entire question');
44
63
  autoScoredScoringSectionMultipleResponsesType.penaltyPointsLabel()
45
64
  .verifyInnerText('Penalty points')
46
65
  .should('be.visible');
@@ -52,14 +71,44 @@ const steps = {
52
71
  //V3 - This function should be updated in all files
53
72
  verifyDefaultRoundDownScoreCheckboxCheckedAndLabel: () => {
54
73
  autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel()
55
- .verifyInnerText('Round down score')
74
+ .verifyInnerText('Rounding')
56
75
  .and('be.visible');
57
- autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckbox()
58
- .should('be.checked');
76
+ autoScoredScoringSectionMultipleResponsesType.roundingDropdown()
77
+ .verifyInnerText('None');
78
+ },
79
+
80
+ expandRoundingDropdown: () => {
81
+ autoScoredScoringSectionMultipleResponsesType.roundingDropdown()
82
+ .click();
83
+ },
84
+
85
+ /**
86
+ * @param {("none" | "round down if <= 0.99" | "round down if <= 0.50"|"round down if <= 0.50; Round up if > 0.50")} dropdownOption aria-label of dropdown options
87
+ * @description this function selects dropdown option from rounding dropdown
88
+ */
89
+ selectOptionFromRoundingDropdownOption: (dropdownOption) => {
90
+ autoScoredScoringSectionMultipleResponsesType.roundingDropdownListOptions(dropdownOption)
91
+ .click();
92
+ },
93
+
94
+ expandPenaltyScoringDropdown: () => {
95
+ autoScoredScoringSectionMultipleResponsesType.penaltyScoringDropdown()
96
+ .click();
97
+ },
98
+
99
+ /**
100
+ * @param {("No penalty points" | "Penalty points for the entire question" | "Penalty points for each incorrect option")} dropdownOption aria-label of dropdown options
101
+ * @description this function selects dropdown option from penalty points dropdown
102
+ */
103
+ selectOptionFromPenaltyScoringDropdown: (dropdownOption) => {
104
+ autoScoredScoringSectionMultipleResponsesType.penaltyScoringDropdownListOptions(dropdownOption)
105
+ .click();
59
106
  },
60
107
 
61
108
  //V3 - This function should be updated in all files
62
109
  allotPenaltyPoints: (points) => {
110
+ autoScoredScoringSectionMultipleResponsesType.steps.expandPenaltyScoringDropdown();
111
+ autoScoredScoringSectionMultipleResponsesType.steps.selectOptionFromPenaltyScoringDropdown('Penalty points for the entire question');
63
112
  autoScoredScoringSectionMultipleResponsesType.penaltyPointsInputField()
64
113
  .clear()
65
114
  .type(points)
@@ -248,14 +297,16 @@ const tests = {
248
297
  it('CSS of \'Round down score\' checkbox - checked state', { tags: 'css' }, () => {
249
298
  autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel()
250
299
  .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
251
- autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckbox()
252
- .parent()
253
- .find('svg g g')
254
- .should('have.css', 'fill', css.color.activeButtons);
300
+ utilities.verifyCSS(autoScoredScoringSectionMultipleResponsesType.roundingDropdown(), {
301
+ 'color' : css.color.liText,
302
+ 'font-size' : css.fontSize.default,
303
+ 'font-weight' : css.fontWeight.regular,
304
+ 'border' : `1px solid ${css.color.defaultDropdownBorder}`
305
+ })
255
306
  });
256
307
 
257
308
  it('Accessibility of \'Round down score\' checkbox - checked state', { tags: 'a11y' }, () => {
258
- cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel());
309
+ cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.roundingDropdown());
259
310
  });
260
311
  },
261
312
  }
@@ -82,9 +82,9 @@ const steps = {
82
82
 
83
83
  const tests = {
84
84
  verifyAutoScoredSetCorrectAnswerHeaderSectionContents: (questionType) => {
85
- it('\'Set Correct Answer\' label and help text should be displayed in \'Set Correct Answer\' section', () => {
85
+ it('\'Specify correct answer\' label and help text should be displayed in \'Specify correct answer\' section', () => {
86
86
  autoScoredSetCorrectAnswerSection.setCorrectAnswerLabel()
87
- .verifyInnerText('Set correct answer');
87
+ .verifyInnerText('Specify correct answer');
88
88
 
89
89
  let helpText;
90
90
  switch (questionType) {
@@ -142,14 +142,14 @@ const tests = {
142
142
  autoScoredSetCorrectAnswerSection.setCorrectAnswerHelpText().verifyInnerText(helpText);
143
143
  });
144
144
 
145
- it('CSS of \'Set correct answer\' header section', { tags: 'css' }, () => {
146
- cy.log('CSS of set correct answer label')
145
+ it('CSS of \'Specify correct answer\' header section', { tags: 'css' }, () => {
146
+ cy.log('CSS of Specify correct answer label')
147
147
  autoScoredSetCorrectAnswerSection.setCorrectAnswerLabel()
148
148
  .verifyCSS(css.color.sectionHeading, css.fontSize.default, css.fontWeight.semibold);
149
- cy.log('CSS of set correct answer help text')
149
+ cy.log('CSS of Specify correct answer help text')
150
150
  autoScoredSetCorrectAnswerSection.setCorrectAnswerHelpText()
151
151
  .verifyCSS(css.color.helperText, css.fontSize.normal, css.fontWeight.regular);
152
- cy.log('CSS of set correct answer correct tab')
152
+ cy.log('CSS of Specify correct answer correct tab')
153
153
  autoScoredSetCorrectAnswerSection.correctTab()
154
154
  .verifyCSS(css.color.secondaryBtnActive, css.fontSize.default, css.fontWeight.bold);
155
155
  });
@@ -163,7 +163,7 @@ const tests = {
163
163
  verifyAutoScoredAlternateAnswer: (questionType = null) => {
164
164
  it('\'Add Alternate Answer\' button should be present', () => {
165
165
  autoScoredSetCorrectAnswerSection.alternateAnswerButton()
166
- .verifyInnerText('Add alternate answer');
166
+ .verifyInnerText('Add alternative answer');
167
167
  });
168
168
 
169
169
  it('CSS of \'Add Alternate Answer\' button', { tags: 'css' }, () => {
@@ -69,7 +69,7 @@ const steps = {
69
69
  createQuestionBasePage.previewTab()
70
70
  .should('have.attr', 'aria-selected', 'true');
71
71
  },
72
-
72
+
73
73
  clickOnSaveQuestionButton: () => {
74
74
  createQuestionBasePage.saveQuestionButton()
75
75
  .click();
@@ -83,6 +83,12 @@ const steps = {
83
83
  verifyPreviewTabNotSelectedState: () => {
84
84
  createQuestionBasePage.previewTab()
85
85
  .should('have.attr', 'aria-selected', 'false');
86
+ },
87
+
88
+ verifySavedSuccessfullySnackbar: () => {
89
+ commonComponents.snackbar()
90
+ .should('have.text', 'Saved successfully!')
91
+ .should('be.visible');
86
92
  }
87
93
  }
88
94
 
@@ -114,7 +120,7 @@ const tests = {
114
120
  });
115
121
 
116
122
  it('\'Save\' button should be displayed', () => {
117
- if (questionType === 'Passage' || questionType === 'Reading ruler') {
123
+ if (questionType === 'Passage' || questionType === 'Reading ruler' || questionType === 'Audio player') {
118
124
  createQuestionBasePage.saveQuestionButton()
119
125
  .verifyInnerText('Save');
120
126
  }
@@ -28,7 +28,8 @@ const selectors = {
28
28
  },
29
29
  previewTabGroupedResponseContainer: () => cy.get('.edit-question-preview-wrapper [class*="GroupDiv"]'),
30
30
  previewTabGroupedResponseTitle: () => cy.get('.edit-question-preview-wrapper [class*="GroupTitleWrapper"]'),
31
- previewTabGroupedResponseOptionsGrid: () => cy.get('.edit-question-preview-wrapper [class*="DraggableGroupsGrid"]')
31
+ previewTabGroupedResponseOptionsGrid: () => cy.get('.edit-question-preview-wrapper [class*="DraggableGroupsGrid"]'),
32
+ draggableOptionText: () => cy.get('.icon-container-wrapper [class*="DraggableItemsstyle__QuestionTextWrapper"]')
32
33
  }
33
34
 
34
35
  const steps = {
@@ -30,7 +30,8 @@ const selectors = {
30
30
  buttonPrevious: () => cy.get('.previous-btn'),
31
31
  inputFieldCursor: () => cy.get('.mq-hasCursor'),
32
32
  inputFieldFirstEmptyBox: () => cy.get('.mq-empty').eq(0),
33
- categoryTooltip: () => cy.get('.__react_component_tooltip')
33
+ categoryTooltip: () => cy.get('.__react_component_tooltip'),
34
+ dialogBoxTitle: () => cy.get('[role="alertdialog"]')
34
35
  }
35
36
 
36
37
  const steps = {
@@ -14,9 +14,9 @@ const selectors = {
14
14
  previewTabToolbarWrapper: () => cy.get('.toolbar-overlay'),
15
15
  previewTabToolbarOption: (formattingOption = null) => {
16
16
  if (formattingOption) {
17
- return cy.get(`.essay-preview-wrapper a[title = "${formattingOption}"]`).eq(0)
17
+ return cy.get(`.essay-preview-wrapper a[title = "${formattingOption}"]`)
18
18
  } else {
19
- return cy.get('.essay-preview-wrapper a[title]').eq(0)
19
+ return cy.get('.essay-preview-wrapper a[role="button"]')
20
20
  }
21
21
  },
22
22
  //Additional settings
@@ -37,8 +37,8 @@ const selectors = {
37
37
  customSpecialCharacterInputField: () => cy.get('input[aria-label="Custom Special Characters"]'),
38
38
  wordLimitReachedWarningMessage: () => cy.get('[data-at="limit-reached"]'),
39
39
  //Preview tab
40
- responseField: () => cy.get('[title="Enter your response to the question here."]').eq(0),
41
- responseFieldWordCount: () => cy.get('[data-at="character-count"]').eq(0),
40
+ responseField: () => cy.get('[title="Enter your response to the question here."]'),
41
+ responseFieldWordCount: () => cy.get('[data-at="character-count"]'),
42
42
  }
43
43
 
44
44
  const steps = {
@@ -96,6 +96,12 @@ const steps = {
96
96
  .type('{backspace}');
97
97
  },
98
98
 
99
+ enterTextInPredefinedTextInputField: (predefinedText) => {
100
+ essayResponseCommonComponents.predefinedTextInputField()
101
+ .type(predefinedText)
102
+ .should('have.text', predefinedText);
103
+ },
104
+
99
105
  verifyGradingViewResponseFieldIsNonEditable: () => {
100
106
  essayResponseCommonComponents.responseField()
101
107
  .should('have.attr', 'contenteditable', 'false');
@@ -9,6 +9,7 @@ const pointerDropdownList = ['Left', 'Right', 'Top', 'Bottom', 'Top left', 'Top
9
9
 
10
10
  const selectors = {
11
11
  addResponseContainerButton: () => cy.get('[class*="ResponseOnImagestyles"] .ngie-icon-with-label-btn').eq(0),
12
+ addResponseContainerButtonWrapper: () => cy.get('[class*="ResponseOnImagestyles__ButtonWrapper"]'),
12
13
  //Change selectors after https://redmine.zeuslearning.com/issues/518498 is fixed
13
14
  responseContainer: () => cy.get('.react-draggable'),
14
15
  responseContainerCloseButton: () => cy.get('.remove-button'),
@@ -30,7 +31,7 @@ const selectors = {
30
31
  ariaLabelsInputFieldNumeration: () => cy.get('.start-adornment'),
31
32
  pleaseAddResponseTokenHelpText: () => cy.get('[class*="ClozeWithTextResponsestyles__AddResponseLabel"]'),
32
33
  setCorrectAnswerResponseFieldLabel: () => cy.get('.cloze-with-text-form-control-wrapper .input-field-label'),
33
- imageSectionImageLabel: () => cy.get('[class*="LabelImageWithDropDownstyles__LabelWrapper"]'),
34
+ imageSectionImageLabel: () => cy.get('[class*="LabelImage"][class*="styles__LabelWrapper"]'),
34
35
  imageSectionImage: () => cy.get('.image-container img'),
35
36
  imagePreviewTab: () => cy.get('[class*="ClozeWithTextResponsestyles__ContentWrapper"] .image-container img'),
36
37
  imagePropertiesContainer: () => cy.get('[class*="AddTextResponseOnImagestyles__DimensionsContainer"]'),
@@ -178,6 +178,19 @@ const steps = {
178
178
  fillInTheGapsCommonComponents.previewTabCorrectAnswerResponseWrapper()
179
179
  .should('have.length', correctAnswerArray.length);
180
180
  },
181
+
182
+ setPlaceholderText: (placeholder) => {
183
+ fillInTheGapsCommonComponents.placeholderTextInputField()
184
+ .type(placeholder)
185
+ .should('have.value', placeholder);
186
+ },
187
+
188
+ setResponseContainerHeight: (height) => {
189
+ fillInTheGapsCommonComponents.heightInputField()
190
+ .type(height)
191
+ .should('have.value', height)
192
+ .blur();
193
+ }
181
194
  }
182
195
 
183
196
  const tests = {
@@ -246,17 +259,19 @@ const tests = {
246
259
  autoScoredScoringSectionMultipleResponsesType.penaltyPointsInputField()
247
260
  .should('have.value', '')
248
261
  .and('be.visible');
262
+ scoringSectionBase.steps.expandMinimumScoringDropdown();
263
+ scoringSectionBase.steps.selectMinimumScoringTypeListOption('Award minimum score only if attempted');
249
264
  scoringSectionBase.minimumScoreIfAttemptedLabel()
250
- .verifyInnerText('Minimum score awarded (if attempted)')
265
+ .verifyInnerText('Minimum points')
251
266
  .and('be.visible');
252
267
  scoringSectionBase.minimumScoreIfAttemptedInputField()
253
268
  .should('have.value', '')
254
269
  .and('be.visible');
255
270
  autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel()
256
- .verifyInnerText('Round down score')
271
+ .verifyInnerText('Rounding')
257
272
  .and('be.visible');
258
- autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckbox()
259
- .should('be.checked');
273
+ autoScoredScoringSectionMultipleResponsesType.roundingDropdown()
274
+ .verifyInnerText('None');
260
275
  });
261
276
 
262
277
  it('When user gives a score input to \'Points\' input field, then the score should be equally divided and displayed besides each response under the \'Points per response\' label', () => {
@@ -299,13 +314,13 @@ const tests = {
299
314
  scoringSectionBase.minimumScoreIfAttemptedLabel()
300
315
  .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
301
316
  autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel()
302
- .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
317
+ .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
303
318
  });
304
319
 
305
320
  it('Accessibility of \'Penalty Points\' and \'Minimum score awarded (if attempted)\' input field and \'Round down score\' checkbox', { tags: 'a11y' }, () => {
306
321
  cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.penaltyPointsInputField());
307
322
  cy.checkAccessibility(scoringSectionBase.minimumScoreIfAttemptedInputField());
308
- cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckbox());
323
+ cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.roundingDropdown());
309
324
  });
310
325
 
311
326
  it('When the user switches to \'All or nothing\' scoring, the \'Points per response\' label and the points displayed for individual responses should not be displayed and the points displayed in \'Points\' input field should remain unchanged', () => {
@@ -355,17 +370,19 @@ const tests = {
355
370
  autoScoredScoringSectionMultipleResponsesType.penaltyPointsInputField()
356
371
  .should('have.value', '')
357
372
  .and('be.visible');
373
+ scoringSectionBase.steps.expandMinimumScoringDropdown();
374
+ scoringSectionBase.steps.selectMinimumScoringTypeListOption('Award minimum score only if attempted');
358
375
  scoringSectionBase.minimumScoreIfAttemptedLabel()
359
- .verifyInnerText('Minimum score awarded (if attempted)')
376
+ .verifyInnerText('Minimum points')
360
377
  .and('be.visible');
361
378
  scoringSectionBase.minimumScoreIfAttemptedInputField()
362
379
  .should('have.value', '')
363
380
  .and('be.visible');
364
381
  autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel()
365
- .verifyInnerText('Round down score')
382
+ .verifyInnerText('Rounding')
366
383
  .and('be.visible');
367
- autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckbox()
368
- .should('be.checked');
384
+ autoScoredScoringSectionMultipleResponsesType.roundingDropdown()
385
+ .verifyInnerText('None');
369
386
  });
370
387
 
371
388
  it('When the user has not set any answer in the response, then the \'Points per response\' input field should be disabled', () => {
@@ -399,13 +416,13 @@ const tests = {
399
416
  scoringSectionBase.minimumScoreIfAttemptedLabel()
400
417
  .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
401
418
  autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckboxLabel()
402
- .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
419
+ .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
403
420
  });
404
421
 
405
422
  it('Accessibility of \'Points per response\', \'Penalty Points\' and \'Minimum score awarded (if attempted)\' input fields and \'Round down score\' checkbox', { tags: 'a11y' }, () => {
406
423
  cy.checkAccessibility(scoringSectionBase.pointsInputField());
407
424
  cy.checkAccessibility(scoringSectionBase.minimumScoreIfAttemptedInputField());
408
- cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.rounddownScoreCheckbox());
425
+ cy.checkAccessibility(autoScoredScoringSectionMultipleResponsesType.roundingDropdown());
409
426
  });
410
427
 
411
428
  it('When the user switches to \'All or nothing\' scoring, the points added for individual responses in Partial - different weights scoring should get summed up in the All or nothing scoring Points input field', () => {
@@ -430,7 +447,7 @@ const tests = {
430
447
  },
431
448
 
432
449
  verifyManuallyScoredScoringContents: () => {
433
- it('When the user has selected \'Manually Scored\' option from the Scoring Type dropdown then the \'Set Correct Answer\' section should not be displayed; \'All or Nothing\', \'Partial - equal weights\' and \'Partial - different weights\' radio buttons should not be displayed; \'Points\' and \'Minimum score awarded (if attempted)\' labels and input fields should be displayed; and inside Additional Settings accordion Check Answer section i.e. \'Allow students to check answer\' checkbox should not be displayed', () => {
450
+ it('When the user has selected \'Manually Scored\' option from the Scoring Type dropdown then the \'Set Correct Answer\' section should not be displayed; \'All or Nothing\', \'Partial - equal weights\' and \'Partial - different weights\' radio buttons should not be displayed; \'Points\' and \'Minimum score awarded (if attempted)\' labels and input fields should be displayed; and inside Additional Settings accordion Check Answer section i.e. \'Allow student to check answer\' checkbox should not be displayed', () => {
434
451
  autoScoredSetCorrectAnswerSection.setCorrectAnswerLabel()
435
452
  .should('not.exist');
436
453
  autoScoredScoringSectionMultipleResponsesType.allOrNothingCheckbox()
@@ -439,8 +456,11 @@ const tests = {
439
456
  .should('not.exist');
440
457
  autoScoredScoringSectionMultipleResponsesType.partialDifferentWeightsCheckbox()
441
458
  .should('not.exist');
459
+ cy.log('Pre-step: Selecting minimum scoring from dropdown');
460
+ scoringSectionBase.steps.expandMinimumScoringDropdown();
461
+ scoringSectionBase.steps.selectMinimumScoringTypeListOption('Award minimum score only if attempted');
442
462
  scoringSectionBase.minimumScoreIfAttemptedLabel()
443
- .verifyInnerText('Minimum score awarded (if attempted)')
463
+ .verifyInnerText('Minimum points')
444
464
  .and('be.visible');
445
465
  scoringSectionBase.minimumScoreIfAttemptedInputField()
446
466
  .should('have.value', '')
@@ -468,7 +468,7 @@ const tests = {
468
468
  },
469
469
 
470
470
  verifyManualScoringEditTabFunctionality: () => {
471
- it('When the user has selected \'Manually scored\' option from the \'Scoring type\' dropdown then the \'Set correct answer\' section should not be displayed; \'All or nothing\', \'Partial - equal weights\' and \'Partial - different weights\' radio buttons should not be displayed; \'Points\' and \'Minimum score awarded (if attempted)\' labels and input fields should be displayed and inside additional settings accordion, Check answer section i.e. \'Allow students to check answer\' checkbox should not be displayed', () => {
471
+ it('When the user has selected \'Manually scored\' option from the \'Scoring type\' dropdown then the \'Set correct answer\' section should not be displayed; \'All or nothing\', \'Partial - equal weights\' and \'Partial - different weights\' radio buttons should not be displayed; \'Points\' and \'Minimum score awarded (if attempted)\' labels and input fields should be displayed and inside additional settings accordion, Check answer section i.e. \'Allow student to check answer\' checkbox should not be displayed', () => {
472
472
  utilities.verifyElementVisibilityState(autoScoredSetCorrectAnswerSection.setCorrectAnswerLabel(), 'notExist');
473
473
  utilities.verifyElementVisibilityState(autoScoredScoringSectionMultipleResponsesType.allOrNothingCheckbox(), 'notExist');
474
474
  utilities.verifyElementVisibilityState(autoScoredScoringSectionMultipleResponsesType.partialEqualWeightsCheckbox(), 'notExist');
@@ -691,15 +691,15 @@ const steps = {
691
691
  * @param {string[]} optionNumerationArray - An array of expected numeration strings to verify.
692
692
  */
693
693
  verifyResponseFieldNumeration: (optionNumerationArray) => {
694
- fillInTheGapsTextCommonComponent.previewTabResponseWrapper()
695
- .should('be.visible')
696
- .within(() => {
697
- optionNumerationArray.forEach((optionNumeration, count) => {
694
+ optionNumerationArray.forEach((optionNumeration, count) => {
695
+ fillInTheGapsTextCommonComponent.previewTabResponseWrapper()
696
+ .eq(count)
697
+ .should('be.visible')
698
+ .within(() => {
698
699
  fillInTheGapsTextCommonComponent.responseNumeration()
699
- .eq(count)
700
700
  .should('have.text', `${optionNumeration}`);
701
701
  });
702
- });
702
+ });
703
703
  }
704
704
  }
705
705
 
@@ -856,7 +856,7 @@ const tests = {
856
856
  },
857
857
 
858
858
  verifyManualScoringEditTabFunctionality: () => {
859
- it('When the user has selected \'Manually scored\' option from the \'Scoring type\' dropdown then the \'Set correct answer\' section should not be displayed; \'All or nothing\', \'Partial - equal weights\' and \'Partial - different weights\' radio buttons should not be displayed; \'Points\' and \'Minimum score awarded (if attempted)\' labels and input fields should be displayed and inside additional settings accordion, Check answer section i.e. \'Allow students to check answer\' checkbox should not be displayed', () => {
859
+ it('When the user has selected \'Manually scored\' option from the \'Scoring type\' dropdown then the \'Set correct answer\' section should not be displayed; \'All or nothing\', \'Partial - equal weights\' and \'Partial - different weights\' radio buttons should not be displayed; \'Points\' and \'Minimum score awarded (if attempted)\' labels and input fields should be displayed and inside additional settings accordion, Check answer section i.e. \'Allow student to check answer\' checkbox should not be displayed', () => {
860
860
  utilities.verifyElementVisibilityState(autoScoredSetCorrectAnswerSection.setCorrectAnswerLabel(), 'notExist');
861
861
  utilities.verifyElementVisibilityState(autoScoredScoringSectionMultipleResponsesType.allOrNothingCheckbox(), 'notExist');
862
862
  utilities.verifyElementVisibilityState(autoScoredScoringSectionMultipleResponsesType.partialEqualWeightsCheckbox(), 'notExist');