itemengine-cypress-automation 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. package/.build_wna +4 -0
  2. package/README.md +3 -0
  3. package/currents.config.js +6 -0
  4. package/cypress/API/createItem/toggleItemMode.js +15 -0
  5. package/cypress/config-files/ildev.json +15 -0
  6. package/cypress/config-files/ilprod.json +15 -0
  7. package/cypress/config-files/ilqa.json +15 -0
  8. package/cypress/config-files/ilstage.json +15 -0
  9. package/cypress/e2e/ILC/sorry-cypress-test/spec1.js +18 -0
  10. package/cypress/e2e/ILC/sorry-cypress-test/spec2.js +18 -0
  11. package/cypress/e2e/ILC/sorry-cypress-test/spec3.js +18 -0
  12. package/cypress/fixtures/accessibilityConfig.json +6 -0
  13. package/cypress/fixtures/constants.js +18 -0
  14. package/cypress/fixtures/equationEditorCategoriesAndSymbols .js +2271 -0
  15. package/cypress/fixtures/specialAndMathCharacters.js +118 -0
  16. package/cypress/fixtures/theme/ilc.json +150 -0
  17. package/cypress/fixtures/theme/ngie.json +26 -0
  18. package/cypress/fixtures/uploads/20mbFile.png +0 -0
  19. package/cypress/fixtures/uploads/80mbFile.pdf +0 -0
  20. package/cypress/fixtures/uploads/highlightImage.jpg +0 -0
  21. package/cypress/fixtures/uploads/image.png +0 -0
  22. package/cypress/fixtures/uploads/sample.aac +0 -0
  23. package/cypress/fixtures/uploads/sample.accdb +0 -0
  24. package/cypress/fixtures/uploads/sample.csv +100 -0
  25. package/cypress/fixtures/uploads/sample.doc +0 -0
  26. package/cypress/fixtures/uploads/sample.gif +0 -0
  27. package/cypress/fixtures/uploads/sample.heic +0 -0
  28. package/cypress/fixtures/uploads/sample.heif +0 -0
  29. package/cypress/fixtures/uploads/sample.hevc +0 -0
  30. package/cypress/fixtures/uploads/sample.jpeg +0 -0
  31. package/cypress/fixtures/uploads/sample.jpg +0 -0
  32. package/cypress/fixtures/uploads/sample.mp3 +0 -0
  33. package/cypress/fixtures/uploads/sample.mp4 +0 -0
  34. package/cypress/fixtures/uploads/sample.pdf +0 -0
  35. package/cypress/fixtures/uploads/sample.ppt +0 -0
  36. package/cypress/fixtures/uploads/sample.pub +0 -0
  37. package/cypress/fixtures/uploads/sample.rtf +7902 -0
  38. package/cypress/fixtures/uploads/sample.svg +10 -0
  39. package/cypress/fixtures/uploads/sample.txt +1 -0
  40. package/cypress/fixtures/uploads/sample.wav +0 -0
  41. package/cypress/fixtures/uploads/sample.xlsx +0 -0
  42. package/cypress/fixtures/uploads/sample.xps +0 -0
  43. package/cypress/fixtures/uploads/sample.zip +0 -0
  44. package/cypress/fixtures/uploads/sample1.jpg +0 -0
  45. package/cypress/fixtures/uploads/sample1.mp3 +0 -0
  46. package/cypress/fixtures/uploads/sample1.zip +0 -0
  47. package/cypress/fixtures/uploads/sample10Sec.mp3 +0 -0
  48. package/cypress/fixtures/uploads/sample2.jpg +0 -0
  49. package/cypress/fixtures/uploads/sample2.mp3 +0 -0
  50. package/cypress/fixtures/uploads/sampleVirus.zip +0 -0
  51. package/cypress/pages/audioPlayerPage.js +628 -0
  52. package/cypress/pages/audioResponsePage.js +264 -0
  53. package/cypress/pages/components/additionalSettingsPanel.js +174 -0
  54. package/cypress/pages/components/answerNumerationComponent.js +109 -0
  55. package/cypress/pages/components/autoScoredAdditionalSettings.js +183 -0
  56. package/cypress/pages/components/autoScoredPreviewBase.js +94 -0
  57. package/cypress/pages/components/autoScoredScoringSection.js +195 -0
  58. package/cypress/pages/components/autoScoredScoringSectionMultipleResponsesType.js +268 -0
  59. package/cypress/pages/components/autoScoredSetCorrectAnswerSection.js +291 -0
  60. package/cypress/pages/components/ckEditorToolbar.js +64 -0
  61. package/cypress/pages/components/colorPopupComponent.js +293 -0
  62. package/cypress/pages/components/commonComponents.js +93 -0
  63. package/cypress/pages/components/componentsFlowChart/figFlowChart.png +0 -0
  64. package/cypress/pages/components/createCustomCategoryFlyout.js +138 -0
  65. package/cypress/pages/components/createQuestionBasePage.js +225 -0
  66. package/cypress/pages/components/customizeHighlightPropertiesComponent.js +318 -0
  67. package/cypress/pages/components/dragAndDropResponseOptions.js +738 -0
  68. package/cypress/pages/components/dragAndDropSetCorrectAnswerCheckboxComponents.js +124 -0
  69. package/cypress/pages/components/draggableOptionsContainer.js +857 -0
  70. package/cypress/pages/components/editCategoryFlyout.js +40 -0
  71. package/cypress/pages/components/equationEditorFlyout.js +158 -0
  72. package/cypress/pages/components/essayResponseCommonComponents.js +86 -0
  73. package/cypress/pages/components/figOverImageCommonComponent.js +924 -0
  74. package/cypress/pages/components/fillInTheGapsCommonComponents.js +687 -0
  75. package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +442 -0
  76. package/cypress/pages/components/fillInTheGapsTextCommonComponent.js +884 -0
  77. package/cypress/pages/components/gridCommonComponents.js +951 -0
  78. package/cypress/pages/components/index.js +38 -0
  79. package/cypress/pages/components/listSortingAndOrderingBase.js +401 -0
  80. package/cypress/pages/components/maximumRecorderLengthComponent.js +116 -0
  81. package/cypress/pages/components/mcqAdditionalSettingsBase.js +390 -0
  82. package/cypress/pages/components/mcqOptionsComponent.js +263 -0
  83. package/cypress/pages/components/mcqPreviewComponents.js +78 -0
  84. package/cypress/pages/components/mcqQuestionCommonComponents.js +265 -0
  85. package/cypress/pages/components/mcqScoringComponent.js +120 -0
  86. package/cypress/pages/components/mcqSetCorrectAnswerSection.js +143 -0
  87. package/cypress/pages/components/optionsWrapperComponent.js +221 -0
  88. package/cypress/pages/components/playbackControlsBaseComponent.js +163 -0
  89. package/cypress/pages/components/previewScoringAndShowCorrectAnswerComponent.js +90 -0
  90. package/cypress/pages/components/questionInstructionsComponent.js +112 -0
  91. package/cypress/pages/components/scoringSectionBase.js +308 -0
  92. package/cypress/pages/components/setPointsPopupBase.js +79 -0
  93. package/cypress/pages/components/specialAndCustomSpecialCharactersComponent.js +79 -0
  94. package/cypress/pages/components/specialCharactersFlyoutComponent.js +58 -0
  95. package/cypress/pages/components/studentResponseAreaAndLayoutComponent.js +28 -0
  96. package/cypress/pages/components/uploadImageSectionComponent.js +594 -0
  97. package/cypress/pages/createItemPage.js +28 -0
  98. package/cypress/pages/dialogBoxBase.js +111 -0
  99. package/cypress/pages/dragAndDropIntoCategoriesAllOrNothingScoring.js +1161 -0
  100. package/cypress/pages/dragAndDropIntoCategoriesCellsScoring.js +1559 -0
  101. package/cypress/pages/dragAndDropIntoCategoriesPage.js +1556 -0
  102. package/cypress/pages/dragAndDropIntoCategoriesResponseScoring.js +1396 -0
  103. package/cypress/pages/essayResponseBasicPage.js +57 -0
  104. package/cypress/pages/essayResponseMathPage.js +47 -0
  105. package/cypress/pages/essayResponsePage.js +385 -0
  106. package/cypress/pages/feedbackScalePage.js +698 -0
  107. package/cypress/pages/fillInTheGapsDragAndDropPage.js +742 -0
  108. package/cypress/pages/fillInTheGapsDropdownPage.js +99 -0
  109. package/cypress/pages/fillInTheGapsOverImageDropdownPage.js +232 -0
  110. package/cypress/pages/fillInTheGapsOverImageTextPage.js +135 -0
  111. package/cypress/pages/fillInTheGapsScoring.js +5974 -0
  112. package/cypress/pages/fillInTheGapsSetCorrectAnswerSection.js +260 -0
  113. package/cypress/pages/fillInTheGapsTextPage.js +225 -0
  114. package/cypress/pages/highlightImagePage.js +1316 -0
  115. package/cypress/pages/highlightPage.js +870 -0
  116. package/cypress/pages/index.js +30 -0
  117. package/cypress/pages/listMatchingPage.js +1330 -0
  118. package/cypress/pages/listMatchingScoring.js +2635 -0
  119. package/cypress/pages/listOrderingPage.js +751 -0
  120. package/cypress/pages/listSortingPage.js +1201 -0
  121. package/cypress/pages/multipleSelectionGridPage.js +359 -0
  122. package/cypress/pages/multipleSelectionPage.js +88 -0
  123. package/cypress/pages/passagePage.js +426 -0
  124. package/cypress/pages/readingRulerPage.js +302 -0
  125. package/cypress/pages/selectQuestionResourceToolPage.js +64 -0
  126. package/cypress/pages/shortTextResponsePage.js +197 -0
  127. package/cypress/pages/singleSelectionGridPage.js +370 -0
  128. package/cypress/pages/singleSelectionPage.js +65 -0
  129. package/cypress/pages/uploadResponsePage.js +110 -0
  130. package/cypress/pages/videoResponsePage.js +375 -0
  131. package/cypress/support/commands.js +140 -0
  132. package/cypress/support/e2e.js +14 -0
  133. package/cypress/support/helpers/abortEarly.js +19 -0
  134. package/cypress/support/helpers/accessibility.js +34 -0
  135. package/cypress/support/helpers/cypressUtilities.js +64 -0
  136. package/cypress/support/helpers/localStorage.js +13 -0
  137. package/cypress/support/helpers/selectText.js +77 -0
  138. package/cypress/support/helpers/utilities.js +126 -0
  139. package/cypress.config.js +76 -0
  140. package/il.yaml +14 -0
  141. package/language +1 -0
  142. package/package.json +26 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Referenced from: https://gist.github.com/erquhart/37bf2d938ab594058e0572ed17d3837a
