Branch data Line data Source code
1 [ + ]: 1 : /**
2 : 1 : * @module leaderboard-route-test
3 : 1 : * @desc The leaderboard-api leaderboard route testing module.
4 : 1 : * @version 1.0.0
5 : 1 : * @author Essam A. El-Sherif
6 : 1 : */
7 : 1 :
8 : 1 : /* Import node.js core modules */
9 : 1 : import assert from 'node:assert/strict';
10 : 1 : import fs from 'node:fs';
11 : 1 : import http from 'node:http';
12 : 1 : import https from 'node:https';
13 : 1 : import runner from 'node:test';
14 : 1 : import { fileURLToPath } from 'node:url';
15 : 1 : import { dirname, join } from 'node:path';
16 : 1 :
17 : 1 : /* Import package dependencies */
18 : 1 : import dotenv from 'dotenv';
19 : 1 :
20 : 1 : /* Import local dependencies */
21 : 1 : import { TestData } from './test-data.js';
22 : 1 :
23 : 1 : /* Emulate commonJS __filename and __dirname constants */
24 : 1 : const __filename = fileURLToPath(import.meta.url);
25 : 1 : const __dirname = dirname(__filename);
26 : 1 :
27 : 1 : /* Configure dotenv path to read the package .env file */
28 : 1 : dotenv.config({path: join(__dirname, '../.env')});
29 : 1 :
30 : 1 : /* Prepare test environment */
31 : 1 : const suites = new Map();
32 : 1 :
33 : 1 : const url = new URL('http://server');
34 : 1 :
35 : 1 : url.host = process.env.lb_serverHost;
36 : 1 : url.port = process.env.lb_serverPort;
37 : 1 : url.pathname = process.env.lb_serverPath;
38 : 1 :
39 : 1 : if(process.env.lb_serverProtocol === 'https'){
40 : 1 : url.protocol = 'https';
41 : 1 : }
42 : 1 : const baseUrl = `${url.href}/leaderboard`;
43 : 1 :
44 : 1 : let testUsers = null;
45 : 1 :
46 : 1 : /**
47 : 1 : * @func Main
48 : 1 : * @async
49 : 1 : * @desc The module entry point function.
50 : 1 : */
51 [ + ]: 1 : (async () => {
52 : 1 : const testData = new TestData(3, 3, false);
53 : 1 : testUsers = testData.testUsers;
54 : 1 :
55 : 1 : await testData.unregisterTestUsers();
56 : 1 : await testData.registerTestUsers();
57 : 1 : await testData.registerTestActivities();
58 : 1 :
59 : 1 : loadTestData();
60 : 1 :
61 [ + ]: 1 : runner.after(async() => {
62 : 1 : await testData.unregisterTestUsers();
63 : 1 : });
64 : 1 : nodeRunner(runner);
65 : 1 :
66 : 1 : })('Main Function');
67 : 1 :
68 : 1 : /**
69 : 1 : * @func loadTestData
70 : 1 : * @desc Load test data.
71 : 1 : */
72 [ + ]: 1 : function loadTestData(){
73 : 1 :
74 : 1 : let testData = null;
75 : 1 : let suiteDesc = '';
76 : 1 : let testObj = null;
77 : 1 :
78 : 1 : // TEST SUITE ### - Test Leaderboard Route - Endpoint /global
79 : 1 : suiteDesc = 'Test Leaderboard Route - Endpoint /global';
80 : 1 : suites.set(suiteDesc, []);
81 : 1 :
82 : 1 : // TEST ### - Test endpoint /global invalid ... test#1
83 : 1 : testData = {};
84 : 1 :
85 : 1 : testObj = {
86 : 1 : reqUrl : `${baseUrl}/global`,
87 : 1 : reqMethod: 'GET',
88 : 1 : reqAuth: undefined,
89 : 1 : resCode: 401,
90 : 1 : resBody: 'Authorization Error: No authorization token was found',
91 : 1 : };
92 : 1 :
93 : 1 : testData.method = testMethod.bind(testObj);
94 : 1 : testData.desc = 'Test endpoint /global invalid ... test#1';
95 : 1 :
96 : 1 : testData.skip = false;
97 : 1 : suites.get(suiteDesc).push(testData);
98 : 1 :
99 : 1 : // TEST ### - Test endpoint /global valid ... test#2
100 : 1 : testData = {};
101 : 1 :
102 : 1 : testObj = {
103 : 1 : reqUrl : `${baseUrl}/global`,
104 : 1 : reqMethod: 'GET',
105 : 1 : reqAuth: testUsers[0].token,
106 : 1 : resCode: 200,
107 : 1 : resBody: [
108 : 1 : { activity: 'activity-3', username: 'user@3', score: '330', rank: 1 },
109 : 1 : { activity: 'activity-3', username: 'user@2', score: '320', rank: 2 },
110 : 1 : { activity: 'activity-3', username: 'user@1', score: '310', rank: 3 },
111 : 1 : { activity: 'activity-2', username: 'user@3', score: '230', rank: 4 },
112 : 1 : { activity: 'activity-2', username: 'user@2', score: '220', rank: 5 },
113 : 1 : { activity: 'activity-2', username: 'user@1', score: '210', rank: 6 },
114 : 1 : { activity: 'activity-1', username: 'user@3', score: '130', rank: 7 },
115 : 1 : { activity: 'activity-1', username: 'user@2', score: '120', rank: 8 },
116 : 1 : { activity: 'activity-1', username: 'user@1', score: '110', rank: 9 }
117 : 1 : ]
118 : 1 : };
119 : 1 :
120 : 1 : testData.method = testMethod.bind(testObj);
121 : 1 : testData.desc = 'Test endpoint /global valid ... test#2';
122 : 1 :
123 : 1 : testData.skip = false;
124 : 1 : suites.get(suiteDesc).push(testData);
125 : 1 :
126 : 1 : // TEST ### - Test endpoint /global/top valid ... test#3
127 : 1 : testData = {};
128 : 1 :
129 : 1 : testObj = {
130 : 1 : reqUrl : `${baseUrl}/global/top`,
131 : 1 : reqMethod: 'GET',
132 : 1 : reqAuth: testUsers[0].token,
133 : 1 : resCode: 200,
134 : 1 : resBody: [
135 : 1 : { activity: 'activity-3', username: 'user@3', score: '330', rank: 1 },
136 : 1 : { activity: 'activity-3', username: 'user@2', score: '320', rank: 2 },
137 : 1 : { activity: 'activity-3', username: 'user@1', score: '310', rank: 3 },
138 : 1 : { activity: 'activity-2', username: 'user@3', score: '230', rank: 4 },
139 : 1 : { activity: 'activity-2', username: 'user@2', score: '220', rank: 5 },
140 : 1 : ]
141 : 1 : };
142 : 1 :
143 : 1 : testData.method = testMethod.bind(testObj);
144 : 1 : testData.desc = 'Test endpoint /global/top valid ... test#3';
145 : 1 :
146 : 1 : testData.skip = false;
147 : 1 : suites.get(suiteDesc).push(testData);
148 : 1 :
149 : 1 : // TEST ### - Test endpoint /global/top/0 invalid ... test#4
150 : 1 : testData = {};
151 : 1 :
152 : 1 : testObj = {
153 : 1 : reqUrl : `${baseUrl}/global/top/0`,
154 : 1 : reqMethod: 'GET',
155 : 1 : reqAuth: testUsers[0].token,
156 : 1 : resCode: 400,
157 : 1 : resBody: 'Retrieval Error: invalid top count'
158 : 1 : };
159 : 1 :
160 : 1 : testData.method = testMethod.bind(testObj);
161 : 1 : testData.desc = 'Test endpoint /global/top/0 invalid ... test#4';
162 : 1 :
163 : 1 : testData.skip = false;
164 : 1 : suites.get(suiteDesc).push(testData);
165 : 1 :
166 : 1 : // TEST ### - Test endpoint /global/top/x0 invalid ... test#5
167 : 1 : testData = {};
168 : 1 :
169 : 1 : testObj = {
170 : 1 : reqUrl : `${baseUrl}/global/top/x0`,
171 : 1 : reqMethod: 'GET',
172 : 1 : reqAuth: testUsers[0].token,
173 : 1 : resCode: 400,
174 : 1 : resBody: 'Retrieval Error: invalid top count'
175 : 1 : };
176 : 1 :
177 : 1 : testData.method = testMethod.bind(testObj);
178 : 1 : testData.desc = 'Test endpoint /global/top/x0 invalid ... test#5';
179 : 1 :
180 : 1 : testData.skip = false;
181 : 1 : suites.get(suiteDesc).push(testData);
182 : 1 :
183 : 1 : // TEST ### - Test endpoint /global/top/3.5 invalid ... test#6
184 : 1 : testData = {};
185 : 1 :
186 : 1 : testObj = {
187 : 1 : reqUrl : `${baseUrl}/global/top/3.5`,
188 : 1 : reqMethod: 'GET',
189 : 1 : reqAuth: testUsers[0].token,
190 : 1 : resCode: 400,
191 : 1 : resBody: 'Retrieval Error: invalid top count'
192 : 1 : };
193 : 1 :
194 : 1 : testData.method = testMethod.bind(testObj);
195 : 1 : testData.desc = 'Test endpoint /global/top/3.5 invalid ... test#6';
196 : 1 :
197 : 1 : testData.skip = false;
198 : 1 : suites.get(suiteDesc).push(testData);
199 : 1 :
200 : 1 : // TEST ### - Test endpoint /global/top/5 valid ... test#7
201 : 1 : testData = {};
202 : 1 :
203 : 1 : testObj = {
204 : 1 : reqUrl : `${baseUrl}/global/top/5`,
205 : 1 : reqMethod: 'GET',
206 : 1 : reqAuth: testUsers[0].token,
207 : 1 : resCode: 200,
208 : 1 : resBody: [
209 : 1 : { activity: 'activity-3', username: 'user@3', score: '330', rank: 1 },
210 : 1 : { activity: 'activity-3', username: 'user@2', score: '320', rank: 2 },
211 : 1 : { activity: 'activity-3', username: 'user@1', score: '310', rank: 3 },
212 : 1 : { activity: 'activity-2', username: 'user@3', score: '230', rank: 4 },
213 : 1 : { activity: 'activity-2', username: 'user@2', score: '220', rank: 5 },
214 : 1 : ]
215 : 1 : };
216 : 1 :
217 : 1 : testData.method = testMethod.bind(testObj);
218 : 1 : testData.desc = 'Test endpoint /global/top/5 valid ... test#7';
219 : 1 :
220 : 1 : testData.skip = false;
221 : 1 : suites.get(suiteDesc).push(testData);
222 : 1 :
223 : 1 : // TEST ### - Test endpoint /global/user invalid ... test#8
224 : 1 : testData = {};
225 : 1 :
226 : 1 : testObj = {
227 : 1 : reqUrl : `${baseUrl}/global/user`,
228 : 1 : reqMethod: 'GET',
229 : 1 : reqAuth: testUsers[0].token,
230 : 1 : resCode: 404,
231 : 1 : resBody: 'Retrieval Error: invalid endpoint'
232 : 1 : };
233 : 1 :
234 : 1 : testData.method = testMethod.bind(testObj);
235 : 1 : testData.desc = 'Test endpoint /global/user invalid ... test#8';
236 : 1 :
237 : 1 : testData.skip = false;
238 : 1 : suites.get(suiteDesc).push(testData);
239 : 1 :
240 : 1 : // TEST ### - Test endpoint /global/user/xxx valid ... test#9
241 : 1 : testData = {};
242 : 1 :
243 : 1 : testObj = {
244 : 1 : reqUrl : `${baseUrl}/global/user/xxx`,
245 : 1 : reqMethod: 'GET',
246 : 1 : reqAuth: testUsers[0].token,
247 : 1 : resCode: 200,
248 : 1 : resBody: []
249 : 1 : };
250 : 1 :
251 : 1 : testData.method = testMethod.bind(testObj);
252 : 1 : testData.desc = 'Test endpoint /global/user/xxx valid ... test#9';
253 : 1 :
254 : 1 : testData.skip = false;
255 : 1 : suites.get(suiteDesc).push(testData);
256 : 1 :
257 : 1 : // TEST ### - Test endpoint /global/user/user@1 valid ... test#10
258 : 1 : testData = {};
259 : 1 :
260 : 1 : testObj = {
261 : 1 : reqUrl : `${baseUrl}/global/user/user@1`,
262 : 1 : reqMethod: 'GET',
263 : 1 : reqAuth: testUsers[0].token,
264 : 1 : resCode: 200,
265 : 1 : resBody: [
266 : 1 : { activity: 'activity-3', username: 'user@1', score: '310', rank: 1 },
267 : 1 : { activity: 'activity-2', username: 'user@1', score: '210', rank: 2 },
268 : 1 : { activity: 'activity-1', username: 'user@1', score: '110', rank: 3 }
269 : 1 : ]
270 : 1 : };
271 : 1 :
272 : 1 : testData.method = testMethod.bind(testObj);
273 : 1 : testData.desc = 'Test endpoint /global/user/user@1 valid ... test#10';
274 : 1 :
275 : 1 : testData.skip = false;
276 : 1 : suites.get(suiteDesc).push(testData);
277 : 1 :
278 : 1 : // TEST ### - Test endpoint /global/xxx invalid ... test#11
279 : 1 : testData = {};
280 : 1 :
281 : 1 : testObj = {
282 : 1 : reqUrl : `${baseUrl}/global/xxx`,
283 : 1 : reqMethod: 'POST',
284 : 1 : reqAuth: testUsers[0].token,
285 : 1 : resCode: 404,
286 : 1 : resBody: `Retrieval Error: invalid request method 'POST'`
287 : 1 : };
288 : 1 :
289 : 1 : testData.method = testMethod.bind(testObj);
290 : 1 : testData.desc = 'Test endpoint /global/xxx invalid ... test#11';
291 : 1 :
292 : 1 : testData.skip = false;
293 : 1 : suites.get(suiteDesc).push(testData);
294 : 1 :
295 : 1 : // TEST ### - Test endpoint /global/xxx invalid ... test#12
296 : 1 : testData = {};
297 : 1 :
298 : 1 : testObj = {
299 : 1 : reqUrl : `${baseUrl}/global/xxx`,
300 : 1 : reqMethod: 'GET',
301 : 1 : reqAuth: testUsers[0].token,
302 : 1 : resCode: 404,
303 : 1 : resBody: `Retrieval Error: invalid endpoint`
304 : 1 : };
305 : 1 :
306 : 1 : testData.method = testMethod.bind(testObj);
307 : 1 : testData.desc = 'Test endpoint /global/xxx invalid ... test#12';
308 : 1 :
309 : 1 : testData.skip = false;
310 : 1 : suites.get(suiteDesc).push(testData);
311 : 1 :
312 : 1 :
313 : 1 :
314 : 1 :
315 : 1 :
316 : 1 :
317 : 1 :
318 : 1 :
319 : 1 :
320 : 1 :
321 : 1 : // TEST SUITE ### - Test Leaderboard Route - Endpoint /:activity
322 : 1 : suiteDesc = 'Test Leaderboard Route - Endpoint /:activity';
323 : 1 : suites.set(suiteDesc, []);
324 : 1 :
325 : 1 : // TEST ### - Test endpoint /activity-1 invalid ... test#1
326 : 1 : testData = {};
327 : 1 :
328 : 1 : testObj = {
329 : 1 : reqUrl : `${baseUrl}/activity-1`,
330 : 1 : reqMethod: 'GET',
331 : 1 : reqAuth: undefined,
332 : 1 : resCode: 401,
333 : 1 : resBody: 'Authorization Error: No authorization token was found',
334 : 1 : };
335 : 1 :
336 : 1 : testData.method = testMethod.bind(testObj);
337 : 1 : testData.desc = 'Test endpoint /activity-1 invalid ... test#1';
338 : 1 :
339 : 1 : testData.skip = false;
340 : 1 : suites.get(suiteDesc).push(testData);
341 : 1 :
342 : 1 : // TEST ### - Test endpoint /activity-1 valid ... test#2
343 : 1 : testData = {};
344 : 1 :
345 : 1 : testObj = {
346 : 1 : reqUrl : `${baseUrl}/activity-1`,
347 : 1 : reqMethod: 'GET',
348 : 1 : reqAuth: testUsers[0].token,
349 : 1 : resCode: 200,
350 : 1 : resBody: [
351 : 1 : { activity: 'activity-1', username: 'user@3', score: '130', rank: 1 },
352 : 1 : { activity: 'activity-1', username: 'user@2', score: '120', rank: 2 },
353 : 1 : { activity: 'activity-1', username: 'user@1', score: '110', rank: 3 }
354 : 1 : ],
355 : 1 : };
356 : 1 :
357 : 1 : testData.method = testMethod.bind(testObj);
358 : 1 : testData.desc = 'Test endpoint /activity-1 valid ... test#2';
359 : 1 :
360 : 1 : testData.skip = false;
361 : 1 : suites.get(suiteDesc).push(testData);
362 : 1 :
363 : 1 : // TEST ### - Test endpoint /activity-1/top valid ... test#3
364 : 1 : testData = {};
365 : 1 :
366 : 1 : testObj = {
367 : 1 : reqUrl : `${baseUrl}/activity-1/top`,
368 : 1 : reqMethod: 'GET',
369 : 1 : reqAuth: testUsers[0].token,
370 : 1 : resCode: 200,
371 : 1 : resBody: [
372 : 1 : { activity: 'activity-1', username: 'user@3', score: '130', rank: 1 },
373 : 1 : { activity: 'activity-1', username: 'user@2', score: '120', rank: 2 },
374 : 1 : { activity: 'activity-1', username: 'user@1', score: '110', rank: 3 }
375 : 1 : ],
376 : 1 : };
377 : 1 :
378 : 1 : testData.method = testMethod.bind(testObj);
379 : 1 : testData.desc = 'Test endpoint /activity-1/top valid ... test#3';
380 : 1 :
381 : 1 : testData.skip = false;
382 : 1 : suites.get(suiteDesc).push(testData);
383 : 1 :
384 : 1 : // TEST ### - Test endpoint /activity-1/top/0 invalid ... test#4
385 : 1 : testData = {};
386 : 1 :
387 : 1 : testObj = {
388 : 1 : reqUrl : `${baseUrl}/activity-1/top/0`,
389 : 1 : reqMethod: 'GET',
390 : 1 : reqAuth: testUsers[0].token,
391 : 1 : resCode: 400,
392 : 1 : resBody: 'Retrieval Error: invalid top count'
393 : 1 : };
394 : 1 :
395 : 1 : testData.method = testMethod.bind(testObj);
396 : 1 : testData.desc = 'Test endpoint /activity-1/top/0 invalid ... test#4';
397 : 1 :
398 : 1 : testData.skip = false;
399 : 1 : suites.get(suiteDesc).push(testData);
400 : 1 :
401 : 1 : // TEST ### - Test endpoint /activity-1/top/x0 invalid ... test#5
402 : 1 : testData = {};
403 : 1 :
404 : 1 : testObj = {
405 : 1 : reqUrl : `${baseUrl}/activity-1/top/x0`,
406 : 1 : reqMethod: 'GET',
407 : 1 : reqAuth: testUsers[0].token,
408 : 1 : resCode: 400,
409 : 1 : resBody: 'Retrieval Error: invalid top count'
410 : 1 : };
411 : 1 :
412 : 1 : testData.method = testMethod.bind(testObj);
413 : 1 : testData.desc = 'Test endpoint /activity-1/top/x0 invalid ... test#5';
414 : 1 :
415 : 1 : testData.skip = false;
416 : 1 : suites.get(suiteDesc).push(testData);
417 : 1 :
418 : 1 : // TEST ### - Test endpoint /activity-1/top/3.5 invalid ... test#6
419 : 1 : testData = {};
420 : 1 :
421 : 1 : testObj = {
422 : 1 : reqUrl : `${baseUrl}/activity-1/top/3.5`,
423 : 1 : reqMethod: 'GET',
424 : 1 : reqAuth: testUsers[0].token,
425 : 1 : resCode: 400,
426 : 1 : resBody: 'Retrieval Error: invalid top count'
427 : 1 : };
428 : 1 :
429 : 1 : testData.method = testMethod.bind(testObj);
430 : 1 : testData.desc = 'Test endpoint /activity-1/top/3.5 invalid ... test#6';
431 : 1 :
432 : 1 : testData.skip = false;
433 : 1 : suites.get(suiteDesc).push(testData);
434 : 1 :
435 : 1 : // TEST ### - Test endpoint /activity-1/top/2 valid ... test#7
436 : 1 : testData = {};
437 : 1 :
438 : 1 : testObj = {
439 : 1 : reqUrl : `${baseUrl}/activity-1/top/2`,
440 : 1 : reqMethod: 'GET',
441 : 1 : reqAuth: testUsers[0].token,
442 : 1 : resCode: 200,
443 : 1 : resBody: [
444 : 1 : { activity: 'activity-1', username: 'user@3', score: '130', rank: 1 },
445 : 1 : { activity: 'activity-1', username: 'user@2', score: '120', rank: 2 },
446 : 1 : ]
447 : 1 : };
448 : 1 :
449 : 1 : testData.method = testMethod.bind(testObj);
450 : 1 : testData.desc = 'Test endpoint /activity-1/top/2 valid ... test#7';
451 : 1 :
452 : 1 : testData.skip = false;
453 : 1 : suites.get(suiteDesc).push(testData);
454 : 1 :
455 : 1 : // TEST ### - Test endpoint /activity-1/user invalid ... test#8
456 : 1 : testData = {};
457 : 1 :
458 : 1 : testObj = {
459 : 1 : reqUrl : `${baseUrl}/activity-1/user`,
460 : 1 : reqMethod: 'GET',
461 : 1 : reqAuth: testUsers[0].token,
462 : 1 : resCode: 404,
463 : 1 : resBody: 'Retrieval Error: invalid endpoint'
464 : 1 : };
465 : 1 :
466 : 1 : testData.method = testMethod.bind(testObj);
467 : 1 : testData.desc = 'Test endpoint /activity-1/user invalid ... test#8';
468 : 1 :
469 : 1 : testData.skip = false;
470 : 1 : suites.get(suiteDesc).push(testData);
471 : 1 :
472 : 1 : // TEST ### - Test endpoint /activity-1/user/xxx valid ... test#9
473 : 1 : testData = {};
474 : 1 :
475 : 1 : testObj = {
476 : 1 : reqUrl : `${baseUrl}/activity-1/user/xxx`,
477 : 1 : reqMethod: 'GET',
478 : 1 : reqAuth: testUsers[0].token,
479 : 1 : resCode: 200,
480 : 1 : resBody: {}
481 : 1 : };
482 : 1 :
483 : 1 : testData.method = testMethod.bind(testObj);
484 : 1 : testData.desc = 'Test endpoint /activity-1/user/xxx valid ... test#9';
485 : 1 :
486 : 1 : testData.skip = false;
487 : 1 : suites.get(suiteDesc).push(testData);
488 : 1 :
489 : 1 : // TEST ### - Test endpoint /activity-1/user/user@1 valid ... test#10
490 : 1 : testData = {};
491 : 1 :
492 : 1 : testObj = {
493 : 1 : reqUrl : `${baseUrl}/activity-1/user/user@1`,
494 : 1 : reqMethod: 'GET',
495 : 1 : reqAuth: testUsers[0].token,
496 : 1 : resCode: 200,
497 : 1 : resBody: { activity: 'activity-1', username: 'user@1', score: '110', rank: 3}
498 : 1 : };
499 : 1 :
500 : 1 : testData.method = testMethod.bind(testObj);
501 : 1 : testData.desc = 'Test endpoint /activity-1/user/user@1 valid ... test#10';
502 : 1 :
503 : 1 : testData.skip = false;
504 : 1 : suites.get(suiteDesc).push(testData);
505 : 1 :
506 : 1 : // TEST ### - Test endpoint /activity-1/xxx invalid ... test#11
507 : 1 : testData = {};
508 : 1 :
509 : 1 : testObj = {
510 : 1 : reqUrl : `${baseUrl}/activity-1/xxx`,
511 : 1 : reqMethod: 'POST',
512 : 1 : reqAuth: testUsers[0].token,
513 : 1 : resCode: 404,
514 : 1 : resBody: `Retrieval Error: invalid request method 'POST'`
515 : 1 : };
516 : 1 :
517 : 1 : testData.method = testMethod.bind(testObj);
518 : 1 : testData.desc = 'Test endpoint /activity-1/xxx invalid ... test#11';
519 : 1 :
520 : 1 : testData.skip = false;
521 : 1 : suites.get(suiteDesc).push(testData);
522 : 1 :
523 : 1 : // TEST ### - Test endpoint /activity-1/xxx invalid ... test#12
524 : 1 : testData = {};
525 : 1 :
526 : 1 : testObj = {
527 : 1 : reqUrl : `${baseUrl}/activity-1/xxx`,
528 : 1 : reqMethod: 'GET',
529 : 1 : reqAuth: testUsers[0].token,
530 : 1 : resCode: 404,
531 : 1 : resBody: `Retrieval Error: invalid endpoint`
532 : 1 : };
533 : 1 :
534 : 1 : testData.method = testMethod.bind(testObj);
535 : 1 : testData.desc = 'Test endpoint /activity-1/xxx invalid ... test#12';
536 : 1 :
537 : 1 : testData.skip = false;
538 : 1 : suites.get(suiteDesc).push(testData);
539 : 1 : }
540 : 1 :
541 : 1 : /**
542 : 1 : * @func nodeRunner
543 : 1 : * @param {object} runner - The node core module 'node:test' object.
544 : 1 : * @desc Carry out the loaded tests using node test runner.
545 : 1 : */
546 [ + ]: 1 : function nodeRunner(runner){
547 : 1 :
548 [ + ]: 1 : for(let [suiteDesc, suiteTests] of suites){
549 [ + ]: 2 : runner.suite(suiteDesc, () => {
550 [ + ]: 2 : for(let cmdObj of suiteTests){
551 [ + ]: 24 : runner.test(cmdObj.desc, {skip: cmdObj.skip}, async () => {
552 : 24 : await cmdObj.method();
553 : 24 : });
554 : 24 : }
555 : 2 : });
556 : 2 : }
557 : 1 : }
558 : 1 :
559 : 1 : /**
560 : 1 : * @func
561 : 1 : * @async
562 : 1 : * @desc Carries out the assertions tests.
563 : 1 : */
564 [ + ]: 24 : async function testMethod(){
565 [ + ]: 24 : await new Promise((resolve, reject) => {
566 : 24 :
567 : 24 : let module = http;
568 : 24 : let reqOptions = { method: this.reqMethod };
569 : 24 :
570 : 24 : if(new URL(this.reqUrl).protocol === 'https:'){
571 : 24 : module = https;
572 : 24 : reqOptions.rejectUnauthorized = false;
573 : 24 : }
574 : 24 :
575 [ + ]: 24 : const cr = module.request(this.reqUrl, reqOptions, (res) => {
576 : 24 : let body = '';
577 [ + ]: 24 : res.on('data', (chunk) => {
578 : 24 : body += chunk;
579 : 24 : });
580 : 24 :
581 [ + ]: 24 : res.on('end', () => {
582 : 24 : try{
583 : 24 : assert.strictEqual(res.statusCode, this.resCode);
584 : 24 :
585 [ + ]: 24 : if(typeof this.resBody === 'string'){
586 : 14 : assert.strictEqual(body, this.resBody);
587 [ + ]: 14 : }
588 : 10 : else
589 : 10 : if(typeof this.resBody === 'object'){
590 : 10 : assert.deepStrictEqual(
591 [ + ][ + ][ + ]: 10 : JSON.parse(body, (key, value) => key !== 'timestamp' ? value : undefined),
592 : 10 : this.resBody
593 : 10 : );
594 : 10 : }
595 : 24 : resolve();
596 : 24 : }
597 [ - ]: 24 : catch(err){ /* node:coverage disable */
598 : : reject(err);
599 : : } /* node:coverage enable */
600 : 24 : });
601 : 24 : });
602 : 24 :
603 [ + ]: 24 : if(this.reqAuth){
604 : 22 : cr.setHeader('Authorization', `Bearer ${this.reqAuth}`);
605 : 22 : }
606 : 24 : cr.end();
607 : 24 : });
608 : 24 : }
|