itemengine-cypress-automation 1.0.15 → 1.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridAdditionalSettingsBasic.js +235 -0
  2. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridAutoScoredScoring.js +205 -0
  3. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridAutoScoredScoringWithAlternateAnswer.js +472 -0
  4. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridEditTabBasicSection.js +589 -0
  5. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridEditTabScoringSection.js +282 -0
  6. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridHeaderSection.js +97 -0
  7. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridManuallyAndNonScored.js +146 -0
  8. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridOptionsAdditionalSettings.js +345 -0
  9. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridPartialDifferentWeights.js +188 -0
  10. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridPartialDifferentWeightsWithAlternateAnswer.js +662 -0
  11. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridPartialEqualWeights.js +190 -0
  12. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridPartialEqualWeightsWIthAlternateAnswer.js +595 -0
  13. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridQuestionStemAdditionalSettings.js +258 -0
  14. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridRandomizeOptions.js +122 -0
  15. package/cypress/e2e/ILC/SingleSelectionGrid/singleSelectionGridSetCorrectAnswerSection.js +183 -0
  16. package/cypress/e2e/ILC/UploadResponse/uploadResponseAdditionalSettings.js +185 -0
  17. package/cypress/e2e/ILC/UploadResponse/uploadResponseEditTabBasicSections.js +250 -0
  18. package/cypress/e2e/ILC/UploadResponse/uploadResponseHeaderSection.js +80 -0
  19. package/cypress/e2e/ILC/UploadResponse/uploadResponsePreview.js +651 -0
  20. package/cypress/e2e/ILC/UploadResponse/uploadResponseScoringSection.js +60 -0
  21. package/package.json +1 -1
