itemengine-cypress-automation 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseEditTabBasicSections.js +2 -2
  2. package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseManuallyScoredNonScoredScoringSection.js +1 -0
  3. package/cypress/pages/audioPlayerPage.js +2 -2
  4. package/cypress/pages/audioResponsePage.js +3 -3
  5. package/cypress/pages/components/additionalSettingsPanel.js +1 -1
  6. package/cypress/pages/components/autoScoredPreviewBase.js +1 -1
  7. package/cypress/pages/components/autoScoredSetCorrectAnswerSection.js +7 -1
  8. package/cypress/pages/components/browseItemsPage.js +53 -0
  9. package/cypress/pages/components/createQuestionBasePage.js +32 -2
  10. package/cypress/pages/components/customizeHighlightPropertiesComponent.js +1 -1
  11. package/cypress/pages/components/dragAndDropResponseOptions.js +3 -2
  12. package/cypress/pages/components/draggableOptionsContainer.js +1 -0
  13. package/cypress/pages/components/figOverImageCommonComponent.js +198 -10
  14. package/cypress/pages/components/fillInTheGapsCommonComponents.js +4 -4
  15. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +54 -1
  16. package/cypress/pages/components/fillInTheGapsTextCommonComponent.js +3 -3
  17. package/cypress/pages/components/gridCommonComponents.js +3 -2
  18. package/cypress/pages/components/index.js +2 -1
  19. package/cypress/pages/components/listSortingAndOrderingBase.js +1 -1
  20. package/cypress/pages/components/questionInstructionsComponent.js +7 -3
  21. package/cypress/pages/components/uploadImageSectionComponent.js +2 -0
  22. package/cypress/pages/createItemPage.js +35 -2
  23. package/cypress/pages/dialogBoxBase.js +2 -2
  24. package/cypress/pages/dragAndDropIntoCategoriesAllOrNothingScoring.js +4 -4
  25. package/cypress/pages/dragAndDropIntoCategoriesCellsScoring.js +2 -0
  26. package/cypress/pages/dragAndDropIntoCategoriesPage.js +7 -10
  27. package/cypress/pages/essayResponseBasicPage.js +2 -2
  28. package/cypress/pages/essayResponseMathPage.js +3 -2
  29. package/cypress/pages/essayResponsePage.js +1 -1
  30. package/cypress/pages/fillInTheGapsOverImageDropdownPage.js +74 -7
  31. package/cypress/pages/fillInTheGapsTextPage.js +1 -1
  32. package/cypress/pages/highlightImagePage.js +12 -10
  33. package/cypress/pages/highlightPage.js +29 -5
  34. package/cypress/pages/listMatchingPage.js +205 -17
  35. package/cypress/pages/listMatchingScoring.js +0 -1
  36. package/cypress/pages/passagePage.js +3 -3
  37. package/cypress/pages/readingRulerPage.js +1 -1
  38. package/cypress/pages/shortTextResponsePage.js +1 -1
  39. package/cypress/pages/videoResponsePage.js +7 -7
  40. package/package.json +1 -1
@@ -23,6 +23,7 @@ const selectors = {
23
23
  return cy.get('[role="listbox"] .dropdown-menu-item')
24
24
  }
25
25
  },
26
+ responseDropdownOptionText: () => cy.get('[role="listbox"] .dropdown-menu-item .dropdown-label-text'),
26
27
  responseDropdownSetCorrectAnswerSection: () => cy.get('.response-dropdown [role="combobox"]'),
27
28
  responseFieldLabelSetCorrectAnswerSection: () => cy.get('.cloze-with-text-form-control-wrapper .input-field-label'),
28
29
  responseDropdownWrapperSetCorrectAnswerSection: () => cy.get('.response-dropdown-wrapper .dropdown-form-control'),
