itemengine-cypress-automation 1.0.12 → 1.0.14
Sign up to get free protection for your applications and to get access to all the features.
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseAdditionalSettings.js +2 -487
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseAdditionalSettingsBasic.js +336 -0
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseConditionalCheckboxes.js +154 -0
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseContainsConditionalRadioButton.js +166 -0
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseCustomSpecialCharacters.js +167 -0
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseExactConditionalRadioButton.js +157 -0
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseManuallyScoredNonScoredScoringSection.js +2 -1
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseSetCorrectAnswerSection.js +137 -0
- package/cypress/pages/audioPlayerPage.js +2 -2
- package/cypress/pages/audioResponsePage.js +3 -3
- package/cypress/pages/components/additionalSettingsPanel.js +1 -1
- package/cypress/pages/components/autoScoredPreviewBase.js +1 -1
- package/cypress/pages/components/autoScoredSetCorrectAnswerSection.js +7 -1
- package/cypress/pages/components/browseItemsPage.js +53 -0
- package/cypress/pages/components/createQuestionBasePage.js +32 -2
- package/cypress/pages/components/customizeHighlightPropertiesComponent.js +1 -1
- package/cypress/pages/components/dragAndDropResponseOptions.js +3 -2
- package/cypress/pages/components/draggableOptionsContainer.js +1 -0
- package/cypress/pages/components/figOverImageCommonComponent.js +198 -10
- package/cypress/pages/components/fillInTheGapsCommonComponents.js +4 -4
- package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +54 -1
- package/cypress/pages/components/fillInTheGapsTextCommonComponent.js +3 -3
- package/cypress/pages/components/gridCommonComponents.js +3 -2
- package/cypress/pages/components/index.js +2 -1
- package/cypress/pages/components/listSortingAndOrderingBase.js +1 -1
- package/cypress/pages/components/questionInstructionsComponent.js +7 -3
- package/cypress/pages/components/uploadImageSectionComponent.js +2 -0
- package/cypress/pages/createItemPage.js +35 -2
- package/cypress/pages/dialogBoxBase.js +2 -2
- package/cypress/pages/dragAndDropIntoCategoriesAllOrNothingScoring.js +4 -4
- package/cypress/pages/dragAndDropIntoCategoriesCellsScoring.js +2 -0
- package/cypress/pages/dragAndDropIntoCategoriesPage.js +7 -10
- package/cypress/pages/essayResponseBasicPage.js +2 -2
- package/cypress/pages/essayResponseMathPage.js +3 -2
- package/cypress/pages/essayResponsePage.js +1 -1
- package/cypress/pages/fillInTheGapsOverImageDropdownPage.js +74 -7
- package/cypress/pages/fillInTheGapsTextPage.js +1 -1
- package/cypress/pages/highlightImagePage.js +12 -10
- package/cypress/pages/highlightPage.js +29 -5
- package/cypress/pages/listMatchingPage.js +205 -17
- package/cypress/pages/listMatchingScoring.js +0 -1
- package/cypress/pages/passagePage.js +3 -3
- package/cypress/pages/readingRulerPage.js +1 -1
- package/cypress/pages/shortTextResponsePage.js +1 -1
- package/cypress/pages/videoResponsePage.js +7 -7
- package/package.json +1 -1
- package/cypress/e2e/ILC/ShortTextResponse/shortTextResponseEditTabBasicSections.js +0 -587
- package/cypress/e2e/ILC/sorry-cypress-test/spec1.js +0 -18
- package/cypress/e2e/ILC/sorry-cypress-test/spec2.js +0 -18
- package/cypress/e2e/ILC/sorry-cypress-test/spec3.js +0 -18
@@ -31,8 +31,8 @@ const selectors = {
|
|
31
31
|
descriptionInputField: () => cy.get('[role="textbox"][title="Description"]'),
|
32
32
|
transcriptLabel: () => cy.get('.additional-settings-label').eq(1),
|
33
33
|
transcriptInputField: () => cy.get('[role="textbox"][title="Transcript"]'),
|
34
|
-
customizeUIControlAccordion: () => cy.get('.ngie-accordion').eq(0),
|
35
|
-
advancedPlayerSettingsAccordion: () => cy.get('.ngie-accordion').eq(1),
|
34
|
+
customizeUIControlAccordion: () => cy.get('.ngie-accordion-summary[role="button"]').eq(0),
|
35
|
+
advancedPlayerSettingsAccordion: () => cy.get('.ngie-accordion-summary[role="button"]').eq(1),
|
36
36
|
customizeControlPlayButton: () => cy.get('[data-ngie-testid="play-toggle-button"]'),
|
37
37
|
customizeControlButtonLabel: () => cy.get('.audio-response-selection-panel-details').eq(0).find('.customized_button_label'),
|
38
38
|
customizeControlPauseButton: () => cy.get('[data-ngie-testid="pause-toggle-button"]'),
|
@@ -18,20 +18,20 @@ const selectors = {
|
|
18
18
|
stopRecordingIfSilenceIsDetectedInputField: () => cy.get('.stop-recording-on-silence-time-input-field input'),
|
19
19
|
recorderAndPlaybackControlsOptionButtonIcon: () => cy.get('.ngie-toggle-button-icon'),
|
20
20
|
//Customize recorder and playback controls (for student player)
|
21
|
-
customizeRecorderAndPlaybackControlsAccordionChevronIcon: () => cy.get('.customize-
|
21
|
+
customizeRecorderAndPlaybackControlsAccordionChevronIcon: () => cy.get('.customize-accordion [class*="expandIconWrapper"]'),
|
22
22
|
customizeRecorderAndPlaybackControlsAccordionLabel: () => cy.get('.customize_recorder_label'),
|
23
23
|
customizeRecorderAndPlaybackControlsAccordion: () => cy.get('.customize-accordion [role="button"]'),
|
24
24
|
customizeRecorderAndPlaybackControlsSection: () => cy.get('.customize-accordion'),
|
25
25
|
recorderAndPlaybackControlsOptionButtonLabel: () => cy.get('.ngie-toggle-button-label'),
|
26
26
|
//Controls for recording response
|
27
|
-
controlsForRecordingResponseLabel: () => cy.get('.
|
27
|
+
controlsForRecordingResponseLabel: () => cy.get('.customize-accordion .ngie-toggle-button-title').eq(0),
|
28
28
|
startRecordingOptionButton: () => cy.get('[data-ngie-testid="start-recording-toggle-button"]'),
|
29
29
|
pauseRecordingOptionButton: () => cy.get('[data-ngie-testid="pause-recording-toggle-button"]'),
|
30
30
|
stopRecordingOptionButton: () => cy.get('[data-ngie-testid="stop-recording-toggle-button"]'),
|
31
31
|
recordingCueOptionButton: () => cy.get('[data-ngie-testid="recording-cue-toggle-button"]'),
|
32
32
|
recordingOverlayOptionButton: () => cy.get('[value="recorderOverlay"]'),
|
33
33
|
//Controls for response playback
|
34
|
-
controlsForResponsePlaybackLabel: () => cy.get('.
|
34
|
+
controlsForResponsePlaybackLabel: () => cy.get('.customize-accordion .ngie-toggle-button-title').eq(1),
|
35
35
|
playOptionButton: () => cy.get('[data-ngie-testid="play-toggle-button"]'),
|
36
36
|
pauseOptionButton: () => cy.get('[data-ngie-testid="pause-toggle-button"]'),
|
37
37
|
seekOptionButton: () => cy.get('[data-ngie-testid="seek-toggle-button"]'),
|
@@ -130,7 +130,7 @@ const tests = {
|
|
130
130
|
|
131
131
|
it('Clicking on Font Size dropdown should open a list of 6 options - Default, Small, Normal, Large, Extra large, Huge', () => {
|
132
132
|
additionalSettingsPanel.fontSizeDropdown()
|
133
|
-
.
|
133
|
+
.realClick();
|
134
134
|
additionalSettingsPanel.fontSizeListOptions(0)
|
135
135
|
.should('be.visible');
|
136
136
|
fontsizes.forEach((index, count) => {
|
@@ -6,7 +6,7 @@ const selectors = {
|
|
6
6
|
incorrectIcon: () => cy.get('.icon-incorrect'),
|
7
7
|
correctIncorectAnswerLabel: () => cy.get('.answer-label-text'),
|
8
8
|
checkAnswerButton: () => cy.get('.check-answer-and-status-wrapper button'),
|
9
|
-
correctIncorrectAnswerBorder: () => cy.get('
|
9
|
+
correctIncorrectAnswerBorder: () => cy.get('[class*="question-preview-wrapper"] [class*="correct-answer-border"]')
|
10
10
|
}
|
11
11
|
|
12
12
|
const steps = {
|
@@ -7,7 +7,13 @@ const selectors = {
|
|
7
7
|
setCorrectAnswerLabel: () => cy.get('.set-correct-answer-label'),
|
8
8
|
setCorrectAnswerHelpText: () => cy.get('.edit-set-correct-answer-help-text'),
|
9
9
|
alternateAnswerButton: () => cy.get('.edit-question-auto-scored-set-correct-answer-wrapper .ngie-button'),
|
10
|
-
alternateAnswerTab: (tabIndex
|
10
|
+
alternateAnswerTab: (tabIndex = null) => {
|
11
|
+
if (tabIndex) {
|
12
|
+
return cy.get('[data-ngie-testid*="alternate-"][data-ngie-testid*="tab"]').eq(tabIndex - 1)
|
13
|
+
} else {
|
14
|
+
return cy.get('[data-ngie-testid*="alternate-"][data-ngie-testid*="tab"]')
|
15
|
+
}
|
16
|
+
},
|
11
17
|
deleteAlternateTabButton: () => cy.get('.ngie-tablist-tab-button .styled-close-button'),
|
12
18
|
correctTab: () => cy.get('[data-ngie-testid="correct-tab"]'),
|
13
19
|
setCorrectAnswerErrorIcon: () => cy.get('[aria-label="Error In"]'),
|
@@ -0,0 +1,53 @@
|
|
1
|
+
const selectors = {
|
2
|
+
browseItemPageWrapper: () => cy.get('.browse-item-page'),
|
3
|
+
itemLabel: () => cy.get('#reference-header'),
|
4
|
+
lastUpdatedLabel: () => cy.get('#updated-header'),
|
5
|
+
searchInputField: () => cy.get('.ngie-search input'),
|
6
|
+
sortArrow: () => cy.get('.table-header-sort-arrow'),
|
7
|
+
browseItemsLabel: () => cy.get('.browse-title-wrapper')
|
8
|
+
}
|
9
|
+
|
10
|
+
const steps = {
|
11
|
+
navigateToBrowseItemsPage: () => {
|
12
|
+
cy.visit('/item-engine/demo/browse-items');
|
13
|
+
},
|
14
|
+
|
15
|
+
verifyBrowseItemContainerIsVisible: () => {
|
16
|
+
browseItemsPage.browseItemPageWrapper()
|
17
|
+
.should('be.visible');
|
18
|
+
},
|
19
|
+
|
20
|
+
sortUsingItemColumn: () => {
|
21
|
+
browseItemsPage.itemLabel()
|
22
|
+
.click();
|
23
|
+
browseItemsPage.itemLabel()
|
24
|
+
.within(() => {
|
25
|
+
browseItemsPage.sortArrow()
|
26
|
+
.should('be.visible');
|
27
|
+
})
|
28
|
+
},
|
29
|
+
|
30
|
+
sortUsingLastUpdatedColumn: () => {
|
31
|
+
browseItemsPage.lastUpdatedLabel()
|
32
|
+
.click();
|
33
|
+
browseItemsPage.lastUpdatedLabel()
|
34
|
+
.within(() => {
|
35
|
+
browseItemsPage.sortArrow()
|
36
|
+
.should('be.visible');
|
37
|
+
})
|
38
|
+
},
|
39
|
+
|
40
|
+
/**
|
41
|
+
* @param {string} value of the text that needs to be searched
|
42
|
+
* @description enters value in input field and searched for the entered value
|
43
|
+
*/
|
44
|
+
search: (value) => {
|
45
|
+
browseItemsPage.searchInputField()
|
46
|
+
.type(`${value}{enter}`);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
export const browseItemsPage = {
|
51
|
+
...selectors,
|
52
|
+
steps
|
53
|
+
}
|
@@ -53,6 +53,36 @@ const steps = {
|
|
53
53
|
cy.log('Switching to edit tab and back to preview tab to reset the question preview')
|
54
54
|
createQuestionBasePage.steps.switchToEditTab();
|
55
55
|
createQuestionBasePage.steps.switchToPreviewTab();
|
56
|
+
},
|
57
|
+
|
58
|
+
verifySaveButtonIsEnabled: () => {
|
59
|
+
createQuestionBasePage.saveQuestionButton()
|
60
|
+
.should('be.enabled');
|
61
|
+
},
|
62
|
+
|
63
|
+
verifySaveButtonIsDisabled: () => {
|
64
|
+
createQuestionBasePage.saveQuestionButton()
|
65
|
+
.should('be.disabled');
|
66
|
+
},
|
67
|
+
|
68
|
+
verifyPreviewTabSelectedState: () => {
|
69
|
+
createQuestionBasePage.previewTab()
|
70
|
+
.should('have.attr', 'aria-selected', 'true');
|
71
|
+
},
|
72
|
+
|
73
|
+
clickOnSaveQuestionButton: () => {
|
74
|
+
createQuestionBasePage.saveQuestionButton()
|
75
|
+
.click();
|
76
|
+
},
|
77
|
+
|
78
|
+
verifyEditTabSelectedState: () => {
|
79
|
+
createQuestionBasePage.editTab()
|
80
|
+
.should('have.attr', 'aria-selected', 'true');
|
81
|
+
},
|
82
|
+
|
83
|
+
verifyPreviewTabNotSelectedState: () => {
|
84
|
+
createQuestionBasePage.previewTab()
|
85
|
+
.should('have.attr', 'aria-selected', 'false');
|
56
86
|
}
|
57
87
|
}
|
58
88
|
|
@@ -84,7 +114,7 @@ const tests = {
|
|
84
114
|
});
|
85
115
|
|
86
116
|
it('\'Save\' button should be displayed', () => {
|
87
|
-
if (questionType === 'Passage' || questionType === 'Reading ruler'
|
117
|
+
if (questionType === 'Passage' || questionType === 'Reading ruler') {
|
88
118
|
createQuestionBasePage.saveQuestionButton()
|
89
119
|
.verifyInnerText('Save');
|
90
120
|
}
|
@@ -111,7 +141,7 @@ const tests = {
|
|
111
141
|
.should('be.visible')
|
112
142
|
.type('Edited')
|
113
143
|
.should('have.text', 'Edited');
|
114
|
-
if (questionType !== 'feedback scale') {
|
144
|
+
if (questionType !== 'feedback scale' && questionType !== 'highlight image') {
|
115
145
|
scoringSectionBase.steps.allotPoints(20);
|
116
146
|
};
|
117
147
|
createQuestionBasePage.cancelButton()
|
@@ -111,7 +111,7 @@ const steps = {
|
|
111
111
|
* @description this function verfies the background color of hover border color block
|
112
112
|
*/
|
113
113
|
verifyHoverBorderColorBlockColor: (color) => {
|
114
|
-
customizeHighlightPropertiesComponent.
|
114
|
+
customizeHighlightPropertiesComponent.hoverBorderColorBlock()
|
115
115
|
.should('have.css', 'background-color', color);
|
116
116
|
},
|
117
117
|
|
@@ -331,6 +331,7 @@ const tests = {
|
|
331
331
|
.should('not.exist');
|
332
332
|
});
|
333
333
|
|
334
|
+
//Failing due to https://redmine.zeuslearning.com/issues/548907
|
334
335
|
it('CSS of disabled delete button tooltip', { tags: 'css' }, () => {
|
335
336
|
optionsWrapperComponent.deleteOptionButton()
|
336
337
|
.eq(0)
|
@@ -379,7 +380,7 @@ const tests = {
|
|
379
380
|
dragAndDropResponseOptions.optionsInputField()
|
380
381
|
.verifyCSS(css.color.text, css.fontSize.default, css.fontWeight.regular);
|
381
382
|
optionsWrapperComponent.addOptionButton()
|
382
|
-
.verifyCSS(css.color.secondaryBtnActive, css.fontSize.
|
383
|
+
.verifyCSS(css.color.secondaryBtnActive, css.fontSize.default, css.fontWeight.medium);
|
383
384
|
});
|
384
385
|
|
385
386
|
it('Accessibility of Options section', { tags: 'a11y' }, () => {
|
@@ -425,7 +426,7 @@ const tests = {
|
|
425
426
|
})
|
426
427
|
|
427
428
|
it('Accessibility of enabled \'Delete\' option button', { tags: 'a11y' }, () => {
|
428
|
-
cy.checkAccessibility(optionsWrapperComponent.deleteOptionButton()
|
429
|
+
cy.checkAccessibility(optionsWrapperComponent.deleteOptionButton())
|
429
430
|
});
|
430
431
|
|
431
432
|
it('when the user hovers over the enabled \'Delete\' icon buttons, then \'Delete option\' message should be displayed on a tooltip and the tooltip should disappear if focus is removed from the \'Delete\' icon button', () => {
|
@@ -663,6 +663,7 @@ const tests = {
|
|
663
663
|
draggableOptionsContainer.steps.verifyGroupedResponseContainerContentsInSetCorrectAnswerSection(0, optionsForResponses);
|
664
664
|
});
|
665
665
|
|
666
|
+
//Failing due to https://redmine.zeuslearning.com/issues/547859
|
666
667
|
it('CSS of \'Grouped\' container in the \'Set Correct Answer\' section', { tags: 'css' }, () => {
|
667
668
|
draggableOptionsContainer.setCorrectAnswerSectionGroupedResponseContainer()
|
668
669
|
.should('have.css', 'border', `1px solid ${css.color.defaultDropdownBorder}`);
|
@@ -2,8 +2,11 @@ import utilities from "../../support/helpers/utilities";
|
|
2
2
|
import { commonComponents } from "./commonComponents";
|
3
3
|
import { createQuestionBasePage } from "./createQuestionBasePage";
|
4
4
|
import { scoringSectionBase } from "./scoringSectionBase";
|
5
|
+
import { uploadImageSectionComponent } from "./uploadImageSectionComponent";
|
5
6
|
const css = Cypress.env('css');
|
6
7
|
|
8
|
+
const pointerDropdownList = ['Left', 'Right', 'Top', 'Bottom', 'Top left', 'Top right', 'None'];
|
9
|
+
|
7
10
|
const selectors = {
|
8
11
|
addResponseContainerButton: () => cy.get('[class*="ResponseOnImagestyles"] .ngie-icon-with-label-btn').eq(0),
|
9
12
|
//Change selectors after https://redmine.zeuslearning.com/issues/518498 is fixed
|
@@ -32,6 +35,8 @@ const selectors = {
|
|
32
35
|
imagePreviewTab: () => cy.get('.edit-question-preview-wrapper .image-container img'),
|
33
36
|
imagePropertiesContainer: () => cy.get('[class*="AddTextResponseOnImagestyles__DimensionsContainer"]'),
|
34
37
|
responseNumeration: () => cy.get('.response-input-adornment'),
|
38
|
+
uploadImageSectionWrapper: () => cy.get('[class*="ImagePopupWrapper"]'),
|
39
|
+
imageSectionContentsWrapper: () => cy.get('[class*="ImageDisplayWrapper"]'),
|
35
40
|
// Additional setting accordion
|
36
41
|
advanceSettingsforAllResponseAreasLabel: () => cy.get('.additional-settings-heading-label').eq(0),
|
37
42
|
placeholderTextLabel: () => cy.get('.additional-settings-container .text-label'),
|
@@ -44,9 +49,9 @@ const selectors = {
|
|
44
49
|
pointerDropdown: () => cy.get('[id*="Pointer"][id*="select"]'),
|
45
50
|
pointerDropdownListOptions: (ariaLabel = null) => {
|
46
51
|
if (ariaLabel) {
|
47
|
-
return cy.get(`[aria-labelledby*="Pointer
|
52
|
+
return cy.get(`[aria-labelledby*="Pointer"] li[role="option"][aria-label*="${ariaLabel}"]`).eq(0)
|
48
53
|
} else {
|
49
|
-
return cy.get('[aria-labelledby*="Pointer
|
54
|
+
return cy.get('[aria-labelledby*="Pointer"] li[role="option"]')
|
50
55
|
}
|
51
56
|
},
|
52
57
|
fixPositionOnImageLabel: () => cy.get('[data-ngie-testid="fix-position-on-image-checkbox"] .MuiFormControlLabel-label'),
|
@@ -384,26 +389,26 @@ const steps = {
|
|
384
389
|
|
385
390
|
/**
|
386
391
|
* Set the width of a response field in the additional settings for all response areas.
|
387
|
-
* @param {
|
392
|
+
* @param {number} width - The width value to set for the response field.
|
388
393
|
*/
|
389
394
|
setResponseFieldWidthGlobal: (width) => {
|
390
395
|
figOverImageCommonComponent.responseFieldWidthInputField()
|
391
396
|
.eq(0)
|
392
397
|
.clear()
|
393
|
-
.type(width
|
398
|
+
.type(`${width}`, { delay: 0 })
|
394
399
|
.should('have.value', width)
|
395
400
|
.blur();
|
396
401
|
},
|
397
402
|
|
398
403
|
/**
|
399
404
|
* Set the height of a response field in the additional settings for all response areas.
|
400
|
-
* @param {
|
405
|
+
* @param {number} height - The height value to set for the response field.
|
401
406
|
*/
|
402
407
|
setResponseFieldHeightGlobal: (height) => {
|
403
408
|
figOverImageCommonComponent.responseFieldHeightInputField()
|
404
409
|
.eq(0)
|
405
410
|
.clear()
|
406
|
-
.type(height
|
411
|
+
.type(`${height}`, { delay: 0 })
|
407
412
|
.should('have.value', height)
|
408
413
|
.blur();
|
409
414
|
},
|
@@ -520,7 +525,7 @@ const steps = {
|
|
520
525
|
/**
|
521
526
|
* Set the width value in a response accordion.
|
522
527
|
* @param {number} responseAccordionIndex - The index of the response accordion to set width value in.
|
523
|
-
* @param {
|
528
|
+
* @param {number} value - The width value to set.
|
524
529
|
*/
|
525
530
|
setWidthInResponseAccordion: (responseAccordionIndex, value) => {
|
526
531
|
figOverImageCommonComponent.responseAccordionWrapper()
|
@@ -528,7 +533,7 @@ const steps = {
|
|
528
533
|
.within(() => {
|
529
534
|
figOverImageCommonComponent.responseFieldWidthInputField()
|
530
535
|
.clear()
|
531
|
-
.type(value)
|
536
|
+
.type(`${value}`)
|
532
537
|
.should('have.value', value);
|
533
538
|
});
|
534
539
|
},
|
@@ -536,7 +541,7 @@ const steps = {
|
|
536
541
|
/**
|
537
542
|
* Set the height value in a response accordion.
|
538
543
|
* @param {number} responseAccordionIndex - The index of the response accordion to set height value in.
|
539
|
-
* @param {
|
544
|
+
* @param {number} value - The height value to set.
|
540
545
|
*/
|
541
546
|
setHeightInResponseAccordion: (responseAccordionIndex, value) => {
|
542
547
|
figOverImageCommonComponent.responseAccordionWrapper()
|
@@ -544,7 +549,7 @@ const steps = {
|
|
544
549
|
.within(() => {
|
545
550
|
figOverImageCommonComponent.responseFieldHeightInputField()
|
546
551
|
.clear()
|
547
|
-
.type(value)
|
552
|
+
.type(`${value}`)
|
548
553
|
.should('have.value', value);
|
549
554
|
});
|
550
555
|
},
|
@@ -655,6 +660,70 @@ const steps = {
|
|
655
660
|
});
|
656
661
|
},
|
657
662
|
|
663
|
+
/**
|
664
|
+
* @param {number} dropdownOptionIndex of the pointer dropdown option
|
665
|
+
* @param {number} responseIndex index of the reponse container
|
666
|
+
* @description this function verifies the pointer position of response accordion
|
667
|
+
*/
|
668
|
+
verifyResponseContainerPointerInImageSection: (responseIndex, dropdownOptionIndex) => {
|
669
|
+
figOverImageCommonComponent.responseContainerCloseButton()
|
670
|
+
.eq(responseIndex)
|
671
|
+
.should('have.attr', 'pointer', dropdownOptionIndex + 1)
|
672
|
+
},
|
673
|
+
|
674
|
+
/**
|
675
|
+
* @param {number} responseAccordionIndex index of the response accordion
|
676
|
+
* @param {string} dropdownOption aria-label of the dropdown option
|
677
|
+
* @description this function selects the dropdown option from response accordion
|
678
|
+
*/
|
679
|
+
selectOptionFromPointerDropdownResponseAccordion: (responseAccordionIndex, dropdownOption) => {
|
680
|
+
figOverImageCommonComponent.responseAccordionWrapper()
|
681
|
+
.eq(responseAccordionIndex)
|
682
|
+
.within(() => {
|
683
|
+
figOverImageCommonComponent.pointerDropdown()
|
684
|
+
.click();
|
685
|
+
figOverImageCommonComponent.pointerDropdownListOptions(dropdownOption)
|
686
|
+
.click();
|
687
|
+
figOverImageCommonComponent.pointerDropdown()
|
688
|
+
.should('have.text', dropdownOption);
|
689
|
+
});
|
690
|
+
},
|
691
|
+
|
692
|
+
/**
|
693
|
+
* @param {string} dropdownOption aria-label of the dropdown option
|
694
|
+
* @description this function selects the dropdown option from response accordion
|
695
|
+
*/
|
696
|
+
selectOptionFromPointerDropdownGlobal: (dropdownOption) => {
|
697
|
+
figOverImageCommonComponent.pointerDropdown()
|
698
|
+
.eq(0)
|
699
|
+
.click();
|
700
|
+
figOverImageCommonComponent.pointerDropdownListOptions(dropdownOption)
|
701
|
+
.click();
|
702
|
+
figOverImageCommonComponent.pointerDropdown()
|
703
|
+
.eq(0)
|
704
|
+
.should('have.text', dropdownOption);
|
705
|
+
},
|
706
|
+
|
707
|
+
expandPointerDropdownGlobal: () => {
|
708
|
+
figOverImageCommonComponent.pointerDropdown()
|
709
|
+
.eq(0)
|
710
|
+
.click();
|
711
|
+
utilities.verifyElementVisibilityState(figOverImageCommonComponent.pointerDropdownListOptions(), 'visible');
|
712
|
+
},
|
713
|
+
|
714
|
+
/**
|
715
|
+
* @param {number} responseAccordionIndex index of the response accordion
|
716
|
+
* @description this function expands the pointer dropdown in response accordion
|
717
|
+
*/
|
718
|
+
expandPointerDropdownResponseAccordion: (responseAccordionIndex) => {
|
719
|
+
figOverImageCommonComponent.responseAccordionWrapper()
|
720
|
+
.eq(responseAccordionIndex)
|
721
|
+
.within(() => {
|
722
|
+
figOverImageCommonComponent.pointerDropdown()
|
723
|
+
.click();
|
724
|
+
utilities.verifyElementVisibilityState(figOverImageCommonComponent.pointerDropdownListOptions(), 'visible');
|
725
|
+
});
|
726
|
+
},
|
658
727
|
|
659
728
|
verifyDisplayAnswerNumerationToStudentsCheckboxNotChecked: () => {
|
660
729
|
figOverImageCommonComponent.displayAnswerNumerationToStudentsCheckbox()
|
@@ -665,6 +734,40 @@ const steps = {
|
|
665
734
|
figOverImageCommonComponent.displayAnswerNumerationToStudentsCheckbox()
|
666
735
|
.click()
|
667
736
|
.should('be.checked');
|
737
|
+
},
|
738
|
+
|
739
|
+
verifyImageSectionErrorMessage: () => {
|
740
|
+
figOverImageCommonComponent.uploadImageSectionWrapper()
|
741
|
+
.within(() => {
|
742
|
+
commonComponents.errorMessage()
|
743
|
+
.should('have.text', 'Error: image is required.')
|
744
|
+
.and('be.visible');
|
745
|
+
});
|
746
|
+
},
|
747
|
+
|
748
|
+
verifyImageSectionErrorMessageNotExists: () => {
|
749
|
+
figOverImageCommonComponent.uploadImageSectionWrapper()
|
750
|
+
.within(() => {
|
751
|
+
commonComponents.errorMessage()
|
752
|
+
.should('not.exist');
|
753
|
+
});
|
754
|
+
},
|
755
|
+
|
756
|
+
verifyMinimumOneResponseContainerIsRequiredErrorMessage: () => {
|
757
|
+
figOverImageCommonComponent.imageSectionContentsWrapper()
|
758
|
+
.within(() => {
|
759
|
+
commonComponents.errorMessage()
|
760
|
+
.should('have.text', 'Error: Minimum one response container is required.')
|
761
|
+
.and('be.visible');
|
762
|
+
});
|
763
|
+
},
|
764
|
+
|
765
|
+
verifyMinimumOneResponseContainerIsRequiredErrorMessageNotExists: () => {
|
766
|
+
figOverImageCommonComponent.imageSectionContentsWrapper()
|
767
|
+
.within(() => {
|
768
|
+
commonComponents.errorMessage()
|
769
|
+
.should('not.exist');
|
770
|
+
});
|
668
771
|
}
|
669
772
|
}
|
670
773
|
|
@@ -914,6 +1017,91 @@ const tests = {
|
|
914
1017
|
createQuestionBasePage.steps.switchToPreviewTab();
|
915
1018
|
figOverImageCommonComponent.steps.verifyImageWidthInPreviewTab(250);
|
916
1019
|
});
|
1020
|
+
},
|
1021
|
+
|
1022
|
+
verifyPointerDropdownContentsResponseAccordion: () => {
|
1023
|
+
it('Response accordion \'Pointer\' label and dropdown should be displayed and by default \'Left\' option should be selected', () => {
|
1024
|
+
figOverImageCommonComponent.responseAccordionWrapper()
|
1025
|
+
.eq(0)
|
1026
|
+
.within(() => {
|
1027
|
+
utilities.verifyInnerText(figOverImageCommonComponent.pointerLabel(), 'Pointer');
|
1028
|
+
utilities.verifyElementVisibilityState(figOverImageCommonComponent.pointerLabel(), 'visible');
|
1029
|
+
utilities.verifyInnerText(figOverImageCommonComponent.pointerDropdown(), 'Left');
|
1030
|
+
utilities.verifyElementVisibilityState(figOverImageCommonComponent.pointerDropdown(), 'visible');
|
1031
|
+
})
|
1032
|
+
});
|
1033
|
+
|
1034
|
+
it(`Clicking on Pointer dropdown should open a list of 6 options - ${pointerDropdownList}`, () => {
|
1035
|
+
figOverImageCommonComponent.steps.expandPointerDropdownResponseAccordion(0);
|
1036
|
+
pointerDropdownList.forEach((option) => {
|
1037
|
+
figOverImageCommonComponent.pointerDropdownListOptions(option)
|
1038
|
+
.verifyInnerText(option);
|
1039
|
+
utilities.verifyInnerText(figOverImageCommonComponent.pointerDropdownListOptions(option), `${option}`);
|
1040
|
+
});
|
1041
|
+
cy.get('body')
|
1042
|
+
.click();
|
1043
|
+
});
|
1044
|
+
},
|
1045
|
+
|
1046
|
+
verifyPointerDropdownContentsGlobal: () => {
|
1047
|
+
it('\'Pointer\' label and dropdown should be displayed and by default \'Left\' option should be selected', () => {
|
1048
|
+
utilities.verifyInnerText(figOverImageCommonComponent.pointerLabel(), 'Pointer');
|
1049
|
+
utilities.verifyElementVisibilityState(figOverImageCommonComponent.pointerLabel(), 'visible');
|
1050
|
+
utilities.verifyInnerText(figOverImageCommonComponent.pointerDropdown(), 'Left');
|
1051
|
+
utilities.verifyElementVisibilityState(figOverImageCommonComponent.pointerDropdown(), 'visible');
|
1052
|
+
});
|
1053
|
+
|
1054
|
+
it('CSS of \'Pointer\' dropdown', { tags: 'css' }, () => {
|
1055
|
+
utilities.verifyCSS(figOverImageCommonComponent.pointerLabel(), {
|
1056
|
+
'color': css.color.labels,
|
1057
|
+
'font-size': css.fontSize.normal,
|
1058
|
+
'font-weight': css.fontWeight.semibold
|
1059
|
+
});
|
1060
|
+
utilities.verifyCSS(figOverImageCommonComponent.pointerDropdown(), {
|
1061
|
+
'color': css.color.liText,
|
1062
|
+
'font-size': css.fontSize.default,
|
1063
|
+
'font-weight': css.fontWeight.regular
|
1064
|
+
});
|
1065
|
+
});
|
1066
|
+
|
1067
|
+
// Note: a11y is covered for the entire additional settings section
|
1068
|
+
|
1069
|
+
it(`Clicking on Pointer dropdown should open a a list of 6 options - ${pointerDropdownList}`, () => {
|
1070
|
+
figOverImageCommonComponent.steps.expandPointerDropdownGlobal();
|
1071
|
+
pointerDropdownList.forEach((option) => {
|
1072
|
+
figOverImageCommonComponent.pointerDropdownListOptions(option)
|
1073
|
+
.verifyInnerText(option);
|
1074
|
+
utilities.verifyInnerText(figOverImageCommonComponent.pointerDropdownListOptions(option), `${option}`);
|
1075
|
+
});
|
1076
|
+
cy.get('body')
|
1077
|
+
.click();
|
1078
|
+
});
|
1079
|
+
|
1080
|
+
it('CSS of Pointer dropdown in Active state', { tags: 'css' }, () => {
|
1081
|
+
cy.log('Pre step: Clicking on Pointer dropdown')
|
1082
|
+
figOverImageCommonComponent.steps.expandPointerDropdownGlobal();
|
1083
|
+
utilities.verifyCSS(figOverImageCommonComponent.pointerDropdownListOptions('Left'), {
|
1084
|
+
'color': css.color.liText,
|
1085
|
+
'font-size': css.fontSize.default,
|
1086
|
+
'font-weight': css.fontWeight.regular,
|
1087
|
+
'background-color': css.color.liTextSelectedBg
|
1088
|
+
});
|
1089
|
+
utilities.verifyCSS(figOverImageCommonComponent.pointerDropdownListOptions('Right'), {
|
1090
|
+
'background-color': css.color.transparent
|
1091
|
+
});
|
1092
|
+
cy.log('Post step: Closing the Pointer dropdown')
|
1093
|
+
cy.get('body')
|
1094
|
+
.click();
|
1095
|
+
});
|
1096
|
+
|
1097
|
+
it('Accessibility of Pointer dropdown in active state', { tags: 'a11y' }, () => {
|
1098
|
+
cy.log('Pre step: Clicking on Pointer dropdown')
|
1099
|
+
figOverImageCommonComponent.steps.expandPointerDropdownGlobal();
|
1100
|
+
cy.checkAccessibility(figOverImageCommonComponent.pointerDropdownListOptions());
|
1101
|
+
cy.log('Post step: Closing the Pointer dropdown')
|
1102
|
+
cy.get('body')
|
1103
|
+
.click();
|
1104
|
+
});
|
917
1105
|
}
|
918
1106
|
}
|
919
1107
|
|
@@ -39,7 +39,7 @@ const selectors = {
|
|
39
39
|
previewTabResponseWrapper: () => cy.get('.cloze-with-text-answer-status-response-preview-wrapper'),
|
40
40
|
previewTabCorrectAnswerContainer: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectAnswerWrapper"]'),
|
41
41
|
previewTabCorrectAnswerLabel: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectAnswerLabel"]'),
|
42
|
-
previewTabCorrectAnswerResponseWrapper: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectResponseWrapper"] [aria-label*="
|
42
|
+
previewTabCorrectAnswerResponseWrapper: () => cy.get('[class*="ClozeWithTextResponsestyles__CorrectResponseWrapper"] [aria-label*="Add answer for response"]'),
|
43
43
|
previewTabCorrectAnswerResponseNumerationWrapper: () => fillInTheGapsCommonComponents.previewTabCorrectAnswerContainer().find('.response-input-adornment') //Verify once numeration is implemented in all FIG questions
|
44
44
|
}
|
45
45
|
|
@@ -415,7 +415,7 @@ const tests = {
|
|
415
415
|
.should('have.value', '5.7');
|
416
416
|
});
|
417
417
|
|
418
|
-
it('When user has entered points in \'All or nothing\' scoring type and switches to \'Partial different weights\' scoring type, then the points
|
418
|
+
it('When user has entered points in \'All or nothing\' scoring type and switches to \'Partial different weights\' scoring type, then the points allocated should get equally divided between each correct response', () => {
|
419
419
|
scoringSectionBase.pointsInputField()
|
420
420
|
.clear()
|
421
421
|
.type('9');
|
@@ -424,7 +424,7 @@ const tests = {
|
|
424
424
|
scoringSectionBase.pointsInputField()
|
425
425
|
.each(($element) => {
|
426
426
|
cy.wrap($element)
|
427
|
-
.should('have.value', '');
|
427
|
+
.should('have.value', '4.5');
|
428
428
|
});
|
429
429
|
});
|
430
430
|
},
|
@@ -543,7 +543,7 @@ const tests = {
|
|
543
543
|
});
|
544
544
|
|
545
545
|
it('Accessibility of \'Response\' accordion', { tags: 'a11y' }, () => {
|
546
|
-
cy.checkAccessibility(fillInTheGapsCommonComponents.responseAccordionWrapper().parents('.
|
546
|
+
cy.checkAccessibility(fillInTheGapsCommonComponents.responseAccordionWrapper().parents('.ngie-accordion-detail'));
|
547
547
|
});
|
548
548
|
},
|
549
549
|
|
@@ -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('
|
23
|
-
responseFieldWrapperPreviewTab: () => cy.get('
|
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*="
|
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'),
|