@@ -0,0 +1,185 @@
1
+ import abortEarlySetup from "../../../support/helpers/abortEarly";
2
+ import { uploadResponsePage } from "../../../pages";
3
+ const css = Cypress.env('css');
4
+
5
+ describe('Create question page - Upload Response: Additional Settings', () => {
6
+ before(() => {
7
+ cy.loginAs('admin');
8
+ });
9
+
10
+ describe('Additional Settings accordion', () => {
11
+ abortEarlySetup();
12
+ before(() => {
13
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
14
+ });
15
+
16
+ uploadResponsePage.tests.verifyAdditonalSettingsAccordionProperties();
17
+
18
+ it('\'File settings and layout\' label should be displayed', () => {
19
+ uploadResponsePage.fileSettingsAndLayoutLabel()
20
+ .verifyInnerText('File settings and layout')
21
+ .and('be.visible');
22
+ });
23
+
24
+ it('CSS of \'File settings and layout\' section', { tags: 'css' }, () => {
25
+ uploadResponsePage.fileSettingsAndLayoutLabel()
26
+ .verifyCSS(css.color.sectionHeading, css.fontSize.default, css.fontWeight.semibold);
27
+ });
28
+
29
+ it('Accessibility of \'File settings and layout\' section', { tags: 'a11y' }, () => {
30
+ cy.checkAccessibility(uploadResponsePage.fileSettingsAndLayoutLabel())
31
+ });
32
+ });
33
+
34
+ describe('Additional Settings: Allow students to capture photos', () => {
35
+ abortEarlySetup();
36
+ before(() => {
37
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
38
+ cy.log('Adding question instructions and expanding Additional Settings accordian.');
39
+ uploadResponsePage.steps.addQuestionInstructions();
40
+ uploadResponsePage.steps.expandAdditonalSettings();
41
+ });
42
+
43
+ it('\'Allow students to capture photos\' checkbox label and checkbox should be displayed and by default it should be checked', () => {
44
+ uploadResponsePage.allowStudentsToCapturePhotosLabel()
45
+ .verifyInnerText('Allow students to capture photos');
46
+ uploadResponsePage.allowStudentsToCapturePhotosCheckbox()
47
+ .should('be.checked')
48
+ .parent()
49
+ .should('be.visible');
50
+ });
51
+
52
+ it('CSS of \'Allow students to capture photos\' section - checked state', { tags: 'css' }, () => {
53
+ uploadResponsePage.allowStudentsToCapturePhotosLabel()
54
+ .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
55
+ uploadResponsePage.allowStudentsToCapturePhotosCheckbox()
56
+ .parent()
57
+ .find('svg')
58
+ .should('have.css', 'color', css.color.activeButtons);
59
+ });
60
+
61
+ it('Accessibility of \'Allow students to capture photos\' section - checked state', { tags: 'a11y' }, () => {
62
+ cy.checkAccessibility(uploadResponsePage.allowStudentsToCapturePhotosLabel());
63
+ });
64
+
65
+ it('When the \'Allow students to capture photos\' checkbox is checked then in the preview tab, the upload response area text should be \"Drag & Drop files here or browse files on your device, Google Drive or capture an image\"', () => {
66
+ uploadResponsePage.steps.switchToPreviewTab();
67
+ uploadResponsePage.uploadCloudIcon()
68
+ .should('be.visible');
69
+ uploadResponsePage.dragAndDropFilesText()
70
+ .verifyInnerText('Drag & Drop files here');
71
+ uploadResponsePage.fileUploadOptionsLabel()
72
+ .should('have.text', 'or browse files on your device, Google Drive or capture an image');
73
+ });
74
+
75
+ it('When the user unchecks the \'Allow students to capture photos\' checkbox, then in the Preview tab the upload response area text should be \"Drag & Drop files here or browse files on your device or Google Drive\"', () => {
76
+ cy.log('Switching to Edit tab.');
77
+ uploadResponsePage.steps.switchToEditTab();
78
+ uploadResponsePage.allowStudentsToCapturePhotosCheckbox()
79
+ .click()
80
+ .should('not.be.checked');
81
+ cy.log('Switching to Preview tab.');
82
+ uploadResponsePage.steps.switchToPreviewTab();
83
+ uploadResponsePage.dragAndDropFilesText()
84
+ .verifyInnerText('Drag & Drop files here');
85
+ uploadResponsePage.fileUploadOptionsLabel()
86
+ .should('have.text', 'or browse files on your device or Google Drive ');
87
+ });
88
+
89
+ it('CSS of \'Allow students to capture photos\' section - unchecked state', { tags: 'css' }, () => {
90
+ cy.log('Pre-step: Switching back to Edit tab.');
91
+ uploadResponsePage.steps.switchToEditTab();
92
+ uploadResponsePage.allowStudentsToCapturePhotosLabel()
93
+ .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
94
+ uploadResponsePage.allowStudentsToCapturePhotosCheckbox()
95
+ .parent()
96
+ .find('svg')
97
+ .should('have.css', 'fill', css.color.uncheckedCheckbox);
98
+ uploadResponsePage.steps.switchToPreviewTab();
99
+ });
100
+
101
+ it('Accessibility of \'Allow students to capture photos\' section - unchecked state', { tags: 'a11y' }, () => {
102
+ cy.log('Pre-step: Switching back to Edit tab.');
103
+ uploadResponsePage.steps.switchToEditTab();
104
+ cy.checkAccessibility(uploadResponsePage.allowStudentsToCapturePhotosLabel());
105
+ uploadResponsePage.steps.switchToPreviewTab();
106
+ });
107
+
108
+ it('When the user checks the \'Allow students to capture photos\' checkbox again, then in the Preview tab the upload response area text should be \"Drag & Drop files here or browse files on your device or Google Drive or capture an image\"', () => {
109
+ cy.log('Pre-step: Switching back to Edit tab.');
110
+ uploadResponsePage.steps.switchToEditTab();
111
+ uploadResponsePage.allowStudentsToCapturePhotosCheckbox()
112
+ .click()
113
+ .should('be.checked');
114
+ cy.log('Switching to Preview tab.');
115
+ uploadResponsePage.steps.switchToPreviewTab();
116
+ uploadResponsePage.dragAndDropFilesText()
117
+ .verifyInnerText('Drag & Drop files here')
118
+ .and('be.visible');
119
+ uploadResponsePage.fileUploadOptionsLabel()
120
+ .should('have.text', 'or browse files on your device, Google Drive or capture an image')
121
+ .and('be.visible');
122
+ });
123
+ });
124
+
125
+ describe('Additional Settings: Font Size dropdown', () => {
126
+ abortEarlySetup();
127
+ before(() => {
128
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
129
+ cy.log('Adding question instructions and expanding Additional Settings accordion.');
130
+ uploadResponsePage.steps.addQuestionInstructions();
131
+ uploadResponsePage.steps.expandAdditonalSettings();
132
+ });
133
+
134
+ const fontsizes = ['Default', 'Small', 'Normal', 'Large', 'Extra large', 'Huge'];
135
+ const font = ['16px', '12px', '14px', '17px', '20px', '24px'];
136
+ const questionInstructionsTextFontSizes = { 'Default': '16px', 'Small': '12px', 'Normal': '14px', 'Large': '17px', 'Extra large': '20px', 'Huge': '24px' };
137
+ const dragAndDropFilesTextFontSizes = { 'Default': '24px', 'Small': '18px', 'Normal': '21px', 'Large': '25.5px', 'Extra large': '30px', 'Huge': '36px' };
138
+ const fileUploadOptionsLabelFontSizes = { 'Default': '18px', 'Small': '13.5px', 'Normal': '15.75px', 'Large': '19.125px', 'Extra large': '22.5px', 'Huge': '27px' };
139
+ const supportedFileFormatLabelFontSizes = { 'Default': '14px', 'Small': '10.5px', 'Normal': '12.25px', 'Large': '14.875px', 'Extra large': '17.5px', 'Huge': '21px' };
140
+ const uploadedFileCountFontSizes = { 'Default': '12px', 'Small': '9px', 'Normal': '10.5px', 'Large': '12.75px', 'Extra large': '15px', 'Huge': '18px' };
141
+
142
+ uploadResponsePage.tests.verifyFontSizeSectionContents();
143
+
144
+ fontsizes.forEach((option, count) => {
145
+ it(`When the user selects \'${option}\' option from the Font Size dropdown, then font size for the entire question in the student player should be changed to ${option} in the \'Preview\' tab`, () => {
146
+ uploadResponsePage.fontSizeDropdown()
147
+ .click();
148
+ uploadResponsePage.fontSizeListOptions(count)
149
+ .click();
150
+ uploadResponsePage.fontSizeDropdown()
151
+ .verifyInnerText(`${option}`);
152
+ cy.log('Switching to Preview tab.');
153
+ uploadResponsePage.steps.switchToPreviewTab();
154
+ uploadResponsePage.questionInstructionsText()
155
+ .should('have.css', 'font-size', questionInstructionsTextFontSizes[option]);
156
+ uploadResponsePage.dragAndDropFilesText()
157
+ .should('have.css', 'font-size', dragAndDropFilesTextFontSizes[option]);
158
+ uploadResponsePage.fileUploadOptionsLabel()
159
+ .should('have.css', 'font-size', fileUploadOptionsLabelFontSizes[option]);
160
+ uploadResponsePage.supportedFileFormatLabel()
161
+ .should('have.css', 'font-size', supportedFileFormatLabelFontSizes[option]);
162
+ uploadResponsePage.uploadedFileCount()
163
+ .should('have.css', 'font-size', uploadedFileCountFontSizes[option]);
164
+ cy.log('Uploading file to check font-size of the file name.')
165
+ uploadResponsePage.steps.fileUploadAndVerify(['sample.zip']);
166
+ uploadResponsePage.uploadedFileLink()
167
+ .should('have.css', 'font-size', font[0]);
168
+ cy.log('Post step: switching to edit tab to select another font size option')
169
+ uploadResponsePage.steps.switchToEditTab();
170
+ });
171
+ });
172
+ });
173
+
174
+ describe('Additional Settings: Details section', () => {
175
+ abortEarlySetup();
176
+ before(() => {
177
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
178
+ cy.log('Adding question instructions and expanding Additional Settings accordian.');
179
+ uploadResponsePage.steps.addQuestionInstructions();
180
+ uploadResponsePage.steps.expandAdditonalSettings();
181
+ });
182
+
183
+ uploadResponsePage.tests.verifyDetailsSection();
184
+ });
185
+ });
@@ -0,0 +1,250 @@
1
+ import abortEarlySetup from "../../../support/helpers/abortEarly";
2
+ import { uploadResponsePage } from "../../../pages";
3
+ import { commonComponents } from "../../../pages/components";
4
+ const css = Cypress.env('css');
5
+
6
+ let fileTypeList = ['Access', 'Assembly', 'C', 'C++', 'CSV', 'Excel', 'GIF', 'H', 'HEIC', 'HEIF', 'HEVC', 'JPG', 'LabVIEW', 'MATLAB', 'MP3', 'MP4', 'Open Office', 'PDF', 'PNG', 'Powerpoint', 'Publisher', 'Quartus', 'RTF', 'S', 'TXT', 'V', 'Verilog', 'Word', 'XPS', 'ZIP'];
7
+ let indexOfDefaultSelectedFileTypes = [4, 5, 6, 11, 17, 18, 19, 20, 22, 24, 27, 28, 29];
8
+
9
+ describe('Create question page - Upload Response: Question Instructions, Supported file types, Max Files dropdown', () => {
10
+ before(() => {
11
+ cy.loginAs('admin');
12
+ });
13
+
14
+ describe('Question Instructions input field - Edit tab', () => {
15
+ abortEarlySetup();
16
+ before(() => {
17
+ cy.log('Navigating to upload response question type');
18
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
19
+ });
20
+
21
+ uploadResponsePage.tests.verifyQuestionInstructionsInputFieldEditTab();
22
+
23
+ });
24
+
25
+ describe('Question Instructions input field - Preview tab', () => {
26
+ abortEarlySetup();
27
+ before(() => {
28
+ cy.log('Navigating to upload response question type');
29
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
30
+ });
31
+
32
+ uploadResponsePage.tests.verifyQuestionInstructionsInputFieldPreviewTab();
33
+
34
+ });
35
+
36
+ describe('Supported file types section', () => {
37
+ abortEarlySetup();
38
+ before(() => {
39
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
40
+ });
41
+
42
+ it('\'Supported file types\' accordion should be displayed and it should be collapsed by default and next to \'Supported file types\' accordion menu, text \'13 selected\' should be displayed indicating number of selected file types and user should be able to expand and collapse this accordion', () => {
43
+ uploadResponsePage.supportedFileTypesAccordion()
44
+ .verifyInnerText('Supported file types');
45
+ uploadResponsePage.supportedFileTypesAccordionWrapper()
46
+ .should('have.attr', 'aria-expanded', 'false');
47
+ uploadResponsePage.selectedFileTypeCount()
48
+ .verifyInnerText('(13 selected)')
49
+ .and('be.visible');
50
+ cy.log('verifying if user is able to expand and collapse the \'Supported file types\' accordion')
51
+ uploadResponsePage.supportedFileTypesAccordionWrapper()
52
+ .click()
53
+ .should('have.attr', 'aria-expanded', 'true');
54
+ uploadResponsePage.supportedFileTypesAccordionWrapper()
55
+ .click()
56
+ .should('have.attr', 'aria-expanded', 'false');
57
+ });
58
+
59
+ it('CSS of Supported file types section', { tags: 'css' }, () => {
60
+ uploadResponsePage.supportedFileTypesAccordion()
61
+ .verifyCSS(css.color.accordionLabel, css.fontSize.default, css.fontWeight.bold);
62
+ uploadResponsePage.selectedFileTypeCount()
63
+ .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.regular);
64
+ });
65
+
66
+ it('Accessibility of Supported file types section', { tags: 'a11y' }, () => {
67
+ cy.checkAccessibility(uploadResponsePage.supportedFileTypesAccordionWrapper());
68
+ cy.checkAccessibility(uploadResponsePage.selectedFileTypeCount());
69
+ });
70
+
71
+ it('When user expands the \'Supported file types\' accordion menu, all the file types should be listed and following file types should be selected - CSV, Excel, GIF, JPG, PDF, PNG, Powerpoint, Publisher, RTF, TXT, Word, XPS, ZIP', () => {
72
+ cy.log('Pre-step: Expanding supported file types accordion');
73
+ uploadResponsePage.supportedFileTypesAccordionWrapper()
74
+ .click();
75
+ fileTypeList.forEach((fileType, count) => {
76
+ uploadResponsePage.supportedFileTypesCheckboxWrapper(count)
77
+ .find('.MuiFormControlLabel-label')
78
+ .verifyInnerText(fileType)
79
+ .and('be.visible');
80
+ });
81
+ indexOfDefaultSelectedFileTypes.forEach((selectedFileTypeIndex) => {
82
+ uploadResponsePage.supportedFileTypesCheckboxWrapper(selectedFileTypeIndex)
83
+ .within(($element) => {
84
+ uploadResponsePage.supportedFileTypeCheckbox()
85
+ .should('be.checked');
86
+ cy.wrap($element)
87
+ .find('.MuiFormControlLabel-label')
88
+ .verifyInnerText(fileTypeList[selectedFileTypeIndex])
89
+ });
90
+ });
91
+ });
92
+
93
+ it('CSS of supported files accordion contents in expanded state', { tags: 'css' }, () => {
94
+ uploadResponsePage.supportedFileTypesCheckboxWrapper(4)
95
+ .find('svg g g')
96
+ .should('have.css', 'fill', css.color.activeButtons);
97
+ uploadResponsePage.supportedFileTypesCheckboxWrapper(0)
98
+ .find('.MuiFormControlLabel-label')
99
+ .verifyCSS(css.color.labelText, css.fontSize.normal, css.fontWeight.regular);
100
+ });
101
+
102
+ it('Accessibility of supported files accordion contents in expanded state', { tags: 'a11y' }, () => {
103
+ cy.checkAccessibility(uploadResponsePage.supportedFileTypeCheckbox().parents('.edit-question-supported-files-wrapper'));
104
+ });
105
+
106
+ it('When the user deselects all the file types from the \'Supported file types\' accordion menu, then a validation text \'Error: Please select a file type.\' should be displayed', () => {
107
+ cy.log('Deselecting all file types to get error message.');
108
+ indexOfDefaultSelectedFileTypes.forEach((selectedFileTypeIndex) => {
109
+ uploadResponsePage.supportedFileTypesCheckboxWrapper(selectedFileTypeIndex)
110
+ .within(() => {
111
+ uploadResponsePage.supportedFileTypeCheckbox()
112
+ .uncheck()
113
+ .should('not.be.checked');
114
+ });
115
+ });
116
+ commonComponents.errorMessage()
117
+ .verifyInnerText('Error: Please select a file type.')
118
+ .and('be.visible');
119
+ });
120
+
121
+ it('CSS of \'Error: Please select a file type.\' error message', { tags: 'css' }, () => {
122
+ commonComponents.errorMessage()
123
+ .verifyCSS(css.color.errorText, css.fontSize.small, css.fontWeight.regular);
124
+ });
125
+
126
+ it('Accessibility of \'Error: Please select a file type.\' error message', { tags: 'a11y' }, () => {
127
+ cy.checkAccessibility(commonComponents.errorMessage());
128
+ });
129
+
130
+ it('When the user reselects any file type from the \'Supported file types\' accordion menu, then the validation text \'Error: Please select a file type\' should disappear', () => {
131
+ uploadResponsePage.supportedFileTypesCheckboxWrapper(0)
132
+ .within(() => {
133
+ uploadResponsePage.supportedFileTypeCheckbox()
134
+ .check()
135
+ .should('be.checked');
136
+ });
137
+ commonComponents.errorMessage()
138
+ .should('not.exist');
139
+ });
140
+ });
141
+
142
+ describe('Max Files dropdown', () => {
143
+ abortEarlySetup();
144
+ before(() => {
145
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
146
+ cy.log('Adding question instructions');
147
+ uploadResponsePage.steps.addQuestionInstructions();
148
+ });
149
+
150
+ it('CSS of Max Files dropdown in default state', { tags: 'css' }, () => {
151
+ cy.log('Max files label')
152
+ uploadResponsePage.maxFilesLabel()
153
+ .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.semibold);
154
+ cy.log('default state of max file dropdown, default selected list option and chevron icon')
155
+ uploadResponsePage.maxFilesDropdown()
156
+ .should('have.css', 'background-color', css.color.secondaryBtnBg)
157
+ .and('have.css', 'border', `1px solid ${css.color.defaultDropdownBorder}`)
158
+ .find('.dropdown-label-text')
159
+ .verifyCSS(css.color.liText, css.fontSize.default, css.fontWeight.regular)
160
+ .verifyPseudoClassBeforeProperty('color', css.color.secondaryBtn);
161
+ });
162
+
163
+ it('Accessibility of Max Files dropdown in default state', { tags: 'a11y' }, () => {
164
+ cy.checkAccessibility(uploadResponsePage.maxFilesLabel());
165
+ cy.checkAccessibility(uploadResponsePage.maxFilesDropdown());
166
+ });
167
+
168
+ it('\'Max files\' label and dropdown should be displayed and in \'Max files\' dropdown option \'15\' should be selected by default', () => {
169
+ uploadResponsePage.maxFilesLabel()
170
+ .verifyInnerText('Maximum number of files')
171
+ .and('be.visible');
172
+ uploadResponsePage.maxFilesDropdown()
173
+ .verifyInnerText('15')
174
+ .and('be.visible');
175
+ });
176
+
177
+ it('Clicking on Max files dropdown should open a list of options from 1 to 15', () => {
178
+ cy.log('Opening the max files dropdown list');
179
+ uploadResponsePage.maxFilesDropdown()
180
+ .click();
181
+ for (let maxFilesIndex = 1; maxFilesIndex < 16; maxFilesIndex++) {
182
+ uploadResponsePage.maxFilesDropdownListOptions(maxFilesIndex - 1)
183
+ .should('have.text', maxFilesIndex);
184
+ };
185
+ });
186
+
187
+ it('CSS of Max files dropdown and dropdown content in active state', { tags: 'css' }, () => {
188
+ uploadResponsePage.maxFilesDropdown()
189
+ .should('have.css', 'background-color', css.color.secondaryBtnBg)
190
+ .and('have.css', 'border', `1px solid ${css.color.secondaryBtnActive}`);
191
+ uploadResponsePage.maxFilesDropdownListOptions(13)
192
+ .should('have.css', 'background-color', css.color.transparent);
193
+ uploadResponsePage.maxFilesDropdownListOptions(14)
194
+ .verifyCSS(css.color.liText, css.fontSize.default, css.fontWeight.regular)
195
+ .should('have.css', 'background-color', css.color.liTextSelectedBg);
196
+ });
197
+
198
+ it('Accessibility of Max files dropdown and dropdown content in active state', { tags: 'a11y' }, () => {
199
+ cy.checkAccessibility(uploadResponsePage.maxFilesDropdown());
200
+ cy.checkAccessibility(commonComponents.dropdownList());
201
+ });
202
+
203
+ it('When user selects option \'15\' from the Max files dropdown, then in the Preview tab user should be able to upload maximum 15 files and count in the file limit section should update accordingly', () => {
204
+ uploadResponsePage.maxFilesDropdownListOptions(14)
205
+ .click();
206
+ cy.log(`Switching to preview tab and uploading 15 files`);
207
+ uploadResponsePage.steps.switchToPreviewTab();
208
+ uploadResponsePage.steps.fileUploadAndVerify(['sample.csv', 'sample.xlsx', 'sample.gif', 'sample.jpg', 'sample.pdf', 'image.png', 'sample.ppt', 'sample.pub', 'sample.rtf', 'sample.txt', 'sample.doc', 'sample.xps', 'sample.zip', 'sample1.jpg', 'sample2.jpg'])
209
+ uploadResponsePage.uploadedFileCount()
210
+ .verifyInnerText('15/15 File Limit');
211
+ });
212
+
213
+ it('When the user tries to add more files than max file limit, file limit error message - \'Error: You have reached the maximum number of files that can be uploaded.\ should be displayed', () => {
214
+ cy.log('Pre-step: Uploading one more file above limit');
215
+ uploadResponsePage.inputTypeFile()
216
+ .attachFile('uploads/sample.jpg');
217
+ commonComponents.errorMessage()
218
+ .verifyInnerText('Error: You have reached the maximum number of files that can be uploaded.');
219
+ });
220
+
221
+ it('CSS of \'File limit error\' message', { tags: 'css' }, () => {
222
+ commonComponents.errorMessage()
223
+ .verifyCSS(css.color.errorText, css.fontSize.small, css.fontWeight.regular);
224
+ });
225
+
226
+ it('Accessibility of \'File limit error\' message', { tags: 'a11y' }, () => {
227
+ cy.checkAccessibility(commonComponents.errorMessage());
228
+ });
229
+
230
+ uploadResponsePage.tests.verifyErrorMessageDisappear();
231
+
232
+ it('When user selects option \'1\' from the Max files dropdown, then in the Preview tab user should be able to upload only 1 file and when user tries to upload more than permitted number of files, then the user should get file limit error message', () => {
233
+ cy.log('Pre-step: Switching to Edit Tab, opening max files dropdown and selecting 1 as Max File Limit.');
234
+ uploadResponsePage.steps.switchToEditTab();
235
+ uploadResponsePage.maxFilesDropdown()
236
+ .click();
237
+ uploadResponsePage.maxFilesDropdownListOptions(0)
238
+ .click();
239
+ cy.log('Switching to preview tab')
240
+ uploadResponsePage.steps.switchToPreviewTab();
241
+ uploadResponsePage.steps.fileUploadAndVerify(['sample.csv']);
242
+ uploadResponsePage.inputTypeFile()
243
+ .attachFile('uploads/sample1.jpg');
244
+ commonComponents.errorMessage()
245
+ .verifyInnerText('Error: You have reached the maximum number of files that can be uploaded.');
246
+ });
247
+
248
+ uploadResponsePage.tests.verifyErrorMessageDisappear();
249
+ });
250
+ });
@@ -0,0 +1,80 @@
1
+ import abortEarlySetup from "../../../support/helpers/abortEarly";
2
+ import { uploadResponsePage, dialogBoxBase } from "../../../pages";
3
+ import { commonComponents } from "../../../pages/components";
4
+
5
+ describe('Create question page - Upload Response: Header section and Saving question', () => {
6
+ before(() => {
7
+ cy.loginAs('admin');
8
+ });
9
+
10
+ describe('Header section contents', () => {
11
+ abortEarlySetup();
12
+ before(() => {
13
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
14
+ });
15
+
16
+ uploadResponsePage.tests.verifyCreateQuestionPageQuestionTypeHeader('Upload response');
17
+ });
18
+
19
+ describe('Tabs section', () => {
20
+ abortEarlySetup();
21
+ before(() => {
22
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
23
+ });
24
+
25
+ uploadResponsePage.tests.verifyTabsSection();
26
+ });
27
+
28
+ describe('Cancel button', () => {
29
+ abortEarlySetup();
30
+ before(() => {
31
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
32
+ });
33
+
34
+ uploadResponsePage.tests.verifyCancelButton('upload response');
35
+ });
36
+
37
+ describe('Save Question button', () => {
38
+ abortEarlySetup();
39
+ before(() => {
40
+ uploadResponsePage.steps.navigateToCreateQuestion('upload response');
41
+ cy.barsPreLoaderWait();
42
+ });
43
+
44
+ describe('Validation error messages', () => {
45
+ dialogBoxBase.tests.verifyRequiredFieldsWarningPopupOnClickingSaveButton();
46
+
47
+ it('Validation error messages should be displayed below required input fields', () => {
48
+ uploadResponsePage.questionInstructionsLabelEditTab()
49
+ .parents('.edit-question-instruction-wrapper')
50
+ .within(() => {
51
+ commonComponents.errorMessage()
52
+ .verifyInnerText('Error: Question instructions are required.')
53
+ .and('be.visible');
54
+ });
55
+ uploadResponsePage.pleaseEnterPointsErrorMessage()
56
+ .verifyInnerText('Error: Please enter points.');
57
+ });
58
+
59
+ it('Validation error messages should disappear when required input fields are filled', () => {
60
+ uploadResponsePage.steps.addQuestionInstructions();
61
+ uploadResponsePage.questionInstructionsLabelEditTab()
62
+ .parents('.edit-question-instruction-wrapper')
63
+ .within(() => {
64
+ commonComponents.errorMessage()
65
+ .should('not.exist');
66
+ });
67
+ uploadResponsePage.steps.allotPoints(20);
68
+ uploadResponsePage.pleaseEnterPointsErrorMessage()
69
+ .should('not.exist');
70
+ });
71
+ });
72
+
73
+ describe('Saving a question', () => {
74
+ it('When user has filled all the mandatory fields then on clicking on Save Question button the question should get saved and a snackbar with text \'Saved successfully!\' should be displayed', () => {
75
+ uploadResponsePage.steps.saveAQuestionAndVerifySnackbar();
76
+ });
77
+ uploadResponsePage.tests.verifySavedSuccessfullySnackbarCSSanda11y();
78
+ });
79
+ });
80
+ });