@@ -323,7 +324,54 @@ const steps = {
323
324
  fillInTheGapsDropdownCommonComponent.responseDropdownSetCorrectAnswerSection()
324
325
  .eq(responseDropdownIndex)
325
326
  .should('have.attr', 'aria-label', ariaLabel);
326
- }
327
+ },
328
+
329
+ /**
330
+ * @param {number} responseDropdownIndex Index of response dropdown
331
+ * @description Verify placeholder for response dropdown in set correct answer section does not exist
332
+ */
333
+ verifyPlaceholderAttributeInSetCorrectAnswerSectionResponseDropdownNotExists: (responseDropdownIndex) => {
334
+ fillInTheGapsDropdownCommonComponent.responseDropdownWrapperSetCorrectAnswerSection()
335
+ .eq(responseDropdownIndex)
336
+ .within(() => {
337
+ utilities.verifyElementVisibilityState(fillInTheGapsDropdownCommonComponent.responseDropdownPlaceholderText(), 'notExist');
338
+ });
339
+ },
340
+
341
+ /**
342
+ * @param {number} responseDropdownIndex Index of response dropdown
343
+ * @param {string} placeholderText Placeholder for dropdown
344
+ * @description Verify placeholder text displayed for response dropdown in set correct answer section
345
+ */
346
+ verifyPlaceholderAttributeInSetCorrectAnswerSectionResponseDropdown: (responseDropdownIndex, placeholderText) => {
347
+ fillInTheGapsDropdownCommonComponent.responseDropdownWrapperSetCorrectAnswerSection()
348
+ .eq(responseDropdownIndex)
349
+ .within(() => {
350
+ utilities.verifyTextContent(fillInTheGapsDropdownCommonComponent.responseDropdownPlaceholderText(), placeholderText);
351
+ });
352
+ },
353
+
354
+ /**
355
+ * @param {number} responseDropdownIndex Index of response dropdown
356
+ * @param {number} height Height of response dropdown in set correct answer section
357
+ * @description Verify height of response dropdown in set correct answer section
358
+ */
359
+ verifyHeightOfResponseDropdownInSetCorrectAnswerSection: (responseDropdownIndex, height) => {
360
+ fillInTheGapsDropdownCommonComponent.responseDropdownWrapperSetCorrectAnswerSection()
361
+ .eq(responseDropdownIndex)
362
+ .should('have.attr', 'height', `${height}px`);
363
+ },
364
+
365
+ /**
366
+ * @param {number} responseDropdownIndex Index of response dropdown
367
+ * @param {number} width Width of response dropdown in set correct answer section
368
+ * @description Verify width of response dropdown in set correct answer section
369
+ */
370
+ verifyWidthOfResponseDropdownInSetCorrectAnswerSection: (responseDropdownIndex, width) => {
371
+ fillInTheGapsDropdownCommonComponent.responseDropdownWrapperSetCorrectAnswerSection()
372
+ .eq(responseDropdownIndex)
373
+ .should('have.attr', 'width', `${width}px`);
374
+ },
327
375
  }
328
376
 
329
377
  const tests = {
@@ -340,6 +388,11 @@ const tests = {
340
388
  fillInTheGapsDropdownCommonComponent.steps.verifyMatchFromAllResponsesLabelAndCheckboxDisabledState();
341
389
  });
342
390
 
391
+ it('When the user hovers over the \'Match from all responses\' label, \'Feature available for only alternate correct answers\' text should appear on a tooltip, on hovering away from the label, the tooltip should disappear', () => {
392
+ fillInTheGapsDropdownCommonComponent.matchFromAllResponsesLabel()
393
+ .verifyTooltip('Feature available for only alternate correct answers');
394
+ });
395
+
343
396
  it('CSS of correct response conditions section', { tags: 'css' }, () => {
344
397
  const labels = [fillInTheGapsDropdownCommonComponent.randomizeOptionsLabel, fillInTheGapsDropdownCommonComponent.matchFromAllResponsesLabel]
345
398
  const uncheckedCheckboxes = [fillInTheGapsDropdownCommonComponent.randomizeOptionsCheckbox, fillInTheGapsDropdownCommonComponent.matchFromAllResponsesCheckbox]
@@ -19,10 +19,10 @@ const selectors = {
19
19
  ignoreSpacesBeforeAndAfterCheckbox: () => cy.get('.ngie-checkbox input').eq(1),
20
20
  matchFromAllResponsesLabel: () => cy.get('.ngie-checkbox-control-label').eq(2),
21
21
  matchFromAllResponsesCheckbox: () => cy.get('.ngie-checkbox input').eq(2),
22
- responseFieldPreviewTab: () => cy.get('.edit-question-preview-wrapper .response-input-field input[type="text"]'),
23
- responseFieldWrapperPreviewTab: () => cy.get('.edit-question-preview-wrapper .response-input-field'),
22
+ responseFieldPreviewTab: () => cy.get('[class*="question-preview-wrapper"] .response-input-field input[type="text"]'),
23
+ responseFieldWrapperPreviewTab: () => cy.get('[class*="question-preview-wrapper"] .response-input-field'),
24
24
  previewTabCorrectAnswerContainer: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectAnswerWrapper"]'),
25
- previewTabCorrectAnswerResponseWrapper: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectResponseWrapper"] [aria-label*="Response"]'),
25
+ previewTabCorrectAnswerResponseWrapper: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectResponseWrapper"] [aria-label*="Add answer for response"]'),
26
26
  previewTabResponseWrapper: () => cy.get('.draggable-input .cloze-with-text-answer-status-response-preview-wrapper'),
27
27
  previewTabCorrectAnswerLabel: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectAnswerLabel"]'),
28
28
  responseNumeration: () => cy.get('.response-input-adornment'),
@@ -533,7 +533,8 @@ const steps = {
533
533
  .eq(columnIndex)
534
534
  .clear()
535
535
  .type(points, { delay: 0 })
536
- .should('have.value', points);
536
+ .should('have.value', points)
537
+ .blur();
537
538
  });
538
539
  },
539
540
 
@@ -895,7 +896,7 @@ const tests = {
895
896
  .verifyCSS(css.color.labels, css.fontSize.normal, css.fontWeight.regular);
896
897
  });
897
898
  gridCommonComponents.addOptionButton()
