itemengine-cypress-automation 1.0.331 → 1.0.332

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.
@@ -0,0 +1,454 @@
1
+ import { createdAndUpdatedAtDate, questionAndResourceReferenceIds } from '../../support/helpers/createItem';
2
+ import utilities from "../../support/helpers/utilities";
3
+
4
+ describe('Save Response Scores API cases', () => {
5
+ var sessionData = [{}, {}, {}];
6
+ var timestamp;
7
+ let itemReferenceIdNew;
8
+ var responseIds = [];
9
+ var questionReferences = [];
10
+ let dt_score_update;
11
+ let dt_saved;
12
+ let dtStartedNew;
13
+ let dtCompletedNew;
14
+ let activityTemplateIdNew;
15
+ before(() => {
16
+ cy.loginAs('admin');
17
+ cy.createItem('SaveResponseScoresTest1');
18
+ cy.wait(5000)
19
+ cy.visit(`${Cypress.env('itemEngineHomePage')}`);
20
+ });
21
+
22
+ after(() => {
23
+ cy.deleteItems();
24
+ cy.logout();
25
+ });
26
+
27
+ it('fetch question reference id from the api', () => {
28
+ cy.contains('Item Bank')
29
+ .click();
30
+ cy.contains('Fetch Questions')
31
+ .click();
32
+ cy.contains('Fetch Questions')
33
+ .parent()
34
+ .parent()
35
+ .should('have.class', 'Mui-selected');
36
+ cy.url()
37
+ .should('eq', Cypress.config().baseUrl + '/item-engine/data-api/item-bank/fetch-questions');
38
+ cy.get('.try-out__btn')
39
+ .click();
40
+ cy.get('textarea[class="body-param__text"]')
41
+ .clear()
42
+ .fill(`{\n "item_references": ["SaveResponseScoresTest1"],\n "references": [],\n "types": [],\n "limit": 50,\n "sort_field": "created",\n "sort": "desc"\n}\n`);
43
+ cy.get('.execute')
44
+ .click();
45
+ cy.wait(2000);
46
+ cy.get('.loading-container')
47
+ .should('not.exist');
48
+ cy.get('pre[class="microlight"]')
49
+ .eq(1)
50
+ .invoke('text')
51
+ .then((text) => {
52
+ // Parse the JSON from the DOM
53
+ const actualResponse = JSON.parse(text);
54
+ // Extract dynamic values from the parsed object
55
+ const test1Data = actualResponse.data.SaveResponseScoresTest1[0];
56
+ const { reference: ref1 } = test1Data;
57
+ itemReferenceIdNew = ref1;
58
+ });
59
+
60
+ });
61
+
62
+ it('Setting responses for an item using saveSessions API', () => {
63
+ cy.interceptGraphql('createOrUpdateUserSession');
64
+ cy.interceptGraphql('fetchActivity');
65
+ cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceIdNew)}`)
66
+ cy.wait('@createOrUpdateUserSession');
67
+ cy.get('[data-testid="question-instruction-element"]')
68
+ .eq(2)
69
+ .scrollIntoView()
70
+ //mcq question 1
71
+ var checkboxes = ["ChoiceA", "ChoiceB", "ChoiceC", "ChoiceD"];
72
+ cy.get('div[class*="SinglePageAssessmentQuestionsstyles__QuestionPartContainer"]')
73
+ .eq(0)
74
+ .within(() => {
75
+ checkboxes.forEach((i) => {
76
+ cy.get(`input[value="${i}"]`)
77
+ .should('not.be.checked');
78
+ });
79
+ });
80
+
81
+ //Extracting session data for activity 1 (All correct answers)
82
+ cy.get('@createOrUpdateUserSession').then((data) => {
83
+ sessionData[0]["activity_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].activityId;
84
+ sessionData[0]["user_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].userId;
85
+ sessionData[0]["session_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].sessionId;
86
+ }).then(() => {
87
+ //Extracting question reference ids
88
+ cy.get('@fetchActivity').then((resp) => {
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]["activity_template_id"] = resp.response.body.data.fetchActivity.activityTemplateId;
94
+ sessionData[0]["questionReferenceIds"] = questionReferenceIds;
95
+ sessionData[0]["question_id"] = resp.response.body.data.fetchActivity.playerData.questions[0].id;
96
+ }).then(() => {
97
+ cy.visit('/item-engine/data-api/sessions/save-sessions');
98
+ cy.get('.try-out__btn')
99
+ .click();
100
+ cy.get('textarea[class="body-param__text"]')
101
+ .clear()
102
+ .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}`);
103
+ cy.get('.execute')
104
+ .click();
105
+ cy.wait(2000);
106
+ cy.get('.loading-container')
107
+ .should('not.exist');
108
+ });
109
+ });
110
+
111
+ cy.logout();
112
+ cy.loginAs('admin');
113
+ cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceIdNew)}`)
114
+ cy.wait('@createOrUpdateUserSession');
115
+ cy.get('[data-testid="question-instruction-element"]')
116
+ .eq(2)
117
+ .scrollIntoView()
118
+ //mcq question 1
119
+ var checkboxes = ["ChoiceA", "ChoiceB", "ChoiceC", "ChoiceD"];
120
+ cy.get('div[class*="SinglePageAssessmentQuestionsstyles__QuestionPartContainer"]')
121
+ .eq(0)
122
+ .within(() => {
123
+ checkboxes.forEach((i) => {
124
+ cy.get(`input[value="${i}"]`)
125
+ .should('not.be.checked');
126
+ });
127
+ });
128
+
129
+ //Extracting session data for activity 2 (Incorrect answers)
130
+ cy.get('@createOrUpdateUserSession').then((data) => {
131
+ sessionData[1]["activity_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].activityId;
132
+ sessionData[1]["user_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].userId;
133
+ sessionData[1]["session_id"] = data.request.body.variables.input.sessionData.itemActivityMap[0].sessionId;
134
+ sessionData[1]["teacher_id"] = data.request.body.variables.input.sessionData.users[2].id;
135
+ }).then(() => {
136
+ //Extracting question reference ids
137
+ cy.get('@fetchActivity').then((resp) => {
138
+ var questionReferenceIds = [];
139
+ for (var i = 0; i < resp.response.body.data.fetchActivity.playerData.questions[0].questionParts.length; i++) {
140
+ questionReferenceIds.push(resp.response.body.data.fetchActivity.playerData.questions[0].questionParts[i].referenceId);
141
+ };
142
+ sessionData[1]["activity_template_id"] = resp.response.body.data.fetchActivity.activityTemplateId;
143
+ sessionData[1]["questionReferenceIds"] = questionReferenceIds;
144
+ sessionData[1]["question_id"] = resp.response.body.data.fetchActivity.playerData.questions[0].id;
145
+ }).then(() => {
146
+ cy.visit('/item-engine/data-api/sessions/save-sessions');
147
+ cy.get('.try-out__btn')
148
+ .click();
149
+ cy.get('textarea[class="body-param__text"]')
150
+ .clear()
151
+ .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}`);
152
+ cy.get('.execute')
153
+ .click();
154
+ cy.wait(2000);
155
+ cy.get('.loading-container')
156
+ .should('not.exist');
157
+ });
158
+ });
159
+ });
160
+
161
+ it('Getting the response ids of the activities via responses API', () => {
162
+ cy.visit('/item-engine/data-api/sessions/fetch-responses');
163
+ cy.get('.try-out__btn')
164
+ .click();
165
+ cy.get('textarea[class="body-param__text"]')
166
+ .clear()
167
+ .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`);
168
+ cy.get('.execute')
169
+ .click();
170
+ cy.wait(2000);
171
+ cy.get('.loading-container')
172
+ .should('not.exist');
173
+
174
+ //Storing the unknown values from the response for assertion
175
+ cy.get('pre[class="microlight"]')
176
+ .eq(1)
177
+ .invoke('text')
178
+ .then((text) => {
179
+ const actualResponse = JSON.parse(text);
180
+ actualResponse.data.forEach((dataItem) => {
181
+ dataItem.responses.forEach((response) => {
182
+ responseIds.push(response.response_id);
183
+ });
184
+ });
185
+ });
186
+ });
187
+
188
+ it('If the user clicks on the Save Response Scores option from the menu bar, user should be navigated to the Save Response Scores API page', () => {
189
+ cy.contains('Save Response Scores')
190
+ .click();
191
+ cy.contains('Save Response Scores')
192
+ .parent()
193
+ .parent()
194
+ .should('have.class', 'Mui-selected');
195
+ cy.url()
196
+ .should('eq', Cypress.config().baseUrl + '/item-engine/data-api/sessions/save/response-scores');
197
+ });
198
+
199
+ it('Example Request should be displayed', () => {
200
+ cy.get('pre[class="body-param__example microlight"]')
201
+ .eq(0)
202
+ .should('have.text', "{\n \"sessions\": [\n {\n \"session_id\": \"91eb61aa-c20b-4875-9cab-228b27fa7b34\",\n \"user_id\": \"c85b5c66-b594-4d69-acf1-c8a2e82f2ffb\",\n \"responses\": [\n {\n \"response_id\": \"91eb61aa-c20b-4875-9cab-228b27fa7b34_0507364a-90b9-4612-8a3e-6644a8419691\",\n \"score\": 10,\n \"max_score\": 20,\n \"attempted\": true\n }\n ]\n }\n ],\n \"organisation_id\": \"eb7d4a20-c96c-4852-9b34-7e3231016315\"\n}\n");
203
+ });
204
+
205
+ it('Example Response for status code 200 should be displayed', () => {
206
+ cy.get('td[class="response-col_status"]')
207
+ .eq(0)
208
+ .should('have.text', '200');
209
+ cy.get('.response-col_description__inner')
210
+ .eq(0)
211
+ .should('have.text', 'OK');
212
+ cy.get('pre[class="example microlight"]')
213
+ .eq(0)
214
+ .should('have.text', "{\n \"meta\": {\n \"status\": true,\n \"timestamp\": 1653650826764\n }\n}\n");
215
+ });
216
+
217
+ it('Example Response for status code 401 should be displayed', () => {
218
+ cy.get('td[class="response-col_status"]')
219
+ .eq(1)
220
+ .should('have.text', '401');
221
+ cy.get('.response-col_description__inner')
222
+ .eq(1)
223
+ .should('have.text', 'Unauthorized');
224
+ cy.get('pre[class="example microlight"]')
225
+ .eq(1)
226
+ .should('have.text', "{\n \"meta\": {\n \"status\": false,\n \"message\": \"Invalid Signature\",\n \"timestamp\": 1653650826764\n }\n}\n");
227
+ });
228
+
229
+ it('Example Response for status code 422 should be displayed', () => {
230
+ cy.get('td[class="response-col_status"]')
231
+ .eq(2)
232
+ .should('have.text', '422');
233
+ cy.get('.response-col_description__inner')
234
+ .eq(2)
235
+ .should('have.text', 'Unprocessable Entity (WebDAV)');
236
+ cy.get('pre[class="example microlight"]')
237
+ .eq(2)
238
+ .should('have.text', "{\n \"meta\": {\n \"status\": false,\n \"message\": \"\\\"sessions[0].userId\\\" is required\",\n \"timestamp\": 1653650826764\n }\n}\n");
239
+ });
240
+
241
+ it('Example Response for status code 500 should be displayed', () => {
242
+ cy.get('td[class="response-col_status"]')
243
+ .eq(3)
244
+ .should('have.text', '500');
245
+ cy.get('.response-col_description__inner')
246
+ .eq(3)
247
+ .should('have.text', 'Internal Server Error');
248
+ cy.get('pre[class="example microlight"]')
249
+ .eq(3)
250
+ .should('have.text', "{\n \"meta\": {\n \"status\": false,\n \"message\": \"Error while saving data\",\n \"timestamp\": 1653650826764\n }\n}\n");
251
+ });
252
+
253
+ it('Entering request to set an invalid score for a question - Score greater than max score value', () => {
254
+ cy.get('.try-out__btn')
255
+ .click();
256
+ cy.get('textarea[class="body-param__text"]')
257
+ .clear()
258
+ .fill(`{\n "sessions": [\n {\n "session_id": "${sessionData[0]["session_id"]}",\n "user_id": "${sessionData[0]["user_id"]}",\n "responses": [\n {\n "response_id": "${responseIds[0]}",\n "score": 12\n }\n ]\n }\n ]\n}\n`);
259
+ cy.get('.execute')
260
+ .click();
261
+ cy.wait(2000);
262
+ cy.get('.loading-container')
263
+ .should('not.exist');
264
+ cy.get('pre[class="microlight"]')
265
+ .eq(1)
266
+ .within(() => {
267
+ cy.contains('timestamp')
268
+ .next().next().then((currTimestamp) => {
269
+ timestamp = currTimestamp[0].innerText
270
+ });
271
+ });
272
+ });
273
+
274
+ it('\"score should not be greater than maxScore\" message should be returned in the response with error code 200 ', () => {
275
+ cy.get('td[class="response-col_status"]')
276
+ .eq(0)
277
+ .should('have.text', '200');
278
+ cy.get('pre[class="microlight"]')
279
+ .eq(1)
280
+ .should('have.text', `{\n \"meta\": {\n \"message\": \"score should not be greater than maxScore: 4 for responseId: ${responseIds[0]}\",\n \"timestamp\": ${timestamp},\n \"status\": false\n }\n}\n`);
281
+ });
282
+
283
+ it('Entering request without user ID field', () => {
284
+ cy.get('textarea[class="body-param__text"]')
285
+ .clear()
286
+ .fill(`{\n "sessions": [\n {\n "session_id": "${sessionData[0]["session_id"]}",\n "responses": [\n {\n "response_id": "${responseIds[0]}",\n "score": 10\n }\n ]\n }\n ]\n}\n`);
287
+ cy.get('.execute')
288
+ .click();
289
+ cy.wait(2000);
290
+ cy.get('.loading-container')
291
+ .should('not.exist');
292
+ cy.get('pre[class="microlight"]')
293
+ .eq(1)
294
+ .within(() => {
295
+ cy.contains('timestamp')
296
+ .next().next().then((currTimestamp) => {
297
+ timestamp = currTimestamp[0].innerText
298
+ });
299
+ });
300
+ });
301
+
302
+ it('\"sessions[0].userId\" error message should be received in the response, with a status code 200', () => {
303
+ cy.get('td[class="response-col_status"]')
304
+ .eq(0)
305
+ .should('have.text', '200');
306
+ cy.get('pre[class="microlight"]')
307
+ .eq(1)
308
+ .should('have.text', `{\n \"meta\": {\n \"message\": \"\\\"sessions[0].userId\\\" is required\",\n \"timestamp\": ${timestamp},\n \"status\": false\n }\n}\n`);
309
+ });
310
+
311
+ it('Entering request to update responses of multiple activities and multiple items', () => {
312
+ cy.get('textarea[class="body-param__text"]')
313
+ .clear()
314
+ .fill(`{\n "sessions": [\n {\n "session_id": "${sessionData[0]["session_id"]}",\n "user_id": "${sessionData[0]["user_id"]}",\n "responses": [\n {\n "response_id": "${responseIds[0]}",\n "score": 2\n }\n,\n {\n "response_id": "${responseIds[1]}",\n "score": 3\n } ]\n }\n ]\n}\n`);
315
+ cy.get('.execute')
316
+ .click();
317
+ cy.wait(2000);
318
+ cy.get('.loading-container')
319
+ .should('not.exist');
320
+ cy.get('pre[class="microlight"]')
321
+ .eq(1)
322
+ .within(() => {
323
+ cy.contains('timestamp')
324
+ .next().next().then((currTimestamp) => {
325
+ timestamp = currTimestamp[0].innerText
326
+ });
327
+ });
328
+ });
329
+
330
+ it('Status:true message should be received in the response, with status code 200', () => {
331
+ cy.get('td[class="response-col_status"]')
332
+ .eq(0)
333
+ .should('have.text', '200');
334
+ cy.get('pre[class="microlight"]')
335
+ .eq(1)
336
+ .should('have.text', `{\n \"meta\": {\n \"status\": true,\n \"timestamp\": ${timestamp}\n }\n}\n`);
337
+ });
338
+
339
+ describe('Verifying the score update on Response Scores API', () => {
340
+ it('Entering request to get updated Scores data for item 1 - activity 1 through Scores API', () => {
341
+ cy.visit('/item-engine/data-api/sessions/fetch-scores');
342
+ cy.get('.try-out__btn')
343
+ .click();
344
+ cy.get('textarea[class="body-param__text"]')
345
+ .clear()
346
+ .fill(`{\n "limit": 50,\n "sort": "asc",\n "activity_id": ["${sessionData[0]["activity_id"]}"],\n "session_id": [],\n "include_response_scores": true,\n "status": ["completed","incomplete"],\n "page": 0,\n "user_id": []\n}`);
347
+ cy.get('.execute')
348
+ .click();
349
+ cy.wait(2000);
350
+ cy.get('.loading-container')
351
+ .should('not.exist');
352
+
353
+ //Storing the unknown values from the response for assertion
354
+ cy.get('pre[class="microlight"]')
355
+ .eq(1)
356
+ .invoke('text')
357
+ .then((text) => {
358
+ const actualResponse = JSON.parse(text);
359
+ actualResponse.data.forEach((dataItem) => {
360
+ dataItem.responses.forEach((response) => {
361
+ questionReferences.push(response.question_reference);
362
+ });
363
+ });
364
+ timestamp = actualResponse.meta.timestamp;
365
+ dt_score_update = actualResponse.data[0].responses[0].dt_score_update;
366
+ dt_saved = actualResponse.data[0].dt_saved;
367
+ });
368
+ });
369
+
370
+ it('The scores updated using update response scores API should get updated for that activity', () => {
371
+ cy.get('pre[class="microlight"]')
372
+ .eq(1)
373
+ .should('have.text', `{\n \"meta\": {\n \"records\": 1,\n \"status\": true,\n \"timestamp\": ${timestamp},\n \"next_token\": null\n },\n \"data\": [\n {\n \"responses\": [\n {\n \"erater\": {\n \"status\": \"NA\"\n },\n \"plagiarism\": {\n \"status\": \"pending\"\n },\n \"points_scored\": 2,\n \"question_reference\": \"${questionReferences[0]}\",\n \"score\": 2,\n \"max_score\": 4,\n \"attempted\": true,\n \"dt_score_update\": \"${dt_score_update}\",\n \"response_id\": \"${responseIds[0]}\",\n \"item_reference\": \"${itemReferenceIdNew}\"\n },\n {\n \"erater\": {\n \"status\": \"NA\"\n },\n \"plagiarism\": {\n \"status\": \"pending\"\n },\n \"points_scored\": 3,\n \"question_reference\": \"${questionReferences[1]}\",\n \"score\": 3,\n \"max_score\": 10,\n \"attempted\": true,\n \"dt_score_update\": \"${dt_score_update}\",\n \"response_id\": \"${responseIds[1]}\",\n \"item_reference\": \"${itemReferenceIdNew}\"\n }\n ],\n \"activity_id\": \"${sessionData[0]["activity_id"]}\",\n \"user_id\": \"${sessionData[0]["user_id"]}\",\n \"session_id\": \"${sessionData[0]["session_id"]}\",\n \"score\": 5,\n \"max_score\": 14,\n \"dt_saved\": \"${dt_saved}\",\n \"status\": \"completed\"\n }\n ]\n}\n`)
374
+ });
375
+
376
+ it('Entering request to get updated Scores data for item 2 - activity 1 through Fetch Responses API', () => {
377
+ cy.visit('/item-engine/data-api/sessions/fetch-responses');
378
+ cy.get('.try-out__btn')
379
+ .click();
380
+ cy.get('textarea[class="body-param__text"]')
381
+ .clear()
382
+ .fill(`{\n "activity_id": ["${sessionData[0]["activity_id"]}"],\n "user_id": [],\n "session_id": [],\n "sort": "desc",\n "limit": 10,\n "page": 0\n}\n`);
383
+ cy.get('.execute')
384
+ .click();
385
+ cy.wait(2000);
386
+ cy.get('.loading-container')
387
+ .should('not.exist');
388
+
389
+ //Storing the unknown values from the response for assertion
390
+ cy.get('pre[class="microlight"]')
391
+ .eq(1)
392
+ .invoke('text')
393
+ .then((text) => {
394
+ // Parse the JSON from the DOM
395
+ const actualResponse = JSON.parse(text);
396
+ timestamp = actualResponse.meta.timestamp;
397
+ const dataItem = actualResponse.data[0];
398
+ activityTemplateIdNew = dataItem.activity_template_id;
399
+ dtStartedNew = dataItem.dt_started;
400
+ dtCompletedNew = dataItem.dt_completed;
401
+ });
402
+ });
403
+
404
+ it('The scores updated using update response scores API should get updated for that activity', () => {
405
+ cy.get('pre[class="microlight"]')
406
+ .eq(1)
407
+ .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\": 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\": 2,\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\": 3,\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\": 5,\n \"max_score\": 14,\n \"item_scoring_type\": \"sum up all individual scores\"\n }\n }\n ]\n }\n ]\n}\n`)
408
+ });
409
+
410
+ describe.skip('Entering request to get updated Scores data for item 1 and item 2 sorted ascending through Fetch Response Scores API', () => {
411
+ it('Storing the unknown values from the response for assertion', () => {
412
+ cy.visit('/item-engine/data-api/sessions/fetch-response-scores');
413
+ cy.get('.try-out__btn')
414
+ .click();
415
+
416
+ //for item 2 - activity 1
417
+ cy.get('textarea[class="body-param__text"]')
418
+ .clear()
419
+ .fill(`{\n "limit": 10,\n "sort": "desc",\n "activity_id": ["${sessionData[1]["activity_id"]}"],\n "session_id": [],\n "status": ["completed","incomplete"],\n "page": 0,\n "user_id": []\n}`);
420
+ cy.get('.execute')
421
+ .click();
422
+ cy.wait(2000);
423
+ cy.get('.loading-container')
424
+ .should('not.exist');
425
+
426
+ cy.get('pre[class="microlight"]')
427
+ .eq(1)
428
+ .within(() => {
429
+ cy.contains('\"dt_score_updated\"')
430
+ .eq(0)
431
+ .next().next().then((id) => {
432
+ var dt_score_updated = id[0].innerText
433
+ sessionData[2]["dt_score_updated"] = dt_score_updated.replace(/"/g, '');
434
+ });
435
+ });
436
+
437
+ cy.get('textarea[class="body-param__text"]')
438
+ .clear()
439
+ .fill(`{\n "limit": 10,\n "maxtime": "2023-03-29",\n "mintime": "2021-03-21",\n "sort": "desc",\n "activity_id": ["${sessionData[1]["activity_id"]}"],\n "session_id": [],\n "status": ["completed","incomplete"],\n "page": 0,\n "user_id": []\n}`);
440
+ cy.get('.execute')
441
+ .click();
442
+ cy.wait(2000);
443
+ cy.get('.loading-container')
444
+ .should('not.exist');
445
+ });
446
+
447
+ it('Response Scores data of all the activity ids entered in the request should be returned in the response sorted by dt_score_updated ascending', () => {
448
+ cy.get('pre[class="microlight"]')
449
+ .eq(1)
450
+ .should('have.text', `{\n "meta": {\n "status": "true",\n "timestamp": ${timestamp}\n },\n "data": [\n {\n "responses": [\n {\n "response_id": ${sessionData[0]["responseIdsArray"][0]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": 5,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[0]["responseIdsArray"][1]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": 10,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[0]["responseIdsArray"][2]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": "pending",\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[0]["responseIdsArray"][3]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": 0,\n "max_score": 0,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[0]["responseIdsArray"][4]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": 7,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[0]["responseIdsArray"][5]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": 0,\n "max_score": 0,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[0]["responseIdsArray"][6]},\n "dt_score_updated": "${sessionData[0]["dt_score_updated"]}",\n "score": 1.25,\n "max_score": 2.25,\n "item_reference": "setSessionsAPI"\n }\n ],\n "user_id": "${sessionData[0]["user_id"]}",\n "activity_id": "${sessionData[0]["activity_id"]}",\n "session_id": "${sessionData[0]["session_id"]}",\n "score": 23.25,\n "max_score": 42.25\n },\n {\n "responses": [\n {\n "response_id": ${sessionData[1]["responseIdsArray"][0]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": 10,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[1]["responseIdsArray"][1]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": 10,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[1]["responseIdsArray"][2]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": 10,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[1]["responseIdsArray"][3]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": 0,\n "max_score": 0,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[1]["responseIdsArray"][4]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": 5.5,\n "max_score": 10,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[1]["responseIdsArray"][5]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": "pending",\n "max_score": 0,\n "item_reference": "setSessionsAPI"\n },\n {\n "response_id": ${sessionData[1]["responseIdsArray"][6]},\n "dt_score_updated": "${sessionData[1]["dt_score_updated"]}",\n "score": "pending",\n "max_score": 2.25,\n "item_reference": "setSessionsAPI"\n }\n ],\n "user_id": "${sessionData[1]["user_id"]}",\n "activity_id": "${sessionData[1]["activity_id"]}",\n "session_id": "${sessionData[1]["session_id"]}",\n "score": 35.5,\n "max_score": 42.25\n },\n {\n "responses": [\n {\n "response_id": ${sessionData[2]["responseIdsArray"][0]},\n "dt_score_updated": "${sessionData[2]["dt_score_updated"]}",\n "score": 10,\n "max_score": 10,\n "item_reference": "sessionsAPIAutogradedItem"\n }\n ],\n "user_id": "${sessionData[2]["user_id"]}",\n "activity_id": "${sessionData[2]["activity_id"]}",\n "session_id": "${sessionData[2]["session_id"]}",\n "score": 10,\n "max_score": 10\n }\n ]\n}\n`);
451
+ });
452
+ });
453
+ });
454
+ });