itemengine-cypress-automation 1.0.329 → 1.0.331-e2eFixes4thMarch-e038ad7.0

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.
package/Dockerfile CHANGED
@@ -26,6 +26,7 @@ RUN chmod +x ./deploy/listOrderingQuestion/run.sh
26
26
  RUN chmod +x ./deploy/fillInTheGapsQuestion/run.sh
27
27
  RUN chmod +x ./deploy/resourcesAndToolsQuestion/run.sh
28
28
  RUN chmod +x ./deploy/audioResponseQuestion/run.sh
29
+ RUN chmod +x ./deploy/dataApi/run.sh
29
30
 
30
31
  RUN npm ci
31
32
 
@@ -162,36 +162,40 @@ describe('Create item page - Drag and drop into categories: Preview contents', (
162
162
  }
163
163
 
164
164
  it('CSS of preview contents', { tags: 'css' }, () => {
165
- utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 1), {
166
- 'background-color': css.color.matrixHeadingCellBg,
167
- 'border-color': `${css.color.matrixCellBorder}`
168
- });
169
- utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 6), {
170
- 'background-color': css.color.matrixSubheadingCellBg,
171
- 'border-color': `${css.color.matrixCellBorder}`
172
- });
173
- utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 9), {
174
- 'background-color': css.color.defaultBackground,
175
- 'border': `0px none ${css.color.matrixCellBorder}`
176
- });
177
- utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 1).find('.cell-label'), {
178
- 'color': css.color.text,
179
- 'font-size': css.fontSize.heading,
180
- 'font-weight': css.fontWeight.bold
181
- });
182
- utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 6).find('.cell-label'), {
183
- 'color': css.color.text,
184
- 'font-size': css.fontSize.default,
185
- 'font-weight': css.fontWeight.semibold
186
- });
187
- utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 9).find('.cell-label'), {
188
- 'color': css.color.text,
189
- 'font-size': css.fontSize.default,
190
- 'font-weight': css.fontWeight.regular
191
- });
192
165
  switch (view) {
193
166
  case 'Question preview':
194
167
  case 'Item preview':
168
+ case 'Item view':
169
+ utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 1), {
170
+ 'background-color': css.color.matrixHeadingCellBg,
171
+ 'border-color': `${css.color.matrixCellBorder}`
172
+ });
173
+ utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 6), {
174
+ 'background-color': css.color.matrixSubheadingCellBg,
175
+ 'border-color': `${css.color.matrixCellBorder}`
176
+ });
177
+ utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 9), {
178
+ 'background-color': css.color.defaultBackground,
179
+ 'border': `0px none ${css.color.matrixCellBorder}`
180
+ });
181
+ utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 1).find('.cell-label'), {
182
+ 'color': css.color.text,
183
+ 'font-size': css.fontSize.heading,
184
+ 'font-weight': css.fontWeight.bold
185
+ });
186
+ utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 6).find('.cell-label'), {
187
+ 'color': css.color.text,
188
+ 'font-size': css.fontSize.default,
189
+ 'font-weight': css.fontWeight.semibold
190
+ });
191
+ utilities.verifyCSS(utilities.getNthElement(dragAndDropIntoCategoriesPage.cellContainerPreviewTab(), 9).find('.cell-label'), {
192
+ 'color': css.color.text,
193
+ 'font-size': css.fontSize.default,
194
+ 'font-weight': css.fontWeight.regular
195
+ });
196
+ break;
197
+ case 'Question preview':
198
+ case 'Item preview':
195
199
  case 'Item view':
196
200
  case 'Student view':
197
201
  utilities.verifyCSS(dragAndDropIntoCategoriesPage.optionsContainerPreviewTab(), {
@@ -146,6 +146,7 @@ describe('Preview tab contents - primary toolbar options, secondary toolbar opti
146
146
  });
147
147
 
148
148
  it(`User should be able to attach multiple files at once among the supported file types`, () => {
149
+ drawingResponsePage.steps.resetQuestionPreview();
149
150
  drawingResponsePage.steps.selectPreviewTabToolbarOption(drawingToolbarOptionsAndAdditionalOptions.drawingToolbarOptions[5].displayName);
150
151
  drawingResponsePage.steps.uploadFile(['uploads/sample.jpg', 'uploads/sample.gif']);
151
152
  drawingResponsePage.steps.verifyInsertImageContainerNotExist();
@@ -40,7 +40,8 @@ describe('Edit item - Drawing response', () => {
40
40
  drawingResponsePage.steps.expandScoringTypeDropdown();
41
41
  drawingResponsePage.steps.selectOptionFromScoringTypeDropdown('Non scored');
42
42
  drawingResponsePage.steps.saveAQuestionAndVerifySnackbar();
43
- drawingResponsePage.steps.verifyPointInQuestionPreview(0);
43
+ //Failing due to https://weldnorthed.atlassian.net/browse/IEI-5501
44
+ //drawingResponsePage.steps.verifyPointInQuestionPreview(0);
44
45
  });
45
46
  });
46
47
  });
@@ -34,9 +34,7 @@ describe('Edit item - List ordering', () => {
34
34
 
35
35
  it('User should be able to edit options and save the question', () => {
36
36
  listOrderingPage.steps.editItem();
37
- for (let i = 0; i < options1.length; i++) {
38
- listOrderingPage.steps.editOptionInputField(i, options1[i]);
39
- }
37
+ listOrderingPage.steps.addInputToOptionsInputField(options1);
40
38
  listOrderingPage.steps.saveAQuestionAndVerifySnackbar();
41
39
  listOrderingPage.steps.verifyOptionFieldContentsInOptionsSectionQuestionPreviewTab(options1);
42
40
  });
@@ -68,7 +66,8 @@ describe('Edit item - List ordering', () => {
68
66
  listOrderingPage.steps.selectOptionFromScoringTypeDropdown('Non scored');
69
67
  listOrderingPage.steps.clickAndReorderOptionInSpecifyCorrectAnswerSection('flower', 1);
70
68
  listOrderingPage.steps.saveAQuestionAndVerifySnackbar();
71
- listOrderingPage.steps.verifyPointInQuestionPreview(0);
69
+ //Failing due to https://weldnorthed.atlassian.net/browse/IEI-5501
70
+ // listOrderingPage.steps.verifyPointInQuestionPreview(0);
72
71
  });
73
72
  });
74
73
  });
@@ -66,7 +66,8 @@ describe('Edit item - multiple Selection', () => {
66
66
  multipleSelectionPage.steps.editItem();
67
67
  multipleSelectionPage.steps.expandScoringTypeDropdown();
68
68
  multipleSelectionPage.steps.selectOptionFromScoringTypeDropdown('Non scored');
69
- multipleSelectionPage.steps.checkOptionsCheckboxInSpecifyCorrectAnswerSection(1);
69
+ //Failing due to https://weldnorthed.atlassian.net/browse/IEI-5502
70
+ //multipleSelectionPage.steps.checkOptionsCheckboxInSpecifyCorrectAnswerSection(1);
70
71
  multipleSelectionPage.steps.saveAQuestionAndVerifySnackbar();
71
72
  });