898
- .verifyCSS(css.color.secondaryBtnActive, css.fontSize.normal, css.fontWeight.medium);
899
+ .verifyCSS(css.color.secondaryBtnActive, css.fontSize.default, css.fontWeight.medium);
899
900
  });
900
901
  },
901
902
 
@@ -35,4 +35,5 @@ export * from './fillInTheGapsDropdownCommonComponent';
35
35
  export * from './figOverImageCommonComponent';
36
36
  export * from './uploadImageSectionComponent';
37
37
  export * from './colorPopupComponent';
38
- export * from './customizeHighlightPropertiesComponent';
38
+ export * from './customizeHighlightPropertiesComponent';
39
+ export * from './browseItemsPage';
@@ -246,7 +246,7 @@ const tests = {
246
246
  utilities.verifyCSS(optionsWrapperComponent.addOptionButton(), {
247
247
  'color': css.color.secondaryBtnActive,
248
248
  'font-size': css.fontSize.default,
249
- 'font-weight': css.fontWeight.regular
249
+ 'font-weight': css.fontWeight.medium
250
250
  });
251
251
  });
252
252
 
@@ -5,7 +5,7 @@ const css = Cypress.env('css');
5
5
  const selectors = {
6
6
  questionInstructionsLabelEditTab: () => cy.get('.edit-question-instruction-label'),
7
7
  questionInstructionsInputField: () => cy.get('[title="Question Instructions"]'),
8
- questionInstructionsText: () => cy.get('.edit-question-preview-wrapper .question-instruction.question-text-wrapper'),
8
+ questionInstructionsText: () => cy.get('.edit-question-preview-wrapper .question-instruction'),
9
9
  }
10
10
 
11
11
  const steps = {
@@ -31,6 +31,11 @@ const steps = {
31
31
  commonComponents.errorMessage()
32
32
  .verifyInnerText('Error: Question instructions are required.');
33
33
  });
34
+ },
35
+
36
+ verifyQuestionInstructionsText: () => {
37
+ questionInstructionsComponent.questionInstructionsText()
38
+ .should('have.text', 'Which of the following is the major contributor to increased carbon dioxide levels because of urbanization? Select your answer from the options below.');
34
39
  }
35
40
  }
36
41
 
@@ -99,8 +104,7 @@ const tests = {
99
104
  questionInstructionsComponent.steps.addQuestionInstructions()
100
105
  cy.log('Switching to Preview Tab')
101
106
  createQuestionBasePage.steps.switchToPreviewTab();
102
- questionInstructionsComponent.questionInstructionsText()
103
- .should('have.text', 'Which of the following is the major contributor to increased carbon dioxide levels because of urbanization? Select your answer from the options below.');
107
+ steps.verifyQuestionInstructionsText();
104
108
  });
105
109
  }
106
110
  };
@@ -222,6 +222,8 @@ const steps = {
222
222
  uploadImageSectionComponent.imagePopupImagePreview()
223
223
  .find('img')
224
224
  .should('have.attr', 'src', sourceUrl);
225
+ uploadImageSectionComponent.imagePopupImagePreview()
226
+ .click();
225
227
  },
226
228
 
