itemengine-cypress-automation 1.0.133-7thMarchFixes-0e78080.0 → 1.0.133

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. package/cypress/e2e/ILC/DesmosGraphing/previewTabContent.smoke.js +1 -2
  2. package/cypress/e2e/ILC/DrawingResponse/drawingResponsePreviewTabContents.smoke.js +53 -54
  3. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialDifferentWeightsBasic.js +0 -149
  4. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +312 -0
  5. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/additionalSettingsBasic.js +71 -0
  6. package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/minimumScoringPenaltyPointsAndRoundingDropdown.js +194 -0
  7. package/cypress/e2e/ILC/GeogebraActivity/additionalSettings.js +98 -0
  8. package/cypress/e2e/ILC/GeogebraActivity/editTabScoringSection.js +56 -0
  9. package/cypress/e2e/ILC/GeogebraActivity/gradingViewAndCorrectAnswerViewContents.smoke.js +106 -0
  10. package/cypress/e2e/ILC/GeogebraActivity/headerSection.js +74 -0
  11. package/cypress/e2e/ILC/GeogebraActivity/previewTabContent.smoke.js +91 -0
  12. package/cypress/e2e/ILC/GeogebraActivity/questionInstructions.js +28 -0
  13. package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingPenaltyScoring.js +79 -0
  14. package/cypress/e2e/ILC/Graphing/Scoring/manuallyAndNonScoredScoring.js +253 -0
  15. package/cypress/e2e/ILC/Graphing/addBackgroundShapesSection.js +307 -0
  16. package/cypress/e2e/ILC/Graphing/additionalSettingsBasic.js +84 -0
  17. package/cypress/e2e/ILC/Graphing/editTabScoringSection.js +105 -0
  18. package/cypress/e2e/ILC/Graphing/headerSection.js +77 -0
  19. package/cypress/e2e/ILC/Graphing/layoutAndGridOptions.js +916 -0
  20. package/cypress/e2e/ILC/Graphing/minimumScoringPenaltyPointsAndRoundingDropdown.js +57 -0
  21. package/cypress/e2e/ILC/Graphing/previewContentsForAllViews.smoke.js +1 -1
  22. package/cypress/e2e/ILC/Graphing/specifyCorrectAnswerSection.js +72 -0
  23. package/cypress/e2e/ILC/Graphing/studentViewSettings.js +120 -0
  24. package/cypress/e2e/ILC/Graphing/toolsControlsAndBackgroundSection.js +858 -0
  25. package/cypress/e2e/ILC/ShortTextResponseNew/additionalSettings.js +337 -4
  26. package/cypress/fixtures/constants.js +1 -1
  27. package/cypress/fixtures/theme/ilc.json +3 -1
  28. package/cypress/pages/components/additionalSettingsAccessibilitySectionComponent.js +66 -0
  29. package/cypress/pages/components/additionalSettingsPanel.js +95 -90
  30. package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +9 -7
  31. package/cypress/pages/components/backgroundImageUploadComponent.js +16 -14
  32. package/cypress/pages/components/colorPopupComponent.js +14 -17
  33. package/cypress/pages/components/commonComponents.js +1 -1
  34. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +1 -1
  35. package/cypress/pages/components/imageCanvasComponent.js +3 -3
  36. package/cypress/pages/components/index.js +2 -2
  37. package/cypress/pages/components/opacityComponent.js +1 -1
  38. package/cypress/pages/components/scoringSectionBaseEditTab.js +18 -0
  39. package/cypress/pages/components/studentResponseAreaAndLayoutComponent.js +1 -1
  40. package/cypress/pages/dialogBoxBase.js +1 -1
  41. package/cypress/pages/drawingResponsePage.js +35 -4
  42. package/cypress/pages/fillInTheGapsOverImageDropdownPage.js +2 -2
  43. package/cypress/pages/fillInTheGapsOverImageTextPage.js +2 -0
  44. package/cypress/pages/geogebraActivityPage.js +106 -0
  45. package/cypress/pages/graphingPage.js +1458 -77
  46. package/cypress/pages/index.js +1 -0
  47. package/cypress/pages/multipleSelectionPage.js +0 -1
  48. package/cypress/pages/shortTextResponsePage.js +155 -3
  49. package/cypress/pages/uploadResponsePage.js +0 -2
  50. package/package.json +2 -2
@@ -1,6 +1,9 @@
1
+ import utilities from "../../support/helpers/utilities";
1
2
  import { commonComponents } from "./commonComponents";
2
3
  const css = Cypress.env('css');
3
4
 