3
+ * // Types "foo" and then selects "fo"
4
+ * cy.get('input')
5
+ * .type('foo')
6
+ * .selectText('fo')
7
+ *
8
+ * // Types "foo", "bar", "baz", and "qux" on separate lines, then selects "foo", "bar", and "baz"
9
+ * cy.get('textarea')
10
+ * .type('foo{enter}bar{enter}baz{enter}qux{enter}')
11
+ * .selectText('foo', 'baz')
12
+ *
13
+ * // `selectText` can alternatively target starting and ending nodes using query strings,
14
+ * // plus specific offsets. The queries are processed via `Element.querySelector`.
15
+ * cy.get('body')
16
+ * .selectText({
17
+ * anchorQuery: 'ul > li > p', // required
18
+ * anchorOffset: 2 // default: 0
19
+ * focusQuery: 'ul > li > p:last-child', // default: anchorQuery
20
+ * focusOffset: 0 // default: 0
21
+ * })
22
+ */
23
+
24
+ // Low level command reused by `selectText` and low level command `setCursor`
25
+ Cypress.Commands.add('selection', { prevSubject: true }, (subject, fn) => {
26
+ cy.wrap(subject)
27
+ .trigger('mousedown')
28
+ .then(fn)
29
+ .trigger('mouseup');
30
+
31
+ cy.document().trigger('selectionchange');
32
+ return cy.wrap(subject);
33
+ });
34
+
35
+ Cypress.Commands.add('selectText', { prevSubject: true }, (subject, query, endQuery) => {
36
+ return cy.wrap(subject)
37
+ .selection($el => {
38
+ if (typeof query === 'string') {
39
+ const anchorNode = getTextNode($el[0], query);
40
+ const focusNode = endQuery ? getTextNode($el[0], endQuery) : anchorNode;
41
+ const anchorOffset = anchorNode.wholeText.indexOf(query);
42
+ const focusOffset = endQuery ?
43
+ focusNode.wholeText.indexOf(endQuery) + endQuery.length :
44
+ anchorOffset + query.length;
45
+ setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);
46
+ } else if (typeof query === 'object') {
47
+ const el = $el[0];
48
+ const anchorNode = getTextNode(el.querySelector(query.anchorQuery));
49
+ const anchorOffset = query.anchorOffset || 0;
50
+ const focusNode = query.focusQuery ? getTextNode(el.querySelector(query.focusQuery)) : anchorNode;
51
+ const focusOffset = query.focusOffset || 0;
52
+ setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);
53
+ }
54
+ });
55
+ });
56
+
57
+ // Helper functions
58
+ function getTextNode(el, match) {
59
+ const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
60
+ if (!match) {
61
+ return walk.nextNode();
62
+ }
63
+
64
+ const nodes = [];
65
+ let node;
66
+ while (node = walk.nextNode()) {
67
+ if (node.wholeText.includes(match)) {
68
+ return node;
69
+ }
70
+ }
71
+ }
72
+
73
+ function setBaseAndExtent(...args) {
74
+ const document = args[0].ownerDocument;
75
+ document.getSelection().removeAllRanges();
76
+ document.getSelection().setBaseAndExtent(...args);
77
+ }
@@ -0,0 +1,126 @@
1
+ const utilities = {
2
+ /**
3
+ * @description verify the inner text of an element
4
+ * @param {*} selector cy.get selector
5
+ * @param {string} text inner text string
6
+ * @returns null
7
+ */
8
+ verifyInnerText: (selector, text) => {
9
+ selector.should(($element) => {
10
+ expect($element.get(0).innerText).to.deep.eq(text);
11
+ });
12
+ return null;
13
+ },
14
+
15
+ /**
16
+ * @description verify the text content of an element
17
+ * @param {*} selector cy.get selector
18
+ * @param {string} text text content string
19
+ * @returns null
20
+ */
21
+ verifyTextContent: (selector, text) => {
22
+ selector.should('have.text', text);
23
+ return null;
24
+ },
25
+
26
+ /**
27
+ * @description get the nth element with the same selector, needs to be stored in appropriate named variables and passed into the methods
28
+ * @param {*} selector cy.get selector
29
+ * @param {number} index index of the nth element
30
+ * @returns cypress cy.get selector
31
+ */
32
+ getNthElement: (selector, index) => {
33
+ return selector.eq(index);
34
+ },
35
+
36
+ /**
37
+ * @param {*} selector cy.get selector
38
+ * @param {number} count count of the element
39
+ */
40
+ verifyElementCount: (selector, count) => {
41
+ selector.should('have.length', count);
42
+ },
43
+
44
+ /**
45
+ * @description verify multiple css properties of an element
46
+ * @param {*} selector cy.get selector
47
+ * @param {object} object key value pairs of the css property and it's value
48
+ * @example utilities.verifyCSS(fillInTheGapsTextPage.questionInputField(), {
49
+ 'color': css.color.text,
50
+ 'font-size': css.fontSize.default,
51
+ 'font-weight': css.fontWeight.regular
52
+ })
53
+ */
54
+ verifyCSS: (selector, object) => {
55
+ Object.keys(object).forEach(key => {
56
+ selector.should('have.css', key, object[key])
57
+ });
58
+ },
59
+
60
+ /**
61
+ * @description verify multiple states of an element- 'visible'| 'hidden' | 'exist' | 'notExist'
62
+ * @param {*} selector cy.get selector
63
+ * @param {string} state state 'visible'| 'hidden' | 'exist' | 'notExist'
64
+ */
65
+ verifyElementVisibilityState: (selector, state) => {
66
+ switch (state) {
67
+ case 'visible':
68
+ selector.should('be.visible');
69
+ break;
70
+ case 'hidden':
71
+ selector.should('not.be.visible');
72
+ break;
73
+ case 'exist':
74
+ selector.should('exist');
75
+ break;
76
+ case 'notExist':
77
+ selector.should('not.exist');
78
+ break;
79
+ default:
80
+ throw new Error('invalid state string');
81
+ }
82
+ },
83
+
84
+ /**
85
+ * @description scroll element into view
86
+ * @param {*} selector cy.get selector
87
+ */
88
+ scrollIntoView: (selector) => {
89
+ selector.scrollIntoView()
90
+ },
91
+
92
+ /**
93
+ * @description hover over an element
94
+ * @param {*} selector cy.get selector
95
+ */
96
+ hoverOverElement: (selector) => {
97
+ selector.realHover();
98
+ },
99
+
100
+ hoverAwayFromElement: () => {
101
+ cy.get('body')
102
+ .realHover({ position: 'topRight' });
103
+ },
104
+
105
+ /**
106
+ * @description trigger a mouseover event on an element
107
+ * @param {*} selector cy.get selector
108
+ */
109
+ triggerMouseover: (selector) => {
110
+ selector.trigger('mouseover');
111
+ },
112
+
113
+ /**
114
+ * @description trigger a mouseout event on an element
115
+ * @param {*} selector cy.get selector
116
+ */
117
+ triggerMouseout: (selector) => {
118
+ selector.trigger('mouseout');
119
+ }
120
+ }
121
+
122
+ export default utilities
123
+
124
+ //verifypseudoclass css, within
125
+ // const
126
+ // utilities.verifyCSS()
@@ -0,0 +1,76 @@
1
+ const { defineConfig } = require('cypress')
2
+ const fs = require('fs-extra');
3
+ const path = require('path');
4
+ const { isFileExist } = require('cy-verify-downloads');
5
+ const { cloudPlugin } = require("cypress-cloud/plugin");
6
+
7
+ async function getConfigurationByFile(file, theme) {
8
+ const pathToConfigFile = path.resolve(
9
+ '..',
10
+ 'ilc-next-gen-item-engine-ui-test-cypress/cypress/config-files',
11
+ `${file}.json`
12
+ );
13
+ const pathToThemeFile = path.resolve(
14
+ '..',
15
+ 'ilc-next-gen-item-engine-ui-test-cypress/cypress/fixtures/theme',
16
+ `${theme}.json`
17
+ );
18
+ const envVariables = await fs.readJson(pathToConfigFile);
19
+ envVariables.env.css = await fs.readJson(pathToThemeFile);
20
+ return envVariables;
21
+ }
22
+
23
+ module.exports = defineConfig({
24
+ reporter: 'cypress-mochawesome-reporter',
25
+ reporterOptions: {
26
+ reportDir: 'cypress/reports',
27
+ charts: true,
28
+ reportPageTitle: 'My Test Suite',
29
+ embeddedScreenshots: true,
30
+ inlineAssets: true,
31
+ html: true,
32
+ json: false,
33
+ },
34
+ screenshotOnRunFailure: true,
35
+ screenshotsFolder: 'cypress/assets',
36
+ requestTimeout: 20000,
37
+ responseTimeout: 120000,
38
+ defaultCommandTimeout: 30000,
39
+ pageLoadTimeout: 120000,
40
+ viewportWidth: 1400,
41
+ viewportHeight: 1025,
42
+ trashAssetsBeforeRuns: true,
43
+ chromeWebSecurity: true,
44
+ video: false,
45
+ watchForFileChanges: false,
46
+ scrollBehavior: 'center',
47
+ blockHosts: [
48
+ 'www.google-analytics.com',
49
+ '*google-analytics.com',
50
+ 'www.hotjar.com',
51
+ '*hotjar.com',
52
+ ],
53
+ e2e: {
54
+ setupNodeEvents(on, config) {
55
+ const file = config.env.fileConfig || 'ilstage';
56
+ const theme = config.env.theme || 'ilc';
57
+ on('task', {
58
+ resetShouldSkipFlag() {
59
+ shouldSkip = false;
60
+ return null;
61
+ },
62
+ shouldSkip(value) {
63
+ if (value != null) shouldSkip = value;
64
+ return shouldSkip;
65
+ },
66
+ isFileExist
67
+ });
68
+ require('cypress-mochawesome-reporter/plugin')(on);
69
+ require('@cypress/grep/src/plugin')()
70
+ return cloudPlugin(on, config), getConfigurationByFile(file, theme);
71
+ },
72
+ excludeSpecPattern: ['**/__snapshots__/*', '**/__image_snapshots__/*'],
73
+ specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
74
+ testIsolation: false,
75
+ },
76
+ })
package/il.yaml ADDED
@@ -0,0 +1,14 @@
1
+ # yaml-language-server: $schema=https://schema-validator.imaginelearning.tech/il.yaml/v2.0.json
2
+
3
+ meta:
4
+ owner: undeclared # Set this to the squad that maintains this repo
5
+ trackingId: 87b2338d-3ea4-45cc-bd63-73d1f4a73a6c
6
+
7
+ # otk:
8
+
9
+ # catalog:
10
+
11
+ spartanzBot:
12
+ fileChecker:
13
+ enabled: true
14
+ comment: true
package/language ADDED
@@ -0,0 +1 @@
1
+ npm
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "itemengine-cypress-automation",
3
+ "version": "1.0.2",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "build": "echo 'building'",
8
+ "test": "echo 'success'"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/ImagineLearning/itemengine-cypress-automation.git"
13
+ },
14
+ "dependencies": {
15
+ "@cypress/grep": "^3.1.5",
16
+ "axe-core": "^4.8.0",
17
+ "cy-verify-downloads": "^0.1.13",
18
+ "cypress": "^12.17.4",
19
+ "cypress-axe": "^1.5.0",
20
+ "cypress-cloud": "^1.9.6",
21
+ "cypress-file-upload": "^5.0.8",
22
+ "cypress-mochawesome-reporter": "^3.3.0",
23
+ "cypress-real-events": "^1.7.6",
24
+ "react-uuid": "^2.0.0"
25
+ }
26
+ }