227
229
  clickOnEditImageButton: () => {
@@ -7,7 +7,12 @@ const selectors = {
7
7
  previewTab: () => cy.get('[data-ngie-testid="preview-tab"]'),
8
8
  editTab: () => cy.get('[data-ngie-testid="edit-tab"]'),
9
9
  settingsButton: () => cy.get('.settingsBtn '),
10
- viewAllQuestionsButton: () => cy.get('.view-question-resource-button-wrapper')
10
+ viewAllQuestionsButton: () => cy.get('.view-question-resource-button-wrapper'),
11
+ createItemContainer: () => cy.get('.edit-wrapper'),
12
+ referenceId: () => cy.get('.edit-item-reference-id'),
13
+ itemTitle: () => cy.get('.ItemLevel-Header'),
14
+ tagsButton: () => cy.get('.ngie-button').contains('Tags'),
15
+ tagsInputField: () => cy.get('.tags-chip-container')
11
16
  }
12
17
 
13
18
  const steps = {
@@ -15,10 +20,38 @@ const steps = {
15
20
  createItemPage.addQuestionButton()
16
21
  .click();
17
22
  },
18
-
23
+
19
24
  clickOnAddResource: () => {
20
25
  createItemPage.addResourceAndToolsButton()
21
26
  .click();
27
+ },
28
+
29
+ navigateToCreateItemPage: () => {
30
+ cy.visit('/item-engine/demo/create-item');
31
+ },
32
+
33
+ verifyCreateItemContainerIsVisible: () => {
34
+ createItemPage.createItemContainer()
35
+ .should('be.visible');
36
+ },
37
+
38
+ verifyAddQuestionButtonIsVisible: () => {
39
+ createItemPage.addQuestionButton()
40
+ .should('be.visible');
41
+ },
42
+
43
+ clickOnTagsButton: () => {
44
+ createItemPage.tagsButton()
45
+ .click();
46
+ },
47
+
48
+ /**
49
+ * @param {string[]} arrayOfTags of text displayed in tags input field
50
+ * @description Verify the text in tags input field
51
+ */
52
+ verifyTagsInInputField: (arrayOfTags) => {
53
+ createItemPage.tagsInputField()
54
+ .should('have.text', arrayOfTags.sort().join(''));
22
55
  }
23
56
  }
24
57
 
@@ -3,8 +3,8 @@ import { createQuestionBasePage } from "./components";
3
3
  const css = Cypress.env('css');
4
4
 
5
5
  const selectors = {
6
- dialogBox: () => cy.get('[aria-describedby="alert-dialog-description"]'),
7
- dialogBoxTitle: () => cy.get('#alert-dialog-title'),
6
+ dialogBox: () => cy.get('[role="dialog"]'),
7
+ dialogBoxTitle: () => cy.get('.dialog-title'),
8
8
  dialogBoxContent: () => cy.get('div[id="alert-dialog-description"]'),
9
9
  buttonReject: () => cy.get('.action-btn-wrapper button').eq(0),
10
10
  buttonAccept: () => cy.get('.action-btn-wrapper button').eq(1),
@@ -106,8 +106,8 @@ const tests = {
106
106
  dragAndDropIntoCategoriesPage.steps.verifyNumerationOfCategoryCellsInQuestionPreview(cellNumerationArray);
107
107
  dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(0);
108
108
  dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(1);
109
- dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(2);
110
- dragAndDropIntoCategoriesPage.steps.verifyIncorrectOptionCrossmarkIcon(3);
109
+ dragAndDropIntoCategoriesPage.steps.verifyIncorrectOptionCrossmarkIcon(2);
110
+ dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(3);
111
111
  dragAndDropIntoCategoriesPage.steps.verifyIncorrectAttemptBorder();
112
112
  dragAndDropIntoCategoriesPage.steps.verifyCorrectIncorrectCellBorderNotExists();
113
113
  dragAndDropIntoCategoriesPage.steps.verifyCorrectIncorrectAnswerLabel('Incorrect');
@@ -119,8 +119,8 @@ const tests = {
119
119
  autoScoredPreviewBase.steps.checkAnswer();
120
120
  dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(0);
121
121
  dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(1);
122
- dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(2);
123
- dragAndDropIntoCategoriesPage.steps.verifyIncorrectOptionCrossmarkIcon(3);
122
+ dragAndDropIntoCategoriesPage.steps.verifyIncorrectOptionCrossmarkIcon(2);
123
+ dragAndDropIntoCategoriesPage.steps.verifyCorrectOptionCheckmarkIcon(3);
124
124
  dragAndDropIntoCategoriesPage.steps.verifyIncorrectAttemptBorder();
125
125
  dragAndDropIntoCategoriesPage.steps.verifyCorrectIncorrectCellBorderNotExists();
126
126
  dragAndDropIntoCategoriesPage.steps.verifyCorrectIncorrectAnswerLabel('Incorrect');
@@ -1,6 +1,8 @@
1
1
  import { autoScoredPreviewBase, previewScoringAndShowCorrectAnswerComponent } from "./components";
2
2
  import { dragAndDropIntoCategoriesPage } from "./dragAndDropIntoCategoriesPage";
3
3
  const cellNumerationArray = ['1', '2', '3', '4'];
4
+ const correctTabAnswerArray = [['Bat'], ['Eagle', 'Parrot'], ['Platypus', 'Whale'], ['Ostrich']];
5
+
4
6
  const tests = {
5
7
  verifyScoringForEachCell: (scoringSubtype) => {
6
8
  it('When the user attempts the question incorrectly then on selecting \'Show correct answer\' checkbox, 0 points should be provided, red cross-mark should be displayed besides incorrect answer responses, incorrect cell border and red cross-mark should be displayed for incorrect cells and the correct answer section should display the incorrect/not attempted options from the correct tab along with category cell numeration', () => {
@@ -57,7 +57,7 @@ const selectors = {
57
57
  setCorrectAnswerSectionCategoryGrid: () => cy.get('[class*="DragAndDropMatrixstyles__TableWrapper"]'),
58
58
  previewTabCategoryGrid: () => cy.get('.edit-question-preview-wrapper [class*="DragAndDropMatrixstyles__TableWrapper"]'),
59
59
  //Additional settings
60
- rowHeadingLabel: () => cy.get('[class*="Classificationstyle__RowResponseWrapper"] .inline-text-property-label').eq(0),
60
+ rowHeadingLabel: () => cy.get('[class*="RowResponseWrapper"] .text-label '),
61
61
  rowHeadingInputField: () => cy.get('input[aria-label="Row heading"]'),
62
62
  rowHeadingSetCorrectAnswerSection: () => cy.get('[class*="DragAndDropMatrixstyles__RowTitleCell"]'),
63
63
  rowHeadingPreviewTab: () => cy.get('.edit-question-preview-wrapper [class*="DragAndDropMatrixstyles__RowTitleCell"]'),
@@ -786,7 +786,7 @@ const steps = {
786
786
  .contains(optionName)
787
787
  .click();
788
788
  draggableOptionsContainer.setCorrectAnswerDraggableOptionsWrapper('drag and drop into categories')
789
- .find('[class*="DragAndDropMatrixstyles__DroppableWrapper"]')
789
+ .find('[class*="DroppableWrapper"]')
790
790
  .click({ force: true });
791
791
  },
792
792
 
@@ -802,7 +802,7 @@ const steps = {
802
802
  .click();
803
803
  });
804
804
  draggableOptionsContainer.previewTabDraggableOptionsWrapper('drag and drop into categories')
805
- .find('[class*="DragAndDropMatrixstyles__DroppableWrapper"]')
805
+ .find('[class*="DroppableWrapper"]')
806
806
  .click({ force: true });
807
807
  },
808
808
 
@@ -1066,7 +1066,7 @@ const steps = {
1066
1066
  */
1067
1067
  enterTextInRowTitleWidthInputField: (text) => {
1068
1068
  dragAndDropIntoCategoriesPage.rowTitleWidthInputField()
1069
- .type(text, { delay: 0 })
1069
+ .type(text)
1070
1070
  .blur();
1071
1071
  },
1072
1072
 
@@ -1092,7 +1092,7 @@ const steps = {
1092
1092
  */
1093
1093
  enterTextInRowMinHeightInputField: (text) => {
1094
1094
  dragAndDropIntoCategoriesPage.rowMinHeightInputField()
1095
- .type(text, { delay: 0 })
1095
+ .type(text)
1096
1096
  .blur();
1097
1097
  },
1098
1098
 
@@ -1206,7 +1206,8 @@ const steps = {
1206
1206
 
1207
1207
  clearMaxResponsePerCellInputField: () => {
1208
1208
  dragAndDropIntoCategoriesPage.maxResponsePerCellInputField()
1209
- .clear();
1209
+ .clear()
1210
+ .blur();
1210
1211
  },
1211
1212
 
1212
1213
  /**
@@ -1537,10 +1538,6 @@ const tests = {
1537
1538
  });
1538
1539
  },
1539
1540
 
1540
- /**
1541
- * @param {string[]} numerationArray array of the numeration displayed with options numbers| lowercase| uppercase
1542
- * @description this function checks the numeration displayed for the options and correct answer container options when check answer is selected
1543
- */
1544
1541
  verifyCategoryCellsNumerationNotDisplayedWhenCheckAnswerIsSelected: () => {
1545
1542
  it('When user clicks on \'Check answer\' button then the numeration should not be displayed in the category cells', () => {
1546
1543
  autoScoredPreviewBase.steps.checkAnswer()
@@ -13,8 +13,8 @@ const selectors = {
13
13
  copyCustomizeFormattingOption: () => cy.get(`[data-ngie-testid="copy-toggle-button"]`),
14
14
  pasteCustomizeFormattingOption: () => cy.get(`[data-ngie-testid="paste-toggle-button"]`),
15
15
  specialCharacterCustomizeFormattingOption: () => cy.get(`[data-ngie-testid="special-characters-toggle-button"]`),
16
- customizeFormattingOptionsLabel: () => cy.get('.customized_button_label'),
17
- customizeFormattingOptionsIcon: () => cy.get('.audio_icon_wrapper'),
16
+ customizeFormattingOptionsLabel: () => cy.get('.ngie-toggle-button-label'),
17
+ customizeFormattingOptionsIcon: () => cy.get('.ngie-toggle-button-icon svg'),
18
18
  customizeFormattingOptionsWrapper: () => cy.get('.customize-essay-formatting-options'),
19
19
  };
20
20
 
@@ -12,8 +12,9 @@ const selectors = {
12
12
  textToNotBeRenderedAsLaTextInputFieldWrapper: (inputfieldNumber) => cy.get('.text-not-to-be-rendered-input').eq(inputfieldNumber),
13
13
  textToNotBeRenderedAsLaTextInputField: () => cy.get('[aria-label="Text to not be rendered as LaTex"]'),
14
14
  textToNotBeRenderedAsLaTextInputFieldCount: () => cy.get('.start-adornment'),
15
- addTextButton: () => cy.get('.text-not-latex-wrapper .add-option'),
16
- inputFieldLatexCharacter: () => cy.get('var[mathquill-command-id]')
15
+ addTextButton: () => cy.get('.text-not-latex-wrapper .ngie-icon-with-label-btn'),
16
+ inputFieldLatexCharacter: () => cy.get('var[mathquill-command-id]'),
17
+ deleteButton: () => cy.get('.icon-button-wrapper button')
17
18
  }
18
19
 
19
20
  const steps = {
@@ -351,7 +351,7 @@ const tests = {
351
351
  cy.log('Adding a space and inserting more symbols in the response field.');
352
352
  essayResponsePage.responseField()
353
353
  .click()
354
- .type(' ');
354
+ .type(' ');
355
355
  essayResponsePage.previewTabToolbarOption(`${specialOrMathCharacters[popupType].popupTitle}`)
356
356
  .click();
357
357
  essayResponsePage.specialAndMathCharacterPopupSymbols()
@@ -1,12 +1,15 @@
1
1
  import utilities from "../support/helpers/utilities";
2
- import { createQuestionBasePage, figOverImageCommonComponent, fillInTheGapsDropdownCommonComponent, commonComponents, uploadImageSectionComponent, optionsWrapperComponent, ckEditorToolbar, equationEditorFlyout, autoScoredSetCorrectAnswerSection, scoringSectionBase, autoScoredScoringSectionMultipleResponsesType, autoScoredScoringSection, previewScoringAndShowCorrectAnswerComponent, additionalSettingsPanel, autoScoredAdditionalSettings, autoScoredPreviewBase, questionInstructionsComponent } from "./components"
2
+ import { createQuestionBasePage, figOverImageCommonComponent, fillInTheGapsDropdownCommonComponent, commonComponents, uploadImageSectionComponent, optionsWrapperComponent, ckEditorToolbar, equationEditorFlyout, autoScoredSetCorrectAnswerSection, scoringSectionBase, autoScoredScoringSectionMultipleResponsesType, autoScoredScoringSection, previewScoringAndShowCorrectAnswerComponent, additionalSettingsPanel, autoScoredAdditionalSettings, autoScoredPreviewBase, questionInstructionsComponent, answerNumerationComponent } from "./components"
3
3
 
4
4
  const selectors = {
5
5
  ...figOverImageCommonComponent,
6
6
  ...fillInTheGapsDropdownCommonComponent,
7
7
  ...questionInstructionsComponent,
8
+ ...answerNumerationComponent,
9
+ ...additionalSettingsPanel,
8
10
  responseDropdownPreviewTab: () => cy.get('[class*="ImageWithDropdownPreviewstyles__DraggableInput"] [class*="icon-chevron"]'),
9
- responseDropdownWrapperPreviewTab: () => cy.get('[class*="ImageWithDropdownPreviewstyles__IconDiv"]'),
11
+ responseDropdownWrapperPreviewTab: () => cy.get('.response-dropdown-wrapper'),
12
+ responseDropdownContainerWrapperPreviewTab: () => cy.get('[class*="ImageWithDropdownPreviewstyles__IconDiv"]'),
10
13
  //Correct answer container
11
14
  previewTabCorrectAnswerContainer: () => cy.get('.cloze-with-text-correct-answer-wrapper'),
12
15
  previewTabCorrectAnswerLabel: () => cy.get('.cloze-with-text-correct-answer-label'),
@@ -31,7 +34,7 @@ const steps = {
31
34
  ...autoScoredPreviewBase.steps,
32
35
  ...autoScoredScoringSection.steps,
33
36
  ...questionInstructionsComponent.steps,
34
-
37
+ ...answerNumerationComponent.steps,
35
38
  /**
36
39
  * @param {number} responseContainerIndex Index of response container
37
40
  * @param {number[]} responseContainerPositionCoordinates Position coordinates of the response container
@@ -128,7 +131,7 @@ const steps = {
128
131
  * @description Verify that the incorrect option at the specified index has a cross-mark icon and is visible.
129
132
  */
130
133
  verifyIncorrectOptionCrossmarkIcon: (index) => {
131
- fillInTheGapsOverImageDropdownPage.responseDropdownWrapperPreviewTab()
134
+ fillInTheGapsOverImageDropdownPage.responseDropdownContainerWrapperPreviewTab()
132
135
  .eq(index)
133
136
  .find('.tick-icon-wrapper')
134
137
  .should('have.class', 'icon-incorrect')
@@ -140,7 +143,7 @@ const steps = {
140
143
  * @description Verify that the correct option at the specified index has a check-mark icon and is visible.
141
144
  */
142
145
  verifyCorrectOptionCheckmarkIcon: (index) => {
143
- fillInTheGapsOverImageDropdownPage.responseDropdownWrapperPreviewTab()
146
+ fillInTheGapsOverImageDropdownPage.responseDropdownContainerWrapperPreviewTab()
144
147
  .eq(index)
145
148
  .find('.tick-icon-wrapper')
146
149
  .should('have.class', 'icon-correct')
@@ -152,7 +155,7 @@ const steps = {
152
155
  * @description Verify that the option at the specified index does not have a check-mark or cross-mark.
153
156
  */
154
157
  verifyCheckmarkOrCrossmarkNotVisible: (index) => {
155
- utilities.verifyElementVisibilityState(fillInTheGapsOverImageDropdownPage.responseDropdownWrapperPreviewTab().eq(index).find('.tick-icon-wrapper'), 'notExist');
158
+ utilities.verifyElementVisibilityState(fillInTheGapsOverImageDropdownPage.responseDropdownContainerWrapperPreviewTab().eq(index).find('.tick-icon-wrapper'), 'notExist');
156
159
  },
157
160
 
158
161
  /**
@@ -194,7 +197,68 @@ const steps = {
194
197
  let responseVerticalCoordinate = coordinatesArray[1].trim();
195
198
  expect(responseVerticalCoordinate).to.be.eq(verticalCoordinate);
196
199
  });
200
+ },
201
+
202
+ /**
203
+ * @param {number} responseDropdownIndex Index of response dropdown
204
+ * @description Verify placeholder for response dropdown in preview tab does not exist
205
+ */
206
+ verifyPlaceholderAttributeInPreviewTabDropdownNotExists: (responseDropdownIndex) => {
207
+ fillInTheGapsOverImageDropdownPage.responseDropdownContainerWrapperPreviewTab()
208
+ .eq(responseDropdownIndex)
209
+ .within(() => {
210
+ utilities.verifyElementVisibilityState(fillInTheGapsDropdownCommonComponent.responseDropdownPlaceholderText(), 'notExist');
211
+ });
212
+ },
213
+
214
+ /**
215
+ * @param {number} responseDropdownIndex Index of response dropdown
216
+ * @param {*} placeholderText Placeholder for dropdown
217
+ * @description Verify placeholder text displayed for response dropdown in preview tab
218
+ */
219
+ verifyPlaceholderAttributeInPreviewTabDropdown: (responseDropdownIndex, placeholderText) => {
220
+ fillInTheGapsOverImageDropdownPage.responseDropdownContainerWrapperPreviewTab()
221
+ .eq(responseDropdownIndex)
222
+ .within(() => {
223
+ utilities.verifyTextContent(fillInTheGapsDropdownCommonComponent.responseDropdownPlaceholderText(), placeholderText);
224
+ });
225
+ },
226
+
227
+ /**
228
+ * @param {number} responseDropdownIndex Index of response dropdown
229
+ * @param {number} height Height of response dropdown in preview tab
230
+ * @description Verify height of response dropdown in preview tab
231
+ */
232
+ verifyDropdownHeightPreviewTab: (responseDropdownIndex, height) => {
233
+ fillInTheGapsOverImageDropdownPage.responseDropdownWrapperPreviewTab()
234
+ .eq(responseDropdownIndex)
235
+ .should('have.attr', 'height', `${height}px`);
236
+ },
237
+
238
+ /**
239
+ * @param {number} responseDropdownIndex Index of response dropdown
240
+ * @param {number} width Width of response dropdown in preview tab
241
+ * @description Verify width of response dropdown in preview tab
242
+ */
243
+ verifyDropdownWidthPreviewTab: (responseDropdownIndex, width) => {
244
+ fillInTheGapsOverImageDropdownPage.responseDropdownWrapperPreviewTab()
245
+ .eq(responseDropdownIndex)
246
+ .should('have.attr', 'width', `${width}px`);
247
+ },
248
+
249
+ /**
250
+ * Verify the numeration of response fields in the Preview Tab.
251
+ * @param {string[]} optionNumerationArray - An array of expected numeration strings to verify.
252
+ */
253
+ verifyResponseDropdownNumeration: (optionNumerationArray) => {
254
+ fillInTheGapsOverImageDropdownPage.responseDropdownContainerWrapperPreviewTab()
255
+ optionNumerationArray.forEach((optionNumeration, count) => {
256
+ fillInTheGapsOverImageDropdownPage.responseNumeration()
257
+ .eq(count)
258
+ .should('have.text', `${optionNumeration}`);
259
+ });
197
260
  }
261
+
198
262
  }
199
263
 
200
264
  const tests = {
@@ -206,8 +270,11 @@ const tests = {
206
270
  ...autoScoredScoringSection.tests,
207
271
  ...commonComponents.tests,
208
272
  ...previewScoringAndShowCorrectAnswerComponent.tests,
273
+ ...answerNumerationComponent.tests,
274
+ ...additionalSettingsPanel.tests,
275
+ ...autoScoredAdditionalSettings.tests,
209
276
  ...questionInstructionsComponent.tests,
210
-
277
+ ...createQuestionBasePage.tests,
211
278
  /**
212
279
  * @param {number} minimumScoreIfAttemptedPoints - The minimum score awarded if attempted.
213
280
  * @param {number} allocatedPoints - The expected allocated points for the question.
@@ -59,7 +59,7 @@ const steps = {
59
59
  expandResponseAccordion: (responseIndex) => {
60
60
  fillInTheGapsTextPage.responseAccordionWrapper()
61
61
  .eq(responseIndex)
62
- .find('.additional-settings-panel')
62
+ .find('[role="button"]')
63
63
  .should('have.attr', 'aria-expanded', 'false')
64
64
  .click()
65
65
  .should('have.attr', 'aria-expanded', 'true');
@@ -37,13 +37,11 @@ const selectors = {
37
37
  highlighImageCanvasWrapper: () => cy.get('.drawing-tool__wrapper .drawing-tool__canvas'),
38
38
  highlighImageCanvas: () => cy.get('.drawing-tool__wrapper .upper-canvas'),
39
39
  setCorrectAnswerSectionHighlight: () => cy.get('[class*="HighlightImageControlstyles__ShapeWrapper"] a'),
40
- setCorrectAnswerSectionHighlightActivePattern: () => cy.get('[class*="HighlightImageControlstyles__ShapeWrapper"] a [class*="HighlightImageControlstyles__DiamondPattern-"]'),
41
40
  setCorrectAnswerSectionHighlightFillColor: () => cy.get('[class*="HighlightImageControlstyles__ShapeWrapper"] a [class*="HighlightImageControlstyles__DiamondPatternWrapper"]'),
42
41
  setCorrectAnswerSectionHighlightPolygon: () => cy.get('[class*="HighlightImageControlstyles__PolygonWrapper"]'),
43
42
  highlightNumeration: () => cy.get('[class*="styles__TextWrapper"]'),
44
43
  setCorrectAnswerSectionImage: () => cy.get('.highlight-svg-responseive image'),
45
44
  previewTabHighlight: () => cy.get('.edit-question-preview-wrapper [class*="HighlightImageControlstyles__ShapeWrapper"] a'),
46
- previewTabHighlightActivePattern: () => cy.get('.edit-question-preview-wrapper [class*="HighlightImageControlstyles__ShapeWrapper"] a [class*="HighlightImageControlstyles__DiamondPattern-"]'),
47
45
  previewTabHighlightFillColor: () => cy.get('.edit-question-preview-wrapper [class*="HighlightImageControlstyles__ShapeWrapper"] a [class*="HighlightImageControlstyles__DiamondPatternWrapper"]'),
48
46
  previewTabHighlightPolygon: () => cy.get('.edit-question-preview-wrapper [class*="HighlightImageControlstyles__PolygonWrapper"]'),
49
47
  multipleSelectionCheckboxLabel: () => cy.get('[data-ngie-testid="multiple-selection-checkbox"] .MuiFormControlLabel-label'),
@@ -486,14 +484,14 @@ const steps = {
486
484
 
487
485
  clickOnUndoTool: () => {
488
486
  highlightImagePage.undoTool()
489
- .click()
490
- .blur();
487
+ .click();
488
+ steps.clickOnPenTool();
491
489
  },
492
490
 
493
491
  clickOnRedoTool: () => {
494
492
  highlightImagePage.redoTool()
495
- .click()
496
- .blur();
493
+ .click();
494
+ steps.clickOnPenTool();
497
495
  },
498
496
 
499
497
  clickOnClearAllTool: () => {
@@ -1150,8 +1148,9 @@ const steps = {
1150
1148
  * @description this function verifies that active pattern is displayed on the highlight region in Set correct answer section
1151
1149
  */
1152
1150
  verifyActivePatternIsDisplayedOnHighlightRegionInSetCorrectAnswerSection: (index) => {
1153
- highlightImagePage.setCorrectAnswerSectionHighlightActivePattern()
1151
+ highlightImagePage.setCorrectAnswerSectionHighlight()
1154
1152
  .eq(index)
1153
+ .find('[class*="HighlightImageControlstyles__DiamondPattern-"]')
1155
1154
  .should('exist');
1156
1155
  },
1157
1156
 
@@ -1160,8 +1159,9 @@ const steps = {
1160
1159
  * @description this function verifies that active pattern is displayed on the highlight region in Preview tab
1161
1160
  */
1162
1161
  verifyActivePatternIsDisplayedOnHighlightRegionInPreviewTab: (index) => {
1163
- highlightImagePage.previewTabHighlightActivePattern()
1162
+ highlightImagePage.previewTabHighlight()
1164
1163
  .eq(index)
1164
+ .find('[class*="HighlightImageControlstyles__DiamondPattern-"]')
1165
1165
  .should('exist');
1166
1166
  },
1167
1167
 
@@ -1170,8 +1170,9 @@ const steps = {
1170
1170
  * @description this function verifies that active pattern is not displayed on the highlight region in Set correct answer section
1171
1171
  */
1172
1172
  verifyActivePatternIsNotDisplayedOnHighlightRegionInSetCorrectAnswerSection: (index) => {
1173
- highlightImagePage.setCorrectAnswerSectionHighlightActivePattern()
1173
+ highlightImagePage.setCorrectAnswerSectionHighlight()
1174
1174
  .eq(index)
1175
+ .find('[class*="HighlightImageControlstyles__DiamondPattern-"]')
1175
1176
  .should('not.exist');
1176
1177
  },
1177
1178
 
@@ -1180,8 +1181,9 @@ const steps = {
1180
1181
  * @description this function verifies that active pattern is not displayed on the highlight region in Preview Tab
1181
1182
  */
1182
1183
  verifyActivePatternIsNotDisplayedOnHighlightRegionInPreviewTab: (index) => {
1183
- highlightImagePage.previewTabHighlightActivePattern()
1184
+ highlightImagePage.previewTabHighlight()
1184
1185
  .eq(index)
1186
+ .find('[class*="HighlightImageControlstyles__DiamondPattern-"]')
1185
1187
  .should('not.exist');
1186
1188
  }
1187
1189
  }