72
73
  });
@@ -75,7 +75,8 @@ describe('Edit item - multiple selection grid', () => {
75
75
  multipleSelectionGridPage.steps.editItem();
76
76
  multipleSelectionGridPage.steps.expandScoringTypeDropdown();
77
77
  multipleSelectionGridPage.steps.selectOptionFromScoringTypeDropdown('Non scored');
78
- multipleSelectionGridPage.steps.setAnswersForAllQuestionStemsInSpecifyCorrectAnswerSection([{ row: 1, column: 0 }, { row: 2, column: 1 }, { row: 3, column: 0 }, { row: 4, column: 1 }]);
78
+ //Failing due to https://weldnorthed.atlassian.net/browse/IEI-5502
79
+ // multipleSelectionGridPage.steps.setAnswersForAllQuestionStemsInSpecifyCorrectAnswerSection([{ row: 1, column: 0 }, { row: 2, column: 1 }, { row: 3, column: 0 }, { row: 4, column: 1 }]);
79
80
  multipleSelectionGridPage.steps.saveAQuestionAndVerifySnackbar();
80
81
  });
81
82
  });
@@ -28,9 +28,9 @@ describe('Create item page - Text entry math: Preview contents', () => {
28
28
  case 'Question preview':
29
29
  textEntryMathWithImagePage.steps.navigateToCreateQuestion('Text Entry Math');
30
30
  cy.barsPreLoaderWait();
31
+ textEntryMathWithImagePage.steps.addTextInQuestionInstructionsInputField('Enter the correct answer in the response field');
31
32
  textEntryMathWithImagePage.steps.addBackground();
32
33
  textEntryMathWithImagePage.steps.allotPoints(10);
33
- textEntryMathWithImagePage.steps.addTextInQuestionInstructionsInputField('Enter the correct answer in the response field');
34
34
  textEntryMathWithImagePage.steps.uploadFile('highlightImage.jpg');
35
35
  textEntryMathWithImagePage.steps.verifyImageIsUploaded();
36
36
  textEntryMathWithImagePage.steps.insertResponseArea(10);
@@ -84,8 +84,10 @@ describe('Edit item - Text selection', () => {
84
84
  textSelectionPage.steps.editItem();
85
85
  textSelectionPage.steps.expandScoringTypeDropdown();
86
86
  textSelectionPage.steps.selectOptionFromScoringTypeDropdown('Non scored');
87
+ //Need to add step on basis of https://weldnorthed.atlassian.net/browse/IEI-5502
87
88
  textSelectionPage.steps.saveAQuestionAndVerifySnackbar();
88
- textSelectionPage.steps.verifyPointInQuestionPreview(0);
89
+ //Failing due to https://weldnorthed.atlassian.net/browse/IEI-5501
90
+ //textSelectionPage.steps.verifyPointInQuestionPreview(0);
89
91
  });
90
92
  });
91
93
  });