5
+ const fontSizesOptions = ['Tiny', 'Small', 'Default', 'Normal', 'Big', 'Huge'];
6
+
4
7
  const selectors = {
5
8
  //Comment: added .first() because in fill in the gap questions, multiple accordions are created inside additional settings panel according to number of responses
6
9
  additionalSettingsPanel: () => cy.get('.additional-settings-container .MuiAccordionSummary-root').eq(0),
@@ -15,24 +18,29 @@ const selectors = {
15
18
  //Font-size dropdown
16
19
  fontSizeLabel: () => cy.get('#Font-Size-dropdown-label'),
17
20
  fontSizeDropdown: () => cy.get('#Font-Size-select'),
18
- fontSizeListOptions: (optionIndex) => cy.get('[aria-labelledby="Font-Size-dropdown-label Font-Size-placeholder"] li[role="option"]').eq(optionIndex),
21
+ fontSizeListOptions: (ariaLabel = null) => {
22
+ if (ariaLabel) {
23
+ return cy.get(`[aria-labelledby*="Font-Size-dropdown-label"] [role="option"][aria-label*="${ariaLabel}"]`)
24
+ } else {
25
+ return cy.get('[aria-labelledby*="Font-Size-dropdown-label"] [role="option"]')
26
+ }
27
+ },
19
28
  fontSizeListOptionLabels: () => cy.get('[aria-labelledby="Font-Size-dropdown-label Font-Size-placeholder"] li[role="option"] .dropdown-label-text'),
20
29
  fontSizesLabels: () => cy.get('[aria-labelledby="Font-Size-dropdown-label Font-Size-placeholder"] li[role="option"] .dropdown-post-label-text'),
21
30
  }
22
31
 
23
32
  const steps = {
24
33
  //Enhancement: Remove this step, (this has incorrect spelling)
25
- expandAdditonalSettings: () => {
34
+ expandAdditionalSettings: () => {
26
35
  additionalSettingsPanel.additionalSettingsPanel()
27
36
  .click()
28
37
  .should('have.attr', 'aria-expanded', 'true');
29
38
  },
30
39
 
31
40
  //V3 - Need to be updated in all files
32
- selectFontSizeOptionFromFontSizeDropdown: (dropdownOptionIndex) => {
33
- additionalSettingsPanel.fontSizeDropdown()
34
- .click();
35
- additionalSettingsPanel.fontSizeListOptions(dropdownOptionIndex)
41
+ selectFontSizeOptionFromFontSizeDropdown: (dropdownOption) => {
42
+ additionalSettingsPanel.steps.expandFontSizeDropdown();
43
+ additionalSettingsPanel.fontSizeListOptions(dropdownOption)
36
44
  .click();
37
45
  },
38
46
 
@@ -41,8 +49,6 @@ const steps = {
41
49
  .click()
42
50
  .type(teacherGuidelinesText)
43
51
  .blur();
44
- additionalSettingsPanel.additionalSettingsTeacherGuidelinesInputField()
45
- .should('have.text', teacherGuidelinesText);
46
52
  },
47
53
 
48
54
  enterTextInSampleAnswerInputField: (sampleAnswer) => {
@@ -50,8 +56,6 @@ const steps = {
50
56
  .click()
51
57
  .type(sampleAnswer)
52
58
  .blur();
53
- additionalSettingsPanel.additionalSettingsSampleAnswerInputField()
54
- .should('have.text', sampleAnswer);
55
59
  },
56
60
 
57
61
  enterTextInAcknowledgementsInputField: (acknowledgements) => {
@@ -59,8 +63,6 @@ const steps = {
59
63
  .click()
60
64
  .type(acknowledgements)
61
65
  .blur();
62
- additionalSettingsPanel.additionalSettingsAcknowledgementsInputField()
63
- .should('have.text', acknowledgements);
64
66
  },
65
67
 
66
68
  expandAdditionalSettings: () => {
@@ -68,127 +70,131 @@ const steps = {
68
70
  .click()
69
71
  .should('have.attr', 'aria-expanded', 'true');
70
72
  },
73
+
74
+ expandFontSizeDropdown: () => {
75
+ additionalSettingsPanel.fontSizeDropdown()
76
+ .click();
77
+ }
71
78
  }
72
79
 
73
80
  const tests = {
74
81
  verifyDetailsSection: () => {
75
- it('CSS of \'Details\' section', { tags: 'css' }, () => {
76
- additionalSettingsPanel.additionalSettingsDetailsLabel()
77
- .verifyCSS(css.color.sectionHeading, css.fontSize.default, css.fontWeight.semibold);
78
- additionalSettingsPanel.additionalSettingsTeacherGuidelinesLabel()
79
- .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
80
- additionalSettingsPanel.additionalSettingsSampleAnswerLabel()
81
- .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
82
- additionalSettingsPanel.additionalSettingsAcknowledgementsLabel()
83
- .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
84
- });
85
-
86
- //Note: a11y is covered for the entire additional settings section
87
-
88
82
  it('\'Details\' label should be displayed', () => {
89
- additionalSettingsPanel.additionalSettingsDetailsLabel()
90
- .should('have.text', 'Details');
83
+ utilities.verifyInnerText(additionalSettingsPanel.additionalSettingsDetailsLabel(), 'Details');
91
84
  });
92
85
 
93
86
  it('\'Teacher scoring guidelines\' label and input field should be displayed and user should be able to enter \'Teacher scoring guidelines\'', () => {
94
- additionalSettingsPanel.additionalSettingsTeacherGuidelinesLabel()
95
- .verifyInnerText('Teacher scoring guidelines');
96
- additionalSettingsPanel.additionalSettingsTeacherGuidelinesInputField()
97
- .type('Teacher scoring guidelines')
98
- .should('have.text', 'Teacher scoring guidelines');
87
+ utilities.verifyInnerText(additionalSettingsPanel.additionalSettingsTeacherGuidelinesLabel(), 'Teacher scoring guidelines');
88
+ additionalSettingsPanel.steps.enterTextInTeacherGuidelinesInputField('Teacher scoring guidelines');
89
+ utilities.verifyTextContent(additionalSettingsPanel.additionalSettingsTeacherGuidelinesInputField(), 'Teacher scoring guidelines');
99
90
  });
100
91
 
101
92
  it('\'Sample answer\' label and input field should be displayed and user should be able to enter \'Sample answer\'', () => {
102
- additionalSettingsPanel.additionalSettingsSampleAnswerLabel()
103
- .verifyInnerText('Sample answer');
104
- additionalSettingsPanel.additionalSettingsSampleAnswerInputField()
105
- .type('Sample Answer')
106
- .should('have.text', 'Sample Answer');
93
+ utilities.verifyInnerText(additionalSettingsPanel.additionalSettingsSampleAnswerLabel(), 'Sample answer');
94
+ additionalSettingsPanel.steps.enterTextInSampleAnswerInputField('Sample answer');
95
+ utilities.verifyTextContent(additionalSettingsPanel.additionalSettingsSampleAnswerInputField(), 'Sample answer');
107
96
  });
108
97
 
109
98
  it('\'Acknowledgements & reference\' label and input field should be displayed and user should be able to enter \'Acknowledgements\'', () => {
110
- additionalSettingsPanel.additionalSettingsAcknowledgementsLabel()
111
- .verifyInnerText('Acknowledgements and references');
112
- additionalSettingsPanel.additionalSettingsAcknowledgementsInputField()
113
- .type('Acknowledgements')
114
- .should('have.text', 'Acknowledgements');
99
+ utilities.verifyInnerText(additionalSettingsPanel.additionalSettingsAcknowledgementsLabel(), 'Acknowledgements and references');
100
+ additionalSettingsPanel.steps.enterTextInAcknowledgementsInputField('Acknowledgements');
101
+ utilities.verifyTextContent(additionalSettingsPanel.additionalSettingsAcknowledgementsInputField(), 'Acknowledgements');
115
102
  });
116
103
 
117
- it('CSS of added text in input field of the Details Section', { tags: 'css' }, () => {
118
- additionalSettingsPanel.additionalSettingsTeacherGuidelinesInputField()
119
- .verifyCSS(css.color.text, css.fontSize.default, css.fontWeight.regular);
120
- additionalSettingsPanel.additionalSettingsSampleAnswerInputField()
121
- .verifyCSS(css.color.text, css.fontSize.default, css.fontWeight.regular);
122
- additionalSettingsPanel.additionalSettingsAcknowledgementsInputField()
123
- .verifyCSS(css.color.text, css.fontSize.default, css.fontWeight.regular);
104
+ it('CSS of \'Details\' section', { tags: 'css' }, () => {
105
+ const labelCSS = {
106
+ 'color': css.color.labels,
107
+ 'font-size': css.fontSize.normal,
108
+ 'font-weight': css.fontWeight.semibold
109
+ };
110
+ const inputFieldCSS = {
111
+ 'color': css.color.text,
112
+ 'font-size': css.fontSize.default,
113
+ 'font-weight': css.fontWeight.regular
114
+ }
115
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsDetailsLabel(), {
116
+ 'color': css.color.sectionHeading,
117
+ 'font-size': css.fontSize.default,
118
+ 'font-weight': css.fontWeight.semibold
119
+ });
120
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsTeacherGuidelinesLabel(), labelCSS);
121
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsTeacherGuidelinesInputField(), inputFieldCSS);
122
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsSampleAnswerLabel(), labelCSS);
123
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsSampleAnswerInputField(), inputFieldCSS);
124
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsAcknowledgementsLabel(), labelCSS);
125
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsAcknowledgementsInputField(), inputFieldCSS);
124
126
  });
127
+
128
+ //Note: a11y is covered for the entire additional settings section
125
129
  },
126
130
 
127
- verifyAdditonalSettingsAccordionProperties: () => {
128
- it('CSS of \'Additonal Settings\' accordion', { tags: 'css' }, () => {
129
- additionalSettingsPanel.additionalSettingsPanel()
130
- .find('.additional-settings')
131
- .verifyCSS(css.color.accordionLabel, css.fontSize.default, css.fontWeight.bold);
131
+ verifyAdditionalSettingsAccordionProperties: () => {
132
+ it('By default \'Additional Settings\' accordion should be collapsed and by clicking on the \'Additional Settings\' accordion, user should be able to expand the accordion', () => {
132
133
  additionalSettingsPanel.additionalSettingsPanel()
133
- .find('svg')
134
- .should('have.css', 'fill', css.color.activeButtons);
134
+ .should('have.attr', 'aria-expanded', 'false');
135
+ additionalSettingsPanel.steps.expandAdditionalSettings();
135
136
  });
136
137
 
137
- it('Accessibility of \'Additional Settings\' accordion', { tags: 'a11y' }, () => {
138
- cy.checkAccessibility(additionalSettingsPanel.additionalSettingsPanel().parents('.additional-settings-container'));
138
+ it('CSS of \'Additional Settings\' accordion', { tags: 'css' }, () => {
139
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsPanel().find('.additional-settings'), {
140
+ 'color': css.color.accordionLabel,
141
+ 'font-size': css.fontSize.default,
142
+ 'font-weight': css.fontWeight.bold
143
+ });
144
+ utilities.verifyCSS(additionalSettingsPanel.additionalSettingsPanel().find('svg'), {
145
+ 'fill': css.color.activeButtons
146
+ });
139
147
  });
140
148
 
141
- it('By default \'Additional Settings\' accordion should be collapsed and by clicking on the \'Additional Settings\' accordion, user should be able to expand the accordion', () => {
142
- additionalSettingsPanel.additionalSettingsPanel()
143
- .should('have.attr', 'aria-expanded', 'false');
144
- additionalSettingsPanel.steps.expandAdditonalSettings();
149
+ it('Accessibility of \'Additional Settings\' accordion', { tags: 'a11y' }, () => {
150
+ cy.checkAccessibility(additionalSettingsPanel.additionalSettingsPanel().parents('.additional-settings-container'));
145
151
  });
146
152
  },
147
153
 
148
154
  verifyFontSizeSectionContents: () => {
149
155
  const fontSizes = { 'Tiny': '12 px', 'Small': '14 px', 'Default': '16 px', 'Normal': '18 px', 'Big': '22 px', 'Huge': '26 px' };
150
156
  it('CSS of \'Font Size\' dropdown - default state', { tags: 'css' }, () => {
151
- additionalSettingsPanel.fontSizeLabel()
152
- .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
153
- additionalSettingsPanel.fontSizeDropdown()
154
- .verifyCSS(css.color.liText, css.fontSize.default, css.fontWeight.regular);
157
+ utilities.verifyCSS(additionalSettingsPanel.fontSizeLabel(), {
158
+ 'color': css.color.labels,
159
+ 'font-size': css.fontSize.normal,
160
+ 'font-weight': css.fontWeight.semibold
161
+ });
162
+ utilities.verifyCSS(additionalSettingsPanel.fontSizeDropdown(), {
163
+ 'color': css.color.liText,
164
+ 'font-size': css.fontSize.default,
165
+ 'font-weight': css.fontWeight.regular
166
+ });
155
167
  });
156
168
 
157
169
  // Note: a11y is covered for the entire additional settings section
158
170
 
159
171
  it('\'Font Size\' label and dropdown should be displayed and in \'Font Size\' dropdown \'Default\' option should be selected by default', () => {
160
- additionalSettingsPanel.fontSizeLabel()
161
- .verifyInnerText('Font size');
162
- additionalSettingsPanel.fontSizeDropdown()
163
- .verifyInnerText('Default');
172
+ utilities.verifyInnerText(additionalSettingsPanel.fontSizeLabel(), 'Font size');
173
+ utilities.verifyInnerText(additionalSettingsPanel.fontSizeDropdown(), 'Default');
164
174
  });
165
175
 
166
176
  it(`Clicking on \'Font size\' dropdown should open a list of ${Object.keys(fontSizes).length} options - ${Object.keys(fontSizes).join(',')}`, () => {
167
- additionalSettingsPanel.fontSizeDropdown()
168
- .realClick();
169
- additionalSettingsPanel.fontSizeListOptions(0)
170
- .should('be.visible');
177
+ additionalSettingsPanel.steps.expandFontSizeDropdown();
178
+ utilities.verifyElementVisibilityState(commonComponents.dropdownList(), 'visible');
171
179
  Object.keys(fontSizes).forEach((size, index) => {
172
- additionalSettingsPanel.fontSizeListOptionLabels()
173
- .eq(index)
174
- .verifyInnerText(size);
175
- additionalSettingsPanel.fontSizesLabels()
176
- .eq(index)
177
- .verifyInnerText(fontSizes[size]);
180
+ utilities.verifyInnerText(utilities.getNthElement(additionalSettingsPanel.fontSizeListOptionLabels(), index), size);
181
+ utilities.verifyInnerText(utilities.getNthElement(additionalSettingsPanel.fontSizesLabels(), index), fontSizes[size]);
178
182
  });
179
183
  cy.get('body')
180
184
  .click();
181
185
  });
182
186
 
183
187
  it('CSS of Font size dropdown - active state', { tags: 'css' }, () => {
184
- cy.log('Pre step: Clicking on Font size dropdown')
185
- additionalSettingsPanel.fontSizeDropdown()
186
- .click();
187
- additionalSettingsPanel.fontSizeListOptions(2)
188
- .verifyCSS(css.color.liText, css.fontSize.default, css.fontWeight.regular)
189
- .should('have.css', 'background-color', css.color.liTextSelectedBg);
190
- additionalSettingsPanel.fontSizeListOptions(1)
191
- .should('have.css', 'background-color', css.color.transparent);
188
+ additionalSettingsPanel.steps.expandFontSizeDropdown();
189
+ utilities.verifyCSS(additionalSettingsPanel.fontSizeListOptions('Default'), {
190
+ 'color': css.color.liText,
191
+ 'font-size': css.fontSize.default,
192
+ 'font-weight': css.fontWeight.regular,
193
+ 'background-color': css.color.liTextSelectedBg
194
+ });
195
+ utilities.verifyCSS(additionalSettingsPanel.fontSizeListOptions('Small'), {
196
+ 'background-color': css.color.transparent
197
+ });
192
198
  cy.log('Post step: Closing the Font size dropdown')
193
199
  cy.get('body')
194
200
  .click();
@@ -196,8 +202,7 @@ const tests = {
196
202
 
197
203
  it('Accessibility of Font size dropdown in active state', { tags: 'a11y' }, () => {
198
204
  cy.log('Pre step: Clicking on Font size dropdown')
199
- additionalSettingsPanel.fontSizeDropdown()
200
- .click();
205
+ additionalSettingsPanel.steps.expandFontSizeDropdown();
201
206
  cy.checkAccessibility(commonComponents.dropdownList());
202
207
  cy.log('Post step: Closing the Font size dropdown')
203
208
  cy.get('body')
@@ -13,7 +13,7 @@ const selectors = {
13
13
  alternativeAnswerAccordion: () => cy.get('[data-ngie-testid*="alternate"][data-ngie-testid*="accordion"]'),
14
14
  //TODO: Need to update the selector of correct answer accordion once a unique selector is made available
15
15
  correctAnswerAccordionLabel: () => cy.get('[class*="AnswerAccordionstyles__Label"]').eq(0),
16
- alternativeAnswerAccordionLabel: () => cy.get('[class*="AnswerAccordionstyles__Label"]'),
16
+ alternativeAnswerAccordionLabel: () => cy.get('[data-ngie-testid*="alternate"] [class*="AnswerAccordionstyles__Label"]'),
17
17
  deleteAlternateAccordionButton: () => cy.get('.answer-accordion-label button'),
18
18
  specifyCorrectAnswerErrorIcon: () => cy.get('[id="Icon_material-error"]'),
19
19
  pointsLabelAnswerAccordion: () => cy.get('[class*="AnswerAccordionstyles__PointsLabel"]'),
@@ -33,7 +33,7 @@ const steps = {
33
33
  */
34
34
  addAlternativeAnswerAccordion: (accordionIndex) => {
35
35
  autoScoredSpecifyCorrectAnswerSection.steps.clickOnAddAlternativeAnswerButton();
36
- utilities.verifyInnerText(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion(), `Alternative ${accordionIndex}`);
36
+ utilities.verifyInnerText(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordionLabel(), `Alternative ${accordionIndex}`);
37
37
  },
38
38
 
39
39
  verifySpecifyCorrectAnswerErrorIconNotExists: () => {
@@ -117,7 +117,7 @@ const steps = {
117
117
  * @description - This function checks if the label of the alternative answer accordion matches the expected value.
118
118
  */
119
119
  verifyAlternativeAnswerAccordionLabel: (accordionIndex) => {
120
- utilities.verifyInnerText(utilities.getNthElement(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion().find('.answer-accordion-label'), accordionIndex), `Alternative ${accordionIndex}`);
120
+ utilities.verifyInnerText(utilities.getNthElement(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion().find('.answer-accordion-label'), accordionIndex), `Alternative ${accordionIndex + 1}`);
121
121
  },
122
122
 
123
123
  /**
@@ -201,6 +201,9 @@ const tests = {
201
201
  case 'fill in the gaps over image - drag and drop':
202
202
  helpText = 'You can set the correct answer by dragging the correct answer(s) in the dropzone(s).';
203
203
  break;
204
+ case 'graphing':
205
+ helpText = 'You can set the correct answer by entering the correct answer(s) in the response area(s)';
206
+ break;
204
207
  default:
205
208
  throw new Error('Invalid question type');
206
209
  }
@@ -216,7 +219,7 @@ const tests = {
216
219
  utilities.verifyCSS(autoScoredSpecifyCorrectAnswerSection.specifyCorrectAnswerHelpText(), {
217
220
  'color': css.color.helperText,
218
221
  'font-size': css.fontSize.normal,
219
- 'font-weight': css.fontWeight.regular
222
+ 'font-weight': css.fontWeight.medium
220
223
  });
221
224
  utilities.verifyCSS(autoScoredSpecifyCorrectAnswerSection.correctAnswerAccordionLabel(), {
222
225
  'color': css.color.activeButtons,
@@ -251,7 +254,6 @@ const tests = {
251
254
  });
252
255
  } else {
253
256
  autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion()
254
- .eq(1)
255
257
  .within(() => {
256
258
  autoScoredSpecifyCorrectAnswerSection.steps.verifySpecifyCorrectAnswerErrorIconIsVisible();
257
259
  });
@@ -306,7 +308,7 @@ const tests = {
306
308
  utilities.verifyCSS(autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton(), {
307
309
  'color': css.color.activeButtons,
308
310
  'font-size': css.fontSize.default,
309
- 'font-weight': css.fontWeight.regular
311
+ 'font-weight': css.fontWeight.medium
310
312
  });
311
313
  autoScoredSpecifyCorrectAnswerSection.alternativeAnswerButton()
312
314
  .verifyPseudoClassBeforeProperty('color', css.color.activeButtons);
@@ -365,7 +367,7 @@ const tests = {
365
367
  dialogBoxBase.steps.allFieldsRequiredWarningPopupContents();
366
368
  dialogBoxBase.steps.closeWarningPopup();
367
369
  autoScoredSpecifyCorrectAnswerSection.alternativeAnswerAccordion()
368
- .eq(2)
370
+ .eq(1)
369
371
  .should('have.attr', 'aria-expanded', 'true');
370
372
  });
371
373
  },
@@ -7,14 +7,14 @@ const css = Cypress.env('css');
7
7
  const selectors = {
8
8
  backgroundImageLabel: () => cy.get('[class*="Background"][class*="LabelWrapper"]'),
9
9
  inputTypeFile: () => cy.get('input[type="file"]'),
10
- uploadLabel: () => cy.get('[class*="UploadImagestyles__LabelWrapper"]').eq(0),
11
- fileNameLabel: () => cy.get('[class*="UploadImagestyles__LabelWrapper"]').eq(1),
10
+ uploadLabel: () => cy.get('[class*="__LabelWrapper"][class*="Upload"]').eq(0),
11
+ fileNameLabel: () => cy.get('[class*="__LabelWrapper"][class*="Upload"]').eq(1),
12
12
  fileUploadSection: () => cy.get('.file-input-wrapper'),
13
13
  chooseFileButton: () => cy.get('.choose-file-button'),
14
14
  noFileChosenLabel: () => cy.get('[aria-label="No file chosen"]'),
15
15
  uploadImageProgressBar: () => cy.get('[class*="ProgressBar"]'),
16
- uploadedFileNameLabel: () => cy.get('[class*="UploadImagestyles__SelectedFileWithIcon"]'),
17
- deleteImageIcon: () => cy.get('[aria-label="Delete image"]'),
16
+ uploadedFileNameLabel: () => cy.get('[class*="styles__SelectedFileWithIcon"][class*="Upload"]'),
17
+ deleteImageIcon: () => cy.get('[aria-label*="Delete image"]'),
18
18
  deleteImagePopupButtonCancel: () => cy.get('.delete-action-btn-wrapper button').eq(0),
19
19
  deleteImagePopupButtonDelete: () => cy.get('.delete-action-btn-wrapper button').eq(1)
20
20
  }
@@ -59,10 +59,14 @@ const steps = {
59
59
  }
60
60
 
61
61
  const tests = {
62
- verifyBackgroundImageSectionContentWithCSSAndA11y: () => {
62
+ verifyBackgroundImageSectionContentWithCSSAndA11y: (questionType = null) => {
63
63
  it('\'Background image\' label should be visible', () => {
64
- utilities.verifyInnerText(backgroundImageUploadComponent.backgroundImageLabel(), 'Background image');
65
- })
64
+ if (questionType === 'graphing') {
65
+ utilities.verifyInnerText(backgroundImageUploadComponent.backgroundImageLabel(), 'Background');
66
+ } else {
67
+ utilities.verifyInnerText(backgroundImageUploadComponent.backgroundImageLabel(), 'Background image');
68
+ }
69
+ });
66
70
 
67
71
  it('\'Upload\' label and \'Choose file\' button should be displayed', () => {
68
72
  utilities.verifyInnerText(backgroundImageUploadComponent.uploadLabel(), 'Upload');
@@ -110,15 +114,15 @@ const tests = {
110
114
  backgroundImageUploadComponent.steps.uploadFile('highlightImage.jpg');
111
115
  utilities.verifyElementVisibilityState(backgroundImageUploadComponent.uploadImageProgressBar(), 'visible');
112
116
  backgroundImageUploadComponent.steps.verifyFileNameLabel('highlightImage.jpg');
113
- utilities.verifyElementVisibilityState( imageCanvasComponent.canvasImage(), 'visible');
114
- utilities.verifyElementVisibilityState(backgroundImageUploadComponent.uploadImageProgressBar(), 'notExist');
115
- imageCanvasComponent.steps.verifyImageIsUploaded();
117
+ if (questionType != 'graphing') {
118
+ imageCanvasComponent.steps.verifyImageIsUploaded();
119
+ }
116
120
  });
117
121
 
118
122
  it('Delete button should appear beside uploaded file\'s name', () => {
119
123
  utilities.verifyElementVisibilityState(backgroundImageUploadComponent.deleteImageIcon(), 'visible');
120
124
  });
121
-
125
+
122
126
  it('When user clicks on \'Choose file\' button again and upload another image file, previously uploaded image file should get replaced with new image file', () => {
123
127
  backgroundImageUploadComponent.steps.uploadFile('sample1.jpg');
124
128
  backgroundImageUploadComponent.steps.verifyFileNameLabel('sample1.jpg');
@@ -158,7 +162,7 @@ const tests = {
158
162
  utilities.verifyCSS(dialogBoxBase.dialogBox(), {
159
163
  'background-color': css.color.defaultBackground,
160
164
  });
161
- utilities.verifyCSS(dialogBoxBase.dialogBoxContent().find('[class*="UploadImagestyles__DeletePopupWrapper"]'), {
165
+ utilities.verifyCSS(dialogBoxBase.dialogBoxContent().find('[class*="DeletePopupWrapper"]'), {
162
166
  'color': css.color.sectionHeading,
163
167
  'font-size': css.fontSize.default,
164
168
  'font-weight': css.fontWeight.regular
@@ -184,7 +188,6 @@ const tests = {
184
188
  backgroundImageUploadComponent.steps.clickOnCancelButtonInDeleteImagePopup();
185
189
  utilities.verifyElementVisibilityState(dialogBoxBase.dialogBox(), 'notExist');
186
190
  utilities.verifyInnerText(backgroundImageUploadComponent.uploadedFileNameLabel(), 'sample1.jpg');
187
- utilities.verifyElementVisibilityState(imageCanvasComponent.canvasImage(), 'visible');
188
191
  });
189
192
 
190
193
  it('When user clicks on \'Delete image\' button, then popup should close and image inside the canvas should be deleted', () => {
@@ -192,7 +195,6 @@ const tests = {
192
195
  backgroundImageUploadComponent.steps.clickOnDeleteButtonInDeleteImagePopup();
193
196
  utilities.verifyElementVisibilityState(dialogBoxBase.dialogBox(), 'notExist');
194
197
  utilities.verifyInnerText(backgroundImageUploadComponent.noFileChosenLabel(), 'No file chosen');
195
- imageCanvasComponent.steps.verifyCanvasImageNotExist();
196
198
  });
197
199
  }
198
200
  }
@@ -34,9 +34,8 @@ const steps = {
34
34
  * @description this function is used to verify color on the saturation palette
35
35
  */
36
36
  verifySaturationPaletteColor: (color) => {
37
- utilities.verifyCSS(colorPopupComponent.colorSaturationPicker(), {
38
- 'background-color': color
39
- });
37
+ colorPopupComponent.colorSaturationPicker()
38
+ .should('have.attr', 'style', `background-color: ${color};`);
40
39
  },
41
40
 
42
41
  /**
@@ -44,9 +43,8 @@ const steps = {
44
43
  * @description this function is used to verify color on the hue palette
45
44
  */
46
45
  verifyHuePaletteColor: (color) => {
47
- utilities.verifyCSS(colorPopupComponent.colorHuePicker(), {
48
- 'background-color': color
49
- });
46
+ colorPopupComponent.colorHuePicker()
47
+ .should('have.attr', 'style', `background-color: ${color};`);
50
48
  },
51
49
 
52
50
  /**
@@ -253,9 +251,8 @@ const steps = {
253
251
  * @description this function is used to verify color on the hue palette
254
252
  */
255
253
  verifyOpacityGradientPaletteColor: (color) => {
256
- utilities.verifyCSS(colorPopupComponent.opacityGradientPicker(), {
257
- 'background-color': color
258
- });
254
+ colorPopupComponent.opacityGradientPicker()
255
+ .should('have.attr', 'style', `background-color: ${color};`);
259
256
  },
260
257
 
261
258
  clickOnOpacityGradientHuePalette: () => {
@@ -332,10 +329,10 @@ const tests = {
332
329
  });
333
330
  },
334
331
 
335
- /**
336
- * @param {string} hueColor value of color hue palette in Rgb
337
- * @param {string} hexColor value of hex input field in hex code
338
- */
332
+ /**
333
+ * @param {string} hueColor value of color hue palette in Rgb
334
+ * @param {string} hexColor value of hex input field in hex code
335
+ */
339
336
  verifyColorHuePaletteAndHexInputField: (hueColor, hexColor) => {
340
337
  it('A \'Color hue palette\' should be displayed on the color popup along with a color picker and the color picker should be set on the selected color', () => {
341
338
  colorPopupComponent.steps.verifyColorHuePaletteAndPicker();
@@ -381,10 +378,10 @@ const tests = {
381
378
  });
382
379
  },
383
380
 
384
- /**
385
- * @param {string} hueColor value of color hue palette in Rgb
386
- * @param {string} hexColor value of hex input field in hex code
387
- */
381
+ /**
382
+ * @param {string} hueColor value of color hue palette in Rgb
383
+ * @param {string} hexColor value of hex input field in hex code
384
+ */
388
385
  verifyColorHuePaletteAndHexInputField: (hueColor, hexColor) => {
389
386
  it('A \'Color hue palette\' should be displayed on the color popup along with a color picker and the color picker should be set on the selected color', () => {
390
387
  colorPopupComponent.steps.verifyColorHuePaletteAndPicker();
@@ -4,7 +4,7 @@ const css = Cypress.env('css');
4
4
 
5
5
  const selectors = {
6
6
  previewTabQuestionWrapper: () => cy.get('.edit-question-preview-wrapper'),
7
- tooltipText: () => cy.get('[class*="MuiTooltip-tooltip"]'),
7
+ tooltipText: () => cy.get('[class*="MuiTooltip-tooltip"]:visible'),
8
8
  snackbar: () => cy.get('.MuiSnackbarContent-message'),
9
9
  snackbarCloseButton: () => cy.get('.MuiSnackbarContent-action'),
10
10
  errorMessage: () => cy.get('.error-text-message'),
@@ -44,7 +44,7 @@ const selectors = {
44
44
  dropdownWrapperPreviewTab: () => cy.get('[class*="question-preview-wrapper"] .response-dropdown-wrapper'),
45
45
  dropdownPreviewTab: () => cy.get('[class*="question-preview-wrapper"] [aria-haspopup="listbox"]'),
46
46
  dropdownNumerationPreviewTab: () => cy.get('.answer-numeration-number-box'),
47
- correctAnswersLabel: () => cy.get('[class*="question-preview-wrapper"] [class*="correct-answer-label"]'),
47
+ correctAnswersLabel: () => cy.get('[class*="question-preview-wrapper"] [class*="correct-answers-label"]'),
48
48
  correctAnswerResponseNumeration: () => cy.get('.answer-numeration-number-box'),
49
49
  tickIconWrapper: () => cy.get('.tick-icon-wrapper [data-name*="Rectangle"]'),
50
50
 
@@ -43,9 +43,9 @@ const selectors = {
43
43
  fillImageToCanvasLabel: () => cy.get('[data-ngie-testid="fill-image-to-canvas-checkbox"] .MuiFormControlLabel-label'),
44
44
  fillImageToCanvasCheckbox: () => cy.get('[data-ngie-testid="fill-image-to-canvas-checkbox"] input'),
45
45
  imageAlignmentLabel: () => cy.get('.image-alignment-wrapper [class*="OptionsContainerstyles__LabelWrapper"]'),
46
- topLeftAlignmentButton: () => cy.get('[data-ngie-testid="top-left-toggle-button"]'),
47
- centerAlignmentButton: () => cy.get('.image-alignment-wrapper [data-ngie-testid="center-toggle-button"]'),
48
- topRightAlignmentButton: () => cy.get('[data-ngie-testid="top-right-toggle-button"]'),
46
+ topLeftAlignmentButton: () => cy.get('[data-ngie-testid="top-left-toggle-button"], [data-testid="top-left-toggle-button"]'),
47
+ centerAlignmentButton: () => cy.get('[data-ngie-testid="center-toggle-button"], [data-testid="center-toggle-button"]'),
48
+ topRightAlignmentButton: () => cy.get('[data-ngie-testid="top-right-toggle-button"], [data-testid="top-right-toggle-button"]'),
49
49
  canvasWidthLabel: () => cy.get('.common-text-wrapper .additional-settings-label').eq(0),
50
50
  canvasWidthInputField: () => cy.get('.common-text-wrapper .text-field').eq(0),
51
51
  canvasHeightLabel: () => cy.get('.common-text-wrapper .additional-settings-label').eq(1),
@@ -11,7 +11,6 @@ export * from './autoScoredAdditionalSettings';
11
11
  export * from './autoScoredSetCorrectAnswerSection';
12
12
  export * from './autoScoredScoringSectionMultipleResponsesType';
13
13
  export * from './autoScoredScoringSection';
14
- export * from './fillInTheGapsCommonComponents';
15
14
  export * from './optionsWrapperComponent';
16
15
  export * from './specialCharactersFlyoutComponent';
17
16
  export * from './specialAndCustomSpecialCharactersComponent';
@@ -54,4 +53,5 @@ export * from './imageActionsComponent';
54
53
  export * from './createCustomCategoryFlyout';
55
54
  export * from './customizeMathCharacterComponent';
56
55
  export * from './fillInTheGapsDragAndDropCommonComponents';
57
- export * from './responseAreaSettingsPopupComponent';
56
+ export * from './additionalSettingsAccessibilitySectionComponent';
57
+ export * from './responseAreaSettingsPopupComponent';
@@ -79,7 +79,7 @@ const tests = {
79
79
  });
80
80
 
81
81
  it('Accessibility of opacity section', { tags: 'a11y' }, () => {
82
- cy.checkAccessibility(opacityComponent.opacityLabel().parents('.MuiGrid-root'));
82
+ cy.checkAccessibility(opacityComponent.opacityLabel().parents('[class*="OpacityWrapper"]'));
83
83
  });
84
84
  }
85
85
  }
@@ -353,6 +353,7 @@ const tests = {
353
353
  it('When the user focuses in and out of the empty Minimum points input field, no error message should be displayed', () => {
354
354
  scoringSectionBaseEditTab.minimumPointsInputField()
355
355
  .focus()
356
+ .clear()
356
357
  .blur();
357
358
  utilities.verifyElementVisibilityState(commonComponents.errorMessage(), 'notExist');
358
359
  });
@@ -382,6 +383,23 @@ const tests = {
382
383
  it('When the user has selected \'Non scored\' option from the \'Scoring type\' dropdown, \'Minimum scoring\' dropdown should not be displayed', () => {
383
384
  utilities.verifyElementVisibilityState(scoringSectionBaseEditTab.minimumScoringDropdown(), 'notExist');
384
385
  });
386
+ },
387
+
388
+ verifyCSSAndA11yOfDisabledPointsInputField: () => {
389
+ it('CSS of disabled points input field', { tags: 'css' }, () => {
390
+ utilities.verifyCSS(scoringSectionBaseEditTab.pointsInputField(), {
391
+ 'opacity': '1'
392
+ });
393
+ utilities.verifyCSS(scoringSectionBaseEditTab.pointsInputField().next('fieldset'), {
394
+ 'color': css.color.text,
395
+ 'font-size': css.fontSize.default,
396
+ 'font-weight': css.fontWeight.regular
397
+ });
398
+ });
399
+
400
+ it('Accessibility of disabled Points field', { tags: 'a11y' }, () => {
401
+ cy.checkAccessibility(scoringSectionBaseEditTab.pointsInputField().parents('.points-container'));
402
+ });
385
403
  }
386
404
  }
387
405
 
@@ -2,7 +2,7 @@ import utilities from "../../support/helpers/utilities";
2
2
  const css = Cypress.env('css');
3
3
 
4
4
  const selectors = {
5
- studentResponseAreaAndLayoutLabel: () => cy.get('.additional-settings-heading-label').eq(0),
5
+ studentResponseAreaAndLayoutLabel: () => cy.get('[class*="AdditionalOptionstyles__LayoutWrapper"] .additional-settings-heading-label').eq(0),
6
6
  }
7
7
 
8
8
  const tests = {
@@ -5,7 +5,7 @@ const css = Cypress.env('css');
5
5
  const selectors = {
6
6
  dialogBox: () => cy.get('[aria-labelledby="alert-dialog-title"]'),
7
7
  dialogBoxTitle: () => cy.get('.dialog-title'),
8
- dialogBoxContent: () => cy.get('div[id="alert-dialog-description"]'),
8
+ dialogBoxContent: () => cy.get('[class*="dialog-content"]'),
9
9
  buttonReject: () => cy.get('.save-action-btn-wrapper button').eq(0),
10
10
  buttonAccept: () => cy.get('.save-action-btn-wrapper button').eq(1),
11
11
  buttonClose: () => cy.get('[aria-label="CLOSE"]')