@@ -106,11 +106,13 @@ describe('Create item page - Video response: Grading view, Correct answer view c
106
106
  it('When the user clicks on the muted volume control button then the volume setting slider should return to full volume and the volume control button should change to an unmuted state', () => {
107
107
  videoResponsePage.steps.clickOnVolumeButton();
108
108
  videoResponsePage.steps.hoverOnVolumeControlButton();
109
- videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('100');
110
- utilities.verifyElementVisibilityState(videoResponsePage.unmutedVolumeIcon(), 'visible');
109
+ // Flakiness issue, hover is not working properly
110
+ // videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('100');
111
+ // utilities.verifyElementVisibilityState(videoResponsePage.unmutedVolumeIcon(), 'visible');
111
112
  });
112
113
 
113
- it('User should be able to unmute the video by dragging the volume control higher again', () => {
114
+ // Flakiness issue, hover is not working properly
115
+ it.skip('User should be able to unmute the video by dragging the volume control higher again', () => {
114
116
  videoResponsePage.steps.setVolumeSliderForPlayback(99);
115
117
  videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('100');
116
118
  utilities.verifyElementVisibilityState(videoResponsePage.unmutedVolumeIcon(), 'visible');
@@ -0,0 +1,443 @@
1
+ import { createdAndUpdatedAtDate, questionAndResourceReferenceIds } from '../../support/helpers/createItem';
2
+ import utilities from "../../support/helpers/utilities";
3
+
4
+ describe('Fetch Responses API', () => {
5
+ var sessionData = [{}, {}, {}];
6
+ var timestamp;
7
+ let itemReferenceIdNew;
8
+ var responseIds = [];
9
+ var questionReferences = [];
10
+ let dtStartedNew;
11
+ let dtCompletedNew;
12
+ let dtStartedNew1;
13
+ let dtCompletedNew1;
14
+ let activityTemplateIdNew;
15
+ let activityTemplateIdNew1;
16
+ before(() => {
17
+ cy.loginAs('admin');
18
+ cy.createItem('FetchResponseTest1');
19
+ cy.wait(5000)
20
+ cy.visit(`${Cypress.env('itemEngineHomePage')}`);
21
+ });
22
+
23
+ after(() => {
24
+ cy.deleteItems();
25
+ cy.logout();
26
+ });
27
+
28
+ it('fetch question reference id from the api', () => {
29
+ cy.contains('Item Bank')
30
+ .click();
31
+ cy.contains('Fetch Questions')
32
+ .click();
33
+ cy.contains('Fetch Questions')
34
+ .parent()
35
+ .parent()
36
+ .should('have.class', 'Mui-selected');
37
+ cy.url()
38
+ .should('eq', Cypress.config().baseUrl + '/item-engine/data-api/item-bank/fetch-questions');
39
+ cy.get('.try-out__btn')
40
+ .click();
41
+ cy.get('textarea[class="body-param__text"]')
42
+ .clear()
43
+ .fill(`{\n "item_references": ["FetchResponseTest1"],\n "references": [],\n "types": [],\n "limit": 50,\n "sort_field": "created",\n "sort": "desc"\n}\n`);
44
+ cy.get('.execute')
45
+ .click();
46
+ cy.wait(2000);
47
+ cy.get('.loading-container')
48
+ .should('not.exist');
49
+ cy.get('pre[class="microlight"]')
50
+ .eq(1)
51
+ .invoke('text')
52
+ .then((text) => {
53
+ // Parse the JSON from the DOM
54
+ const actualResponse = JSON.parse(text);
55
+ const test1Data = actualResponse.data.FetchResponseTest1[0];
56
+ const { reference: ref1 } = test1Data;
57
+ itemReferenceIdNew = ref1;
58
+ });
59
+ });
60
+
61
+ it('Setting responses for an item using saveSessions API', () => {
62
+ cy.interceptGraphql('createOrUpdateUserSession');
63
+ cy.interceptGraphql('fetchActivity');
64
+ cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceIdNew)}`)
65
+ cy.wait('@createOrUpdateUserSession');
66
+ cy.get('[data-testid="question-instruction-element"]')
67
+ .eq(2)
68
+ .scrollIntoView()
69
+ //mcq question 1
70
+ var checkboxes = ["ChoiceA", "ChoiceB", "ChoiceC", "ChoiceD"];
71
+ cy.get('div[class*="SinglePageAssessmentQuestionsstyles__QuestionPartContainer"]')
72
+ .eq(0)
73
+ .within(() => {
74
+ checkboxes.forEach((i) => {
75
+ cy.get(`input[value="${i}"]`)
76
+ .should('not.be.checked');
77
+ });
78
+ });
79
+
80
+ //Extracting session data for activity 1 (All correct answers)
81
+ cy.get('@createOrUpdateUserSession').then((data) => {
82
+ sessionData[0]["activity_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].activityId;
83
+ sessionData[0]["user_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].userId;
84
+ sessionData[0]["session_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].sessionId;
85
+ }).then(() => {
86
+ //Extracting question reference ids
87
+ cy.get('@fetchActivity').then((resp) => {
88
+ sessionData[0]["activity_template_id"] = resp.response.body.data.fetchActivity.activityTemplateId;
89
+ var questionReferenceIds = [];
90
+ for (var i = 0; i < resp.response.body.data.fetchActivity.playerData.questions[0].questionParts.length; i++) {
91
+ questionReferenceIds.push(resp.response.body.data.fetchActivity.playerData.questions[0].questionParts[i].referenceId);
92
+ };
93
+ sessionData[0]["questionReferenceIds"] = questionReferenceIds;
94
+ sessionData[0]["question_id"] = resp.response.body.data.fetchActivity.playerData.questions[0].id;
95
+ }).then(() => {
96
+ cy.visit('/item-engine/data-api/sessions/save-sessions');
97
+ cy.get('.try-out__btn')
98
+ .click();
99
+ cy.get('textarea[class="body-param__text"]')
100
+ .clear()
101
+ .fill(`{\n "data": [\n {\n "activity_id": "${sessionData[0]["activity_id"]}",\n "activity_template_id": "${sessionData[0]["activity_template_id"]}",\n "user_id": "${sessionData[0]["user_id"]}",\n "session_id": "${sessionData[0]["session_id"]}", "scoring_options": [\n "autoscore"\n ],\n "responses": [\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][0]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceA"\n },\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceD"\n }\n ]\n },\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][1]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceA"\n },\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceD"\n }\n ]\n },\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][2]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceC"\n }\n ]\n },\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][3]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceD"\n }\n ]\n },\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][4]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "<p>Response set using set sessions API</p>\\n"\n }\n ]\n },\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][5]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "<p>Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit. Long text response to reach 100 word limit</p>\\n"\n }\n ]\n },\n {\n "question_id": "${sessionData[0]["questionReferenceIds"][6]}",\n "is_attempted": true,\n "value": [\n {\n "response_text": "{\\\"version\\\":\\\"3.6.3\\\",\\\"objects\\\":[{\\\"type\\\":\\\"image\\\",\\\"version\\\":\\\"3.6.3\\\",\\\"originX\\\":\\\"left\\\",\\\"originY\\\":\\\"top\\\",\\\"left\\\":187.42,\\\"top\\\":100.28,\\\"width\\\":1000,\\\"height\\\":992,\\\"fill\\\":\\\"rgb(0,0,0)\\\",\\\"stroke\\\":null,\\\"strokeWidth\\\":0,\\\"strokeDashArray\\\":null,\\\"strokeLineCap\\\":\\\"butt\\\",\\\"strokeDashOffset\\\":0,\\\"strokeLineJoin\\\":\\\"miter\\\",\\\"strokeMiterLimit\\\":4,\\\"scaleX\\\":0.44,\\\"scaleY\\\":0.4,\\\"angle\\\":0,\\\"flipX\\\":false,\\\"flipY\\\":false,\\\"opacity\\\":1,\\\"shadow\\\":null,\\\"visible\\\":true,\\\"clipTo\\\":null,\\\"backgroundColor\\\":\\\"\\\",\\\"fillRule\\\":\\\"nonzero\\\",\\\"paintFirst\\\":\\\"fill\\\",\\\"globalCompositeOperation\\\":\\\"source-over\\\",\\\"transformMatrix\\\":null,\\\"skewX\\\":0,\\\"skewY\\\":0,\\\"crossOrigin\\\":\\\"\\\",\\\"cropX\\\":0,\\\"cropY\\\":0,\\\"src\\\":\\\"https://twig-next-gen-sandbox-staging.zeuslearning.com/item/file?key=images/b17394b2-0684-4d4a-a4b6-b0cd93c24ba1.png\\\",\\\"filters\\\":[]}]}",\n "xml_identifier": "RESPONSE"\n }\n ]\n }\n ]\n }\n ]\n}`);
102
+ cy.get('.execute')
103
+ .click();
104
+ cy.wait(2000);
105
+ cy.get('.loading-container')
106
+ .should('not.exist');
107
+ });
108
+ });
109
+
110
+ cy.logout();
111
+ cy.loginAs('admin');
112
+ cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceIdNew)}`)
113
+ cy.wait('@createOrUpdateUserSession');
114
+ cy.get('[data-testid="question-instruction-element"]')
115
+ .eq(2)
116
+ .scrollIntoView()
117
+ //mcq question 1
118
+ var checkboxes = ["ChoiceA", "ChoiceB", "ChoiceC", "ChoiceD"];
119
+ cy.get('div[class*="SinglePageAssessmentQuestionsstyles__QuestionPartContainer"]')
120
+ .eq(0)
121
+ .within(() => {
122
+ checkboxes.forEach((i) => {
123
+ cy.get(`input[value="${i}"]`)
124
+ .should('not.be.checked');
125
+ });
126
+ });
127
+
128
+ //Extracting session data for activity 2 (Incorrect answers)
129
+ cy.get('@createOrUpdateUserSession').then((data) => {
130
+ sessionData[1]["activity_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].activityId;
131
+ sessionData[1]["user_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].userId;
132
+ sessionData[1]["session_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].sessionId;
133
+ }).then(() => {
134
+ //Extracting question reference ids
135
+ cy.get('@fetchActivity').then((resp) => {
136
+ sessionData[1]["activity_template_id"] = resp.response.body.data.fetchActivity.activityTemplateId;
137
+ var questionReferenceIds = [];
138
+ for (var i = 0; i < resp.response.body.data.fetchActivity.playerData.questions[0].questionParts.length; i++) {
139
+ questionReferenceIds.push(resp.response.body.data.fetchActivity.playerData.questions[0].questionParts[i].referenceId);
140
+ };
141
+ sessionData[1]["questionReferenceIds"] = questionReferenceIds;
142
+ sessionData[1]["question_id"] = resp.response.body.data.fetchActivity.playerData.questions[0].id;
143
+ }).then(() => {
144
+ cy.visit('/item-engine/data-api/sessions/save-sessions');
145
+ cy.get('.try-out__btn')
146
+ .click();
147
+ cy.get('textarea[class="body-param__text"]')
148
+ .clear()
149
+ .fill(`{\n "data": [\n {\n "activity_id": "${sessionData[1]["activity_id"]}",\n "activity_template_id": "${sessionData[1]["activity_template_id"]}",\n "user_id": "${sessionData[1]["user_id"]}",\n "session_id": "${sessionData[1]["session_id"]}", "scoring_options": [\n "autoscore"\n ],\n "responses": [\n {\n "question_id": "${sessionData[1]["questionReferenceIds"][0]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceB"\n },\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceC"\n }\n ]\n },\n {\n "question_id": "${sessionData[1]["questionReferenceIds"][1]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceA"\n },\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceB"\n }\n ]\n },\n {\n "question_id": "${sessionData[1]["questionReferenceIds"][2]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceC"\n }\n ]\n },\n {\n "question_id": "${sessionData[1]["questionReferenceIds"][3]}",\n "is_attempted": true,\n "value": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceD"\n }\n ]\n }\n ]\n }\n ]\n}`);
150
+ cy.get('.execute')
151
+ .click();
152
+ cy.wait(2000);
153
+ cy.get('.loading-container')
154
+ .should('not.exist');
155
+ });
156
+ });
157
+ });
158
+
159
+ describe('Response API cases', () => {
160
+ it('If the user clicks on the Responses option from the menu bar, user should be navigated to the Responses page', () => {
161
+ cy.contains('Fetch Responses')
162
+ .click();
163
+ cy.contains('Fetch Responses')
164
+ .parent()
165
+ .parent()
166
+ .should('have.class', 'Mui-selected');
167
+ cy.url()
168
+ .should('eq', Cypress.config().baseUrl + '/item-engine/data-api/sessions/fetch-responses');
169
+ });
170
+
171
+ it('Example Request should be displayed', () => {
172
+ cy.get('pre[class="body-param__example microlight"]')
173
+ .eq(0)
174
+ .should('have.text', "{\n \"activity_id\": [\n \"db27c257-8991-42cb-acec-009c7816cbfa\"\n ],\n \"user_id\": [\n \"5805c32e-51ca-472d-899a-fce07ebf3577\"\n ],\n \"session_id\": [\n \"6ba1cea0-7a3c-4af0-b72f-c2c8583668c7\"\n ],\n \"sort_field\": \"created\",\n \"sort\": \"desc\",\n \"limit\": 10,\n \"include_percentage_score\": false,\n \"organisation_id\": \"eb7d4a20-c96c-4852-9b34-7e3231016315\",\n \"next_token\": [\n 1703069388983,\n \"c765e28-fd62-0351-8385-05c165ac05d5\"\n ]\n}\n");
175
+ });
176
+
177
+ it('Example Response for status code 200 should be displayed', () => {
178
+ cy.get('td[class="response-col_status"]')
179
+ .eq(0)
180
+ .should('have.text', '200');
181
+ cy.get('.response-col_description__inner')
182
+ .eq(0)
183
+ .should('have.text', 'OK');
184
+ cy.get('pre[class="example microlight"]')
185
+ .eq(0)
186
+ .should('have.text', "{\n \"meta\": {\n \"records\": 1,\n \"status\": true,\n \"timestamp\": 1653650543869,\n \"next_token\": [\n 1703069388983,\n \"f86cfbcd-254e-4f3c-add7-d2ab2fffc2e0\"\n ]\n },\n \"data\": [\n {\n \"user_id\": \"c96eadb2-8e0b-49e7-ada2-0645734789a7\",\n \"dt_started\": null,\n \"dt_completed\": null,\n \"score\": 14,\n \"session_id\": \"80c8312d-af7d-48de-8771-5b33ff27632d\",\n \"activity_id\": \"f86cfbcd-254e-4f3c-add7-d2ab2fffc2e0\",\n \"max_score\": \"47.95\",\n \"activity_template_id\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"num_questions\": 1,\n \"responses\": [\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 10,\n \"max_score\": 10,\n \"serial_no\": 1,\n \"item_reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"question_reference\": \"d22c326-33e-352d-ad1-547a0c3e8b48\",\n \"response_id\": \"4cdda1d1-d697-4870-a000-89f7a2eedf71\",\n \"attempted\": true,\n \"automarkable\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceD\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 4,\n \"max_score\": 8,\n \"serial_no\": 2,\n \"item_reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"question_reference\": \"28c16bd-6e0-1bf-a25-24c117203f3\",\n \"response_id\": \"531d4c26-997a-487d-a820-bb300ed50fa2\",\n \"attempted\": true,\n \"automarkable\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceB\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": null,\n \"max_score\": 10,\n \"serial_no\": 3,\n \"item_reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"question_reference\": \"d8818e-ce55-7283-4fa2-d585d0ccf021\",\n \"response_id\": \"923d99c0-2c75-40f9-9d39-7e987fa62a55\",\n \"attempted\": true,\n \"automarkable\": false,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"<p>Plants</p>\\n\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": null,\n \"max_score\": 10,\n \"serial_no\": 4,\n \"item_reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"question_reference\": \"4a3c6e6-11a-2dc8-8e88-feef042fc1b4\",\n \"response_id\": \"a86d2651-fcd9-4ad3-8d39-b2eecee6878a\",\n \"attempted\": true,\n \"automarkable\": false,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"<p>Animal</p>\\n\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 0,\n \"max_score\": 0,\n \"serial_no\": 5,\n \"item_reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"question_reference\": \"15a7b61-c36-d81-df3c-cf25852e6e8a\",\n \"response_id\": \"736d220d-f5d3-4aad-8b88-847b817d380d\",\n \"attempted\": true,\n \"automarkable\": false,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"<p>Weather</p>\\n\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": null,\n \"max_score\": 10,\n \"serial_no\": 6,\n \"item_reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"question_reference\": \"756f84b-0f20-631c-f537-b800ac7ed6a2\",\n \"response_id\": \"955fcf33-6d6d-4a04-af01-960c2385fa05\",\n \"attempted\": true,\n \"automarkable\": false,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"{\\\"version\\\":\\\"3.6.3\\\",\\\"objects\\\":[{\\\"type\\\":\\\"ellipse\\\",\\\"version\\\":\\\"3.6.3\\\",\\\"originX\\\":\\\"left\\\",\\\"originY\\\":\\\"top\\\",\\\"left\\\":134.23,\\\"top\\\":110,\\\"width\\\":185.28,\\\"height\\\":176.61,\\\"fill\\\":\\\"rgba(0, 0, 0, 0)\\\",\\\"stroke\\\":\\\"rgb(0, 0, 0)\\\",\\\"strokeWidth\\\":1,\\\"strokeDashArray\\\":null,\\\"strokeLineCap\\\":\\\"butt\\\",\\\"strokeDashOffset\\\":0,\\\"strokeLineJoin\\\":\\\"miter\\\",\\\"strokeMiterLimit\\\":4,\\\"scaleX\\\":1,\\\"scaleY\\\":1,\\\"angle\\\":0,\\\"flipX\\\":false,\\\"flipY\\\":false,\\\"opacity\\\":1,\\\"shadow\\\":null,\\\"visible\\\":true,\\\"clipTo\\\":null,\\\"backgroundColor\\\":\\\"\\\",\\\"fillRule\\\":\\\"nonzero\\\",\\\"paintFirst\\\":\\\"fill\\\",\\\"globalCompositeOperation\\\":\\\"source-over\\\",\\\"transformMatrix\\\":null,\\\"skewX\\\":0,\\\"skewY\\\":0,\\\"rx\\\":92.63803680981596,\\\"ry\\\":88.30742594753283},{\\\"type\\\":\\\"ellipse\\\",\\\"version\\\":\\\"3.6.3\\\",\\\"originX\\\":\\\"left\\\",\\\"originY\\\":\\\"top\\\",\\\"left\\\":464.29,\\\"top\\\":113.93,\\\"width\\\":179.14,\\\"height\\\":174.16,\\\"fill\\\":\\\"rgba(0, 0, 0, 0)\\\",\\\"stroke\\\":\\\"rgb(0, 0, 0)\\\",\\\"strokeWidth\\\":1,\\\"strokeDashArray\\\":null,\\\"strokeLineCap\\\":\\\"butt\\\",\\\"strokeDashOffset\\\":0,\\\"strokeLineJoin\\\":\\\"miter\\\",\\\"strokeMiterLimit\\\":4,\\\"scaleX\\\":1,\\\"scaleY\\\":1,\\\"angle\\\":0,\\\"flipX\\\":false,\\\"flipY\\\":false,\\\"opacity\\\":1,\\\"shadow\\\":null,\\\"visible\\\":true,\\\"clipTo\\\":null,\\\"backgroundColor\\\":\\\"\\\",\\\"fillRule\\\":\\\"nonzero\\\",\\\"paintFirst\\\":\\\"fill\\\",\\\"globalCompositeOperation\\\":\\\"source-over\\\",\\\"transformMatrix\\\":null,\\\"skewX\\\":0,\\\"skewY\\\":0,\\\"rx\\\":89.57055214723925,\\\"ry\\\":87.08093392048377},{\\\"type\\\":\\\"rect\\\",\\\"version\\\":\\\"3.6.3\\\",\\\"originX\\\":\\\"left\\\",\\\"originY\\\":\\\"top\\\",\\\"left\\\":307.24,\\\"top\\\":311.15,\\\"width\\\":279.75,\\\"height\\\":116.52,\\\"fill\\\":\\\"rgba(0, 0, 0, 0)\\\",\\\"stroke\\\":\\\"rgb(0, 0, 0)\\\",\\\"strokeWidth\\\":1,\\\"strokeDashArray\\\":null,\\\"strokeLineCap\\\":\\\"butt\\\",\\\"strokeDashOffset\\\":0,\\\"strokeLineJoin\\\":\\\"miter\\\",\\\"strokeMiterLimit\\\":4,\\\"scaleX\\\":1,\\\"scaleY\\\":1,\\\"angle\\\":0,\\\"flipX\\\":false,\\\"flipY\\\":false,\\\"opacity\\\":1,\\\"shadow\\\":null,\\\"visible\\\":true,\\\"clipTo\\\":null,\\\"backgroundColor\\\":\\\"\\\",\\\"fillRule\\\":\\\"nonzero\\\",\\\"paintFirst\\\":\\\"fill\\\",\\\"globalCompositeOperation\\\":\\\"source-over\\\",\\\"transformMatrix\\\":null,\\\"skewX\\\":0,\\\"skewY\\\":0,\\\"rx\\\":0,\\\"ry\\\":0},{\\\"type\\\":\\\"rect\\\",\\\"version\\\":\\\"3.6.3\\\",\\\"originX\\\":\\\"right\\\",\\\"originY\\\":\\\"bottom\\\",\\\"left\\\":518.28,\\\"top\\\":384.74,\\\"width\\\":265.03,\\\"height\\\":219.54,\\\"fill\\\":\\\"rgba(0, 0, 0, 0)\\\",\\\"stroke\\\":\\\"rgb(0, 0, 0)\\\",\\\"strokeWidth\\\":1,\\\"strokeDashArray\\\":null,\\\"strokeLineCap\\\":\\\"butt\\\",\\\"strokeDashOffset\\\":0,\\\"strokeLineJoin\\\":\\\"miter\\\",\\\"strokeMiterLimit\\\":4,\\\"scaleX\\\":1,\\\"scaleY\\\":1,\\\"angle\\\":0,\\\"flipX\\\":false,\\\"flipY\\\":false,\\\"opacity\\\":1,\\\"shadow\\\":null,\\\"visible\\\":true,\\\"clipTo\\\":null,\\\"backgroundColor\\\":\\\"\\\",\\\"fillRule\\\":\\\"nonzero\\\",\\\"paintFirst\\\":\\\"fill\\\",\\\"globalCompositeOperation\\\":\\\"source-over\\\",\\\"transformMatrix\\\":null,\\\"skewX\\\":0,\\\"skewY\\\":0,\\\"rx\\\":0,\\\"ry\\\":0}]}\"\n }\n ]\n }\n ],\n \"items\": [\n {\n \"reference\": \"263d353-ca6c-20-60-1a2c60e21ec3\",\n \"response_ids\": [\n \"4cdda1d1-d697-4870-a000-89f7a2eedf71\",\n \"531d4c26-997a-487d-a820-bb300ed50fa2\",\n \"923d99c0-2c75-40f9-9d39-7e987fa62a55\",\n \"a86d2651-fcd9-4ad3-8d39-b2eecee6878a\",\n \"736d220d-f5d3-4aad-8b88-847b817d380d\",\n \"955fcf33-6d6d-4a04-af01-960c2385fa05\"\n ],\n \"scoring\": {\n \"score\": 14,\n \"max_score\": 48,\n \"item_scoring_type\": \"sum up all individual scores\"\n }\n }\n ]\n }\n ]\n}\n");
187
+ });
188
+
189
+ it('Example Response for status code 401 should be displayed', () => {
190
+ cy.get('td[class="response-col_status"]')
191
+ .eq(1)
192
+ .should('have.text', '401');
193
+ cy.get('.response-col_description__inner')
194
+ .eq(1)
195
+ .should('have.text', 'Unauthorized');
196
+ cy.get('pre[class="example microlight"]')
197
+ .eq(1)
198
+ .should('have.text', "{\n \"meta\": {\n \"status\": false,\n \"message\": \"Invalid Signature\",\n \"timestamp\": 1653650826764\n },\n \"data\": []\n}\n");
199
+ });
200
+
201
+ it('Example Response for status code 422 should be displayed', () => {
202
+ cy.get('td[class="response-col_status"]')
203
+ .eq(2)
204
+ .should('have.text', '422');
205
+ cy.get('.response-col_description__inner')
206
+ .eq(2)
207
+ .should('have.text', 'Unprocessable Entity (WebDAV)');
208
+ cy.get('pre[class="example microlight"]')
209
+ .eq(2)
210
+ .should('have.text', "{\n \"meta\": {\n \"status\": false,\n \"message\": \"\\\"activity_id\\\" must be an array\",\n \"timestamp\": 1653650826764\n },\n \"data\": []\n}\n");
211
+ });
212
+
213
+ it('Example Response for status code 500 should be displayed', () => {
214
+ cy.get('td[class="response-col_status"]')
215
+ .eq(3)
216
+ .should('have.text', '500');
217
+ cy.get('.response-col_description__inner')
218
+ .eq(3)
219
+ .should('have.text', 'Internal Server Error');
220
+ cy.get('pre[class="example microlight"]')
221
+ .eq(3)
222
+ .should('have.text', "{\n \"meta\": {\n \"status\": false,\n \"message\": \"Error occurred while fetching data\",\n \"timestamp\": 1653650826764\n },\n \"data\": []\n}\n");
223
+ });
224
+
225
+ it('Entering request to get Response data for activity 1 (All correct responses, all questions attempted)', () => {
226
+ cy.visit('/item-engine/data-api/sessions/fetch-responses');
227
+ cy.get('.try-out__btn')
228
+ .click();
229
+ cy.get('textarea[class="body-param__text"]')
230
+ .clear()
231
+ .fill(`{\n "activity_id": ["${sessionData[0]["activity_id"]}"],\n "user_id": ["${sessionData[0]["user_id"]}"],\n "session_id": ["${sessionData[0]["session_id"]}"],\n "sort": "desc",\n "limit": 10,\n "page": 0\n}\n`);
232
+ cy.get('.execute')
233
+ .click();
234
+ cy.wait(2000);
235
+ cy.get('.loading-container')
236
+ .should('not.exist');
237
+
238
+ //Storing the unknown values from the response for assertion
239
+ cy.get('pre[class="microlight"]')
240
+ .eq(1)
241
+ .invoke('text')
242
+ .then((text) => {
243
+ // Parse the JSON from the DOM
244
+ const actualResponse = JSON.parse(text);
245
+ timestamp = actualResponse.meta.timestamp;
246
+ // Loop through each data item
247
+ actualResponse.data.forEach((dataItem) => {
248
+ // Loop through each response in the responses array
249
+ dataItem.responses.forEach((response) => {
250
+ questionReferences.push(response.question_reference);
251
+ responseIds.push(response.response_id);
252
+ });
253
+ });
254
+ const dataItem = actualResponse.data[0];
255
+ activityTemplateIdNew = dataItem.activity_template_id;
256
+ dtStartedNew = dataItem.dt_started;
257
+ dtCompletedNew = dataItem.dt_completed;
258
+ });
259
+ });
260
+
261
+ it('Response data of all the activity for the entered user_id should be returned in the response', () => {
262
+ cy.get('pre[class="microlight"]')
263
+ .eq(1)
264
+ .should('have.text',`{\n \"meta\": {\n \"records\": 1,\n \"status\": true,\n \"timestamp\": ${timestamp},\n \"next_token\": null\n },\n \"data\": [\n {\n \"user_id\": \"${sessionData[0]["user_id"]}\",\n \"session_id\": \"${sessionData[0]["session_id"]}\",\n \"activity_id\": \"${sessionData[0]["activity_id"]}\",\n \"score\": 1.5,\n \"dt_started\": \"${dtStartedNew}\",\n \"dt_completed\": \"${dtCompletedNew}\",\n \"max_score\": 14,\n \"activity_template_id\": \"${activityTemplateIdNew}\",\n \"num_questions\": 1,\n \"responses\": [\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 1.5,\n \"max_score\": 4,\n \"serial_no\": 1,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[0]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[0]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceD\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 0,\n \"max_score\": 10,\n \"serial_no\": 2,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[1]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[1]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceD\"\n }\n ]\n }\n ],\n \"items\": [\n {\n \"reference\": \"${itemReferenceIdNew}\",\n \"response_ids\": [\n \"${responseIds[0]}\",\n \"${responseIds[1]}\"\n ],\n \"scoring\": {\n \"score\": 1.5,\n \"max_score\": 14,\n \"item_scoring_type\": \"sum up all individual scores\"\n }\n }\n ]\n }\n ]\n}\n`)
265
+ });
266
+
267
+ it('Entering request to get Response data for activity 2- Sending multiple activities and filtering by session id and userid for activity 2 (Incorrect responses, incomplete i.e. all questions are not attempted)', () => {
268
+ cy.get('textarea[class="body-param__text"]')
269
+ .clear()
270
+ .fill(`{\n "activity_id": ["${sessionData[1]["activity_id"]}","${sessionData[0]["activity_id"]}"],\n "user_id": ["${sessionData[1]["user_id"]}"],\n "session_id": ["${sessionData[1]["session_id"]}"],\n "sort": "desc",\n "limit": 10,\n "page": 0\n}\n`);
271
+ cy.get('.execute')
272
+ .click();
273
+ cy.wait(2000);
274
+ cy.get('.loading-container')
275
+ .should('not.exist');
276
+
277
+ //Storing the unknown values from the response for assertion
278
+ cy.get('pre[class="microlight"]')
279
+ .eq(1)
280
+ .invoke('text')
281
+ .then((text) => {
282
+ // Parse the JSON from the DOM
283
+ const actualResponse = JSON.parse(text);
284
+ timestamp = actualResponse.meta.timestamp;
285
+ // Loop through each data item
286
+ actualResponse.data.forEach((dataItem) => {
287
+ // Loop through each response in the responses array
288
+ dataItem.responses.forEach((response) => {
289
+ questionReferences.push(response.question_reference);
290
+ responseIds.push(response.response_id);
291
+ });
292
+ });
293
+ const dataItem = actualResponse.data[0];
294
+ activityTemplateIdNew = dataItem.activity_template_id;
295
+ dtStartedNew = dataItem.dt_started;
296
+ dtCompletedNew = dataItem.dt_completed;
297
+ });
298
+ });
299
+
300
+ it('Response data of all the activity for the entered user_id should be returned in the response', () => {
301
+ cy.get('pre[class="microlight"]')
302
+ .eq(1)
303
+ .should('have.text',`{\n \"meta\": {\n \"records\": 1,\n \"status\": true,\n \"timestamp\": ${timestamp},\n \"next_token\": null\n },\n \"data\": [\n {\n \"user_id\": \"${sessionData[1]["user_id"]}\",\n \"session_id\": \"${sessionData[1]["session_id"]}\",\n \"activity_id\": \"${sessionData[1]["activity_id"]}\",\n \"score\": 1.5,\n \"dt_started\": \"${dtStartedNew}\",\n \"dt_completed\": \"${dtCompletedNew}\",\n \"max_score\": 14,\n \"activity_template_id\": \"${activityTemplateIdNew}\",\n \"num_questions\": 1,\n \"responses\": [\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 1.5,\n \"max_score\": 4,\n \"serial_no\": 1,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[2]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[2]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceB\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 0,\n \"max_score\": 10,\n \"serial_no\": 2,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[3]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[3]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceB\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceC\"\n }\n ]\n }\n ],\n \"items\": [\n {\n \"reference\": \"${itemReferenceIdNew}\",\n \"response_ids\": [\n \"${responseIds[2]}\",\n \"${responseIds[3]}\"\n ],\n \"scoring\": {\n \"score\": 1.5,\n \"max_score\": 14,\n \"item_scoring_type\": \"sum up all individual scores\"\n }\n }\n ]\n }\n ]\n}\n`)
304
+ });
305
+
306
+ it('Entering request to get Response data for both activity 1 and activity 2, keeping sort field blank', () => {
307
+ cy.get('textarea[class="body-param__text"]')
308
+ .clear()
309
+ .fill(`{\n "activity_id": ["${sessionData[0]["activity_id"]}", "${sessionData[1]["activity_id"]}"],\n "user_id": [],\n "session_id": [],\n "sort": "",\n "limit": 10,\n "page": 0\n}\n`);
310
+ cy.get('.execute')
311
+ .click();
312
+ cy.wait(2000);
313
+ cy.get('.loading-container')
314
+ .should('not.exist');
315
+
316
+ //Storing the unknown values from the response for assertion
317
+ cy.get('pre[class="microlight"]')
318
+ .eq(1)
319
+ .within(() => {
320
+ cy.contains('timestamp')
321
+ .next().next().then((currTimestamp) => {
322
+ timestamp = currTimestamp[0].innerText
323
+ });
324
+ });
325
+ });
326
+
327
+ it('"\"sort\" must be one of [asc, desc]" error message should be received in the response with error code 422', () => {
328
+ cy.get('pre[class="microlight"]')
329
+ .eq(1)
330
+ .should('have.text',`{\n \"meta\": {\n \"message\": \"\\\"sort\\\" must be one of [asc, desc]\",\n \"timestamp\": ${timestamp},\n \"status\": false\n },\n \"data\": []\n}\n`)
331
+ });
332
+
333
+ it('Entering request to get Response data for both activity 1 and activity 2, keeping session_id and user_id array blank', () => {
334
+ cy.get('textarea[class="body-param__text"]')
335
+ .clear()
336
+ .fill(`{\n "activity_id": ["${sessionData[0]["activity_id"]}", "${sessionData[1]["activity_id"]}"],\n "user_id": [],\n "session_id": [],\n "sort": "asc",\n "limit": 10,\n "page": 0\n}\n`);
337
+ cy.get('.execute')
338
+ .click();
339
+ cy.wait(2000);
340
+ cy.get('.loading-container')
341
+ .should('not.exist');
342
+
343
+ //Storing the unknown values from the response for assertion
344
+ cy.get('pre[class="microlight"]')
345
+ .eq(1)
346
+ .invoke('text')
347
+ .then((text) => {
348
+ // Parse the JSON from the DOM
349
+ const actualResponse = JSON.parse(text);
350
+ timestamp = actualResponse.meta.timestamp;
351
+ // Loop through each data item
352
+ questionReferences.length = 0;
353
+ responseIds.length = 0;
354
+ actualResponse.data.forEach((dataItem) => {
355
+ // Loop through each response in the responses array
356
+ dataItem.responses.forEach((response) => {
357
+ questionReferences.push(response.question_reference);
358
+ responseIds.push(response.response_id);
359
+ });
360
+ });
361
+ const dataItem = actualResponse.data[0];
362
+ if (actualResponse.data && actualResponse.data.length >= 1) {
363
+ dtStartedNew = actualResponse.data[0].dt_started;
364
+ dtCompletedNew = actualResponse.data[0].dt_completed;
365
+ activityTemplateIdNew = actualResponse.data[0].activity_template_id;
366
+ }
367
+
368
+ if (actualResponse.data && actualResponse.data.length >= 2) {
369
+ dtStartedNew1 = actualResponse.data[1].dt_started;
370
+ dtCompletedNew1 = actualResponse.data[1].dt_completed;
371
+ activityTemplateIdNew1 = actualResponse.data[1].activity_template_id;
372
+ }
373
+ });
374
+ });
375
+
376
+ it('Verifying the response', () => {
377
+ cy.get('pre[class="microlight"]')
378
+ .eq(1)
379
+ .should('have.text',`{\n \"meta\": {\n \"records\": 2,\n \"status\": true,\n \"timestamp\": ${timestamp},\n \"next_token\": null\n },\n \"data\": [\n {\n \"user_id\": \"${sessionData[0]["user_id"]}\",\n \"session_id\": \"${sessionData[0]["session_id"]}\",\n \"activity_id\": \"${sessionData[0]["activity_id"]}\",\n \"score\": 1.5,\n \"dt_started\": \"${dtStartedNew}\",\n \"dt_completed\": \"${dtCompletedNew}\",\n \"max_score\": 14,\n \"activity_template_id\": \"${activityTemplateIdNew}\",\n \"num_questions\": 1,\n \"responses\": [\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 1.5,\n \"max_score\": 4,\n \"serial_no\": 1,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[0]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[0]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceD\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 0,\n \"max_score\": 10,\n \"serial_no\": 2,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[1]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[1]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceD\"\n }\n ]\n }\n ],\n \"items\": [\n {\n \"reference\": \"${itemReferenceIdNew}\",\n \"response_ids\": [\n \"${responseIds[0]}\",\n \"${responseIds[1]}\"\n ],\n \"scoring\": {\n \"score\": 1.5,\n \"max_score\": 14,\n \"item_scoring_type\": \"sum up all individual scores\"\n }\n }\n ]\n },\n {\n \"user_id\": \"${sessionData[1]["user_id"]}\",\n \"session_id\": \"${sessionData[1]["session_id"]}\",\n \"activity_id\": \"${sessionData[1]["activity_id"]}\",\n \"score\": 1.5,\n \"dt_started\": \"${dtStartedNew1}\",\n \"dt_completed\": \"${dtCompletedNew1}\",\n \"max_score\": 14,\n \"activity_template_id\": \"${activityTemplateIdNew1}\",\n \"num_questions\": 1,\n \"responses\": [\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 1.5,\n \"max_score\": 4,\n \"serial_no\": 1,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[2]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[2]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceA\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceB\"\n }\n ]\n },\n {\n \"erater\": null,\n \"plagiarism\": null,\n \"score\": 0,\n \"max_score\": 10,\n \"serial_no\": 2,\n \"item_reference\": \"${itemReferenceIdNew}\",\n \"question_reference\": \"${questionReferences[3]}\",\n \"automarkable\": true,\n \"response_id\": \"${responseIds[3]}\",\n \"attempted\": true,\n \"responses\": [\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceB\"\n },\n {\n \"xml_identifier\": \"RESPONSE\",\n \"response_text\": \"ChoiceC\"\n }\n ]\n }\n ],\n \"items\": [\n {\n \"reference\": \"${itemReferenceIdNew}\",\n \"response_ids\": [\n \"${responseIds[2]}\",\n \"${responseIds[3]}\"\n ],\n \"scoring\": {\n \"score\": 1.5,\n \"max_score\": 14,\n \"item_scoring_type\": \"sum up all individual scores\"\n }\n }\n ]\n }\n ]\n}\n`)
380
+ });
381
+
382
+ it.skip('Entering request to get Response Scores data for activities using userid, filtered by activity id', () => {
383
+ cy.get('textarea[class="body-param__text"]')
384
+ .clear()
385
+ .fill(`{\n "activity_id": ["${sessionData[2]["activity_id"]}"],\n "user_id": ["${sessionData[1]["user_id"]}"],\n "session_id": [],\n "sort": "desc",\n "limit": 10,\n "page": 0\n}\n`);
386
+ cy.get('.execute')
387
+ .click();
388
+ cy.wait(2000);
389
+ cy.get('.loading-container')
390
+ .should('not.exist');
391
+
392
+ //Storing the unknown values from the response for assertion
393
+ cy.get('pre[class="microlight"]')
394
+ .eq(1)
395
+ .within(() => {
396
+ var responseIdsArray = [];
397
+ cy.get('span')
398
+ .eq(135)
399
+ .then((id) => {
400
+ responseIdsArray.push(id[0].innerText);
401
+ });
402
+ sessionData[2]["responseIdsArray"] = responseIdsArray;
403
+ cy.contains('timestamp')
404
+ .next().next().then((currTimestamp) => {
405
+ timestamp = currTimestamp[0].innerText
406
+ });
407
+ });
408
+ });
409
+
410
+ it.skip('Response Scores data for only activity 3 should be returned in the response', () => {
411
+ cy.get('pre[class="microlight"]')
412
+ .eq(1)
413
+ .should('have.text', `{\n "meta": {\n "records": 1,\n "status": true,\n "timestamp": ${timestamp}\n },\n "data": [\n {\n "user_id": "${sessionData[2]["user_id"]}",\n "dt_started": null,\n "dt_completed": null,\n "score": 2,\n "session_id": "${sessionData[2]["session_id"]}",\n "activity_id": "${sessionData[2]["activity_id"]}",\n "max_score": "10.00",\n "activity_template_id": "${sessionData[2]["activity_template_id"]}",\n "num_questions": 1,\n "responses": [\n {\n "score": 2,\n "max_score": 10,\n "serial_no": 1,\n "item_reference": "sessionsAPIAutogradedItem",\n "question_reference": "${sessionData[2]["questionReferenceIds"][0]}",\n "automarkable": true,\n "response_id": ${sessionData[2]["responseIdsArray"][0]},\n "attempted": true,\n "responses": [\n {\n "xml_identifier": "RESPONSE",\n "response_text": "ChoiceB"\n }\n ]\n }\n ],\n "items": [\n {\n "reference": "sessionsAPIAutogradedItem",\n "response_ids": [\n ${sessionData[2]["responseIdsArray"][0]}\n ],\n "scoring": {\n "score": 2,\n "max_score": 10\n }\n }\n ]\n }\n ]\n}\n`);
414
+ });
415
+
416
+ it('Entering request with a non existing session id', () => {
417
+ cy.get('textarea[class="body-param__text"]')
418
+ .clear()
419
+ .fill(`{\n "activity_id": ["${sessionData[1]["activity_id"]}"],\n "user_id": ["${sessionData[1]["user_id"]}"],\n "session_id": ["non existing session id"],\n "sort": "desc",\n "limit": 10,\n "page": 0\n}\n`);
420
+ cy.get('.execute')
421
+ .click();
422
+ cy.wait(2000);
423
+ cy.get('.loading-container')
424
+ .should('not.exist');
425
+
426
+ //Storing the unknown values from the response for assertion
427
+ cy.get('pre[class="microlight"]')
428
+ .eq(1)
429
+ .within(() => {
430
+ cy.contains('timestamp')
431
+ .next().next().then((currTimestamp) => {
432
+ timestamp = currTimestamp[0].innerText
433
+ });
434
+ });
435
+ });
436
+
437
+ it('A blank data array should be received in the response with status code 200', () => {
438
+ cy.get('pre[class="microlight"]')
439
+ .eq(1)
440
+ .should('have.text', `{\n \"data\": [],\n \"meta\": {\n \"records\": 0,\n \"status\": true,\n \"timestamp\": ${timestamp},\n \"next_token\": null\n }\n}\n`)
441
+ });
442
+ });
443
+ });
@@ -140,6 +140,18 @@ Cypress.Commands.add('fill', { prevSubject: 'element' }, ($subj, text) => {
140
140
  // cy.once('test:after:run', (test) => addContext({ test }, context));
141
141
  // });
142
142
 
143
+
144
+ Cypress.Commands.add('getIframeBody', () => {
145
+ cy.on('uncaught:exception', () => {
146
+ return false
147
+ });
148
+ cy.wait(2000);
149
+ return cy
150
+ .get('iframe[class="cke_panel_frame"]')
151
+ .its('0.contentDocument.body').should('not.be.empty')
152
+ .then(cy.wrap);
153
+ });
154
+
143
155
  Cypress.Commands.add('barsPreLoaderWait', () => {
144
156
  cy.get('[id="question-item-instruction-loader"]')
145
157
  .find('img')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itemengine-cypress-automation",
3
- "version": "1.0.329",
3
+ "version": "1.0.331-e2eFixes4thMarch-e038ad7.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -52,4 +52,4 @@
52
52
  "devDependencies": {
53
53
  "@applitools/eyes-cypress": "^3.47.0"
54
54
  }
55
- }
55
+ }