@nestia/e2e 10.0.2 → 11.0.0-dev.20260312
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/LICENSE +21 -21
- package/README.md +93 -93
- package/lib/ArrayUtil.js +34 -148
- package/lib/ArrayUtil.js.map +1 -1
- package/lib/DynamicExecutor.js +79 -276
- package/lib/DynamicExecutor.js.map +1 -1
- package/lib/GaffComparator.js +18 -26
- package/lib/GaffComparator.js.map +1 -1
- package/lib/MapUtil.js +1 -1
- package/lib/MapUtil.js.map +1 -1
- package/lib/RandomGenerator.js +34 -50
- package/lib/RandomGenerator.js.map +1 -1
- package/lib/TestValidator.js +70 -218
- package/lib/TestValidator.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/internal/json_equal_to.js +26 -44
- package/lib/internal/json_equal_to.js.map +1 -1
- package/package.json +19 -21
- package/src/ArrayUtil.ts +320 -320
- package/src/GaffComparator.ts +287 -287
- package/src/MapUtil.ts +86 -86
- package/src/RandomGenerator.ts +490 -490
- package/src/TestValidator.ts +635 -635
- package/src/module.ts +7 -7
package/lib/RandomGenerator.js
CHANGED
|
@@ -35,12 +35,12 @@ exports.RandomGenerator = void 0;
|
|
|
35
35
|
var RandomGenerator;
|
|
36
36
|
(function (RandomGenerator) {
|
|
37
37
|
/** Character set containing lowercase alphabetical characters a-z */
|
|
38
|
-
|
|
38
|
+
const CHARACTERS = "abcdefghijklmnopqrstuvwxyz";
|
|
39
39
|
/**
|
|
40
40
|
* Character set containing digits (0-9) and lowercase alphabetical characters
|
|
41
41
|
* (a-z)
|
|
42
42
|
*/
|
|
43
|
-
|
|
43
|
+
const LETTERS = "0123456789" + CHARACTERS;
|
|
44
44
|
/**
|
|
45
45
|
* Generates a random string containing only lowercase alphabetical
|
|
46
46
|
* characters.
|
|
@@ -66,12 +66,10 @@ var RandomGenerator;
|
|
|
66
66
|
* @param length - The desired length of the generated alphabetic string
|
|
67
67
|
* @returns A string containing only lowercase letters of the specified length
|
|
68
68
|
*/
|
|
69
|
-
RandomGenerator.alphabets =
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
.join("");
|
|
74
|
-
};
|
|
69
|
+
RandomGenerator.alphabets = (length) => new Array(length)
|
|
70
|
+
.fill("")
|
|
71
|
+
.map(() => CHARACTERS[randint(0, CHARACTERS.length - 1)])
|
|
72
|
+
.join("");
|
|
75
73
|
/**
|
|
76
74
|
* Generates a random alphanumeric string containing digits and lowercase
|
|
77
75
|
* letters.
|
|
@@ -100,12 +98,10 @@ var RandomGenerator;
|
|
|
100
98
|
* @returns A string containing digits and lowercase letters of the specified
|
|
101
99
|
* length
|
|
102
100
|
*/
|
|
103
|
-
RandomGenerator.alphaNumeric =
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.join("");
|
|
108
|
-
};
|
|
101
|
+
RandomGenerator.alphaNumeric = (length) => new Array(length)
|
|
102
|
+
.fill("")
|
|
103
|
+
.map(() => LETTERS[randint(0, LETTERS.length - 1)])
|
|
104
|
+
.join("");
|
|
109
105
|
/**
|
|
110
106
|
* Generates a random name-like string with realistic length variation.
|
|
111
107
|
*
|
|
@@ -135,12 +131,9 @@ var RandomGenerator;
|
|
|
135
131
|
* @returns A space-separated string of random words (each 3-7 chars by
|
|
136
132
|
* default)
|
|
137
133
|
*/
|
|
138
|
-
RandomGenerator.name =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
sentences: length,
|
|
142
|
-
});
|
|
143
|
-
};
|
|
134
|
+
RandomGenerator.name = (length = randint(2, 3)) => RandomGenerator.paragraph({
|
|
135
|
+
sentences: length,
|
|
136
|
+
});
|
|
144
137
|
/**
|
|
145
138
|
* Generates a random paragraph with configurable sentence structure.
|
|
146
139
|
*
|
|
@@ -180,11 +173,11 @@ var RandomGenerator;
|
|
|
180
173
|
* length ranges
|
|
181
174
|
* @returns A string containing the generated paragraph
|
|
182
175
|
*/
|
|
183
|
-
RandomGenerator.paragraph =
|
|
176
|
+
RandomGenerator.paragraph = (props) => {
|
|
184
177
|
var _a;
|
|
185
178
|
return new Array((_a = props === null || props === void 0 ? void 0 : props.sentences) !== null && _a !== void 0 ? _a : randint(2, 5))
|
|
186
179
|
.fill("")
|
|
187
|
-
.map(
|
|
180
|
+
.map(() => { var _a, _b; return RandomGenerator.alphabets(randint((_a = props === null || props === void 0 ? void 0 : props.wordMin) !== null && _a !== void 0 ? _a : 3, (_b = props === null || props === void 0 ? void 0 : props.wordMax) !== null && _b !== void 0 ? _b : 7)); })
|
|
188
181
|
.join(" ");
|
|
189
182
|
};
|
|
190
183
|
/**
|
|
@@ -247,11 +240,11 @@ var RandomGenerator;
|
|
|
247
240
|
* word parameters
|
|
248
241
|
* @returns A string containing the generated multi-paragraph content
|
|
249
242
|
*/
|
|
250
|
-
RandomGenerator.content =
|
|
243
|
+
RandomGenerator.content = (props) => {
|
|
251
244
|
var _a;
|
|
252
245
|
return new Array((_a = props === null || props === void 0 ? void 0 : props.paragraphs) !== null && _a !== void 0 ? _a : randint(3, 8))
|
|
253
246
|
.fill("")
|
|
254
|
-
.map(
|
|
247
|
+
.map(() => {
|
|
255
248
|
var _a, _b, _c, _d;
|
|
256
249
|
return RandomGenerator.paragraph({
|
|
257
250
|
sentences: randint((_a = props === null || props === void 0 ? void 0 : props.sentenceMin) !== null && _a !== void 0 ? _a : 10, (_b = props === null || props === void 0 ? void 0 : props.sentenceMax) !== null && _b !== void 0 ? _b : 40),
|
|
@@ -293,9 +286,9 @@ var RandomGenerator;
|
|
|
293
286
|
* @param content - The source string to extract a substring from
|
|
294
287
|
* @returns A trimmed substring of the original content
|
|
295
288
|
*/
|
|
296
|
-
RandomGenerator.substring =
|
|
297
|
-
|
|
298
|
-
|
|
289
|
+
RandomGenerator.substring = (content) => {
|
|
290
|
+
const first = randint(0, content.length - 1);
|
|
291
|
+
const last = randint(first + 1, content.length);
|
|
299
292
|
return content.substring(first, last).trim();
|
|
300
293
|
};
|
|
301
294
|
/**
|
|
@@ -333,17 +326,14 @@ var RandomGenerator;
|
|
|
333
326
|
* @param prefix - The prefix string for the phone number (default: "010")
|
|
334
327
|
* @returns A formatted mobile phone number string
|
|
335
328
|
*/
|
|
336
|
-
RandomGenerator.mobile =
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
randint(0, 9999).toString().padStart(4, "0"),
|
|
345
|
-
].join("");
|
|
346
|
-
};
|
|
329
|
+
RandomGenerator.mobile = (prefix = "010") => [
|
|
330
|
+
prefix,
|
|
331
|
+
(() => {
|
|
332
|
+
const value = randint(0, 9999);
|
|
333
|
+
return value.toString().padStart(value < 1000 ? 3 : 4, "0");
|
|
334
|
+
})(),
|
|
335
|
+
randint(0, 9999).toString().padStart(4, "0"),
|
|
336
|
+
].join("");
|
|
347
337
|
/**
|
|
348
338
|
* Generates a random date within a specified range from a starting point.
|
|
349
339
|
*
|
|
@@ -383,9 +373,7 @@ var RandomGenerator;
|
|
|
383
373
|
* @param range - The range in milliseconds from the starting date
|
|
384
374
|
* @returns A random date within the specified range
|
|
385
375
|
*/
|
|
386
|
-
RandomGenerator.date =
|
|
387
|
-
return new Date(from.getTime() + randint(0, range));
|
|
388
|
-
};
|
|
376
|
+
RandomGenerator.date = (from, range) => new Date(from.getTime() + randint(0, range));
|
|
389
377
|
/**
|
|
390
378
|
* Randomly samples a specified number of unique elements from an array.
|
|
391
379
|
*
|
|
@@ -423,12 +411,12 @@ var RandomGenerator;
|
|
|
423
411
|
* @param count - The number of elements to sample
|
|
424
412
|
* @returns An array containing the randomly selected elements
|
|
425
413
|
*/
|
|
426
|
-
RandomGenerator.sample =
|
|
414
|
+
RandomGenerator.sample = (array, count) => {
|
|
427
415
|
count = Math.min(count, array.length);
|
|
428
|
-
|
|
416
|
+
const indexes = new Set();
|
|
429
417
|
while (indexes.size < count)
|
|
430
418
|
indexes.add(randint(0, array.length - 1));
|
|
431
|
-
return Array.from(indexes).map(
|
|
419
|
+
return Array.from(indexes).map((i) => array[i]);
|
|
432
420
|
};
|
|
433
421
|
/**
|
|
434
422
|
* Randomly selects a single element from an array.
|
|
@@ -469,12 +457,8 @@ var RandomGenerator;
|
|
|
469
457
|
* @param array - The source array to pick an element from
|
|
470
458
|
* @returns A randomly selected element from the array
|
|
471
459
|
*/
|
|
472
|
-
RandomGenerator.pick =
|
|
473
|
-
return array[randint(0, array.length - 1)];
|
|
474
|
-
};
|
|
460
|
+
RandomGenerator.pick = (array) => array[randint(0, array.length - 1)];
|
|
475
461
|
})(RandomGenerator || (exports.RandomGenerator = RandomGenerator = {}));
|
|
476
462
|
/** @internal */
|
|
477
|
-
|
|
478
|
-
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
479
|
-
};
|
|
463
|
+
const randint = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
|
|
480
464
|
//# sourceMappingURL=RandomGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RandomGenerator.js","sourceRoot":"","sources":["../src/RandomGenerator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,IAAiB,eAAe,CAsc/B;AAtcD,WAAiB,eAAe;IAC9B,qEAAqE;IACrE,
|
|
1
|
+
{"version":3,"file":"RandomGenerator.js","sourceRoot":"","sources":["../src/RandomGenerator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,IAAiB,eAAe,CAsc/B;AAtcD,WAAiB,eAAe;IAC9B,qEAAqE;IACrE,MAAM,UAAU,GAAG,4BAA4B,CAAC;IAEhD;;;OAGG;IACH,MAAM,OAAO,GAAW,YAAY,GAAG,UAAU,CAAC;IAElD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACU,yBAAS,GAAG,CAAC,MAAc,EAAU,EAAE,CAClD,IAAI,KAAK,CAAC,MAAM,CAAC;SACd,IAAI,CAAC,EAAE,CAAC;SACR,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SACxD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACU,4BAAY,GAAG,CAAC,MAAc,EAAU,EAAE,CACrD,IAAI,KAAK,CAAC,MAAM,CAAC;SACd,IAAI,CAAC,EAAE,CAAC;SACR,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACU,oBAAI,GAAG,CAAC,SAAiB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,CAC7D,gBAAA,SAAS,CAAC;QACR,SAAS,EAAE,MAAM;KAClB,CAAC,CAAC;IAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACU,yBAAS,GAAG,CACvB,KAIE,EACF,EAAE;;QACF,OAAA,IAAI,KAAK,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACzC,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,GAAG,EAAE,eAAC,OAAA,gBAAA,SAAS,CAAC,OAAO,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,CAAC,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,CAAC,CAAC,CAAC,CAAA,EAAA,CAAC;aACvE,IAAI,CAAC,GAAG,CAAC,CAAA;KAAA,CAAC;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2DG;IACU,uBAAO,GAAG,CACrB,KAME,EACF,EAAE;;QACF,OAAA,IAAI,KAAK,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,mCAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,GAAG,EAAE;;YACR,OAAA,gBAAA,SAAS,CAAC;gBACR,SAAS,EAAE,OAAO,CAChB,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,mCAAI,EAAE,EACxB,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,mCAAI,EAAE,CACzB;gBACD,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,CAAC;gBAC5B,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,CAAC;aAC7B,CAAC,CAAA;SAAA,CACH;aACA,IAAI,CAAC,MAAM,CAAC,CAAA;KAAA,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACU,yBAAS,GAAG,CAAC,OAAe,EAAU,EAAE;QACnD,MAAM,KAAK,GAAW,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,IAAI,GAAW,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAExD,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACU,sBAAM,GAAG,CAAC,SAAiB,KAAK,EAAU,EAAE,CACvD;QACE,MAAM;QACN,CAAC,GAAG,EAAE;YACJ,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,EAAE;QACJ,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;KAC7C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACU,oBAAI,GAAG,CAAC,IAAU,EAAE,KAAa,EAAQ,EAAE,CACtD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACU,sBAAM,GAAG,CAAI,KAAU,EAAE,KAAa,EAAO,EAAE;QAC1D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,IAAI,GAAG,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACU,oBAAI,GAAG,CAAI,KAAmB,EAAK,EAAE,CAChD,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;AACzC,CAAC,EAtcgB,eAAe,+BAAf,eAAe,QAsc/B;AAED,gBAAgB;AAChB,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE,CACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC"}
|
package/lib/TestValidator.js
CHANGED
|
@@ -8,73 +8,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __values = (this && this.__values) || function(o) {
|
|
39
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
-
if (m) return m.call(o);
|
|
41
|
-
if (o && typeof o.length === "number") return {
|
|
42
|
-
next: function () {
|
|
43
|
-
if (o && i >= o.length) o = void 0;
|
|
44
|
-
return { value: o && o[i++], done: !o };
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
-
};
|
|
49
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
50
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
51
|
-
if (!m) return o;
|
|
52
|
-
var i = m.call(o), r, ar = [], e;
|
|
53
|
-
try {
|
|
54
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
55
|
-
}
|
|
56
|
-
catch (error) { e = { error: error }; }
|
|
57
|
-
finally {
|
|
58
|
-
try {
|
|
59
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
60
|
-
}
|
|
61
|
-
finally { if (e) throw e.error; }
|
|
62
|
-
}
|
|
63
|
-
return ar;
|
|
64
|
-
};
|
|
65
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
66
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
67
|
-
if (ar || !(i in from)) {
|
|
68
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
69
|
-
ar[i] = from[i];
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
73
|
-
};
|
|
74
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
12
|
exports.TestValidator = void 0;
|
|
76
|
-
|
|
77
|
-
|
|
13
|
+
const RandomGenerator_1 = require("./RandomGenerator");
|
|
14
|
+
const json_equal_to_1 = require("./internal/json_equal_to");
|
|
78
15
|
/**
|
|
79
16
|
* A comprehensive collection of E2E validation utilities for testing
|
|
80
17
|
* applications.
|
|
@@ -103,7 +40,6 @@ var json_equal_to_1 = require("./internal/json_equal_to");
|
|
|
103
40
|
*/
|
|
104
41
|
var TestValidator;
|
|
105
42
|
(function (TestValidator) {
|
|
106
|
-
var _this = this;
|
|
107
43
|
/**
|
|
108
44
|
* Validates that a given condition evaluates to true.
|
|
109
45
|
*
|
|
@@ -133,9 +69,7 @@ var TestValidator;
|
|
|
133
69
|
* @throws Error with descriptive message when condition is not satisfied
|
|
134
70
|
*/
|
|
135
71
|
function predicate(title, condition) {
|
|
136
|
-
|
|
137
|
-
return "Bug on ".concat(title, ": expected condition is not satisfied.");
|
|
138
|
-
};
|
|
72
|
+
const message = () => `Bug on ${title}: expected condition is not satisfied.`;
|
|
139
73
|
// SCALAR
|
|
140
74
|
if (typeof condition === "boolean") {
|
|
141
75
|
if (condition !== true)
|
|
@@ -143,16 +77,16 @@ var TestValidator;
|
|
|
143
77
|
return undefined;
|
|
144
78
|
}
|
|
145
79
|
// CLOSURE
|
|
146
|
-
|
|
80
|
+
const output = condition();
|
|
147
81
|
if (typeof output === "boolean") {
|
|
148
82
|
if (output !== true)
|
|
149
83
|
throw new Error(message());
|
|
150
84
|
return undefined;
|
|
151
85
|
}
|
|
152
86
|
// ASYNCHRONOUS
|
|
153
|
-
return new Promise(
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
154
88
|
output
|
|
155
|
-
.then(
|
|
89
|
+
.then((flag) => {
|
|
156
90
|
if (flag === true)
|
|
157
91
|
resolve();
|
|
158
92
|
else
|
|
@@ -198,12 +132,12 @@ var TestValidator;
|
|
|
198
132
|
* @throws Error with detailed diff information when values are not equal
|
|
199
133
|
*/
|
|
200
134
|
function equals(title, X, y, exception) {
|
|
201
|
-
|
|
135
|
+
const diff = (0, json_equal_to_1.json_equal_to)(exception !== null && exception !== void 0 ? exception : (() => false))(X)(y);
|
|
202
136
|
if (diff.length)
|
|
203
137
|
throw new Error([
|
|
204
|
-
|
|
138
|
+
`Bug on ${title}: found different values - [${diff.join(", ")}]:`,
|
|
205
139
|
"\n",
|
|
206
|
-
JSON.stringify({ x: X, y
|
|
140
|
+
JSON.stringify({ x: X, y }, null, 2),
|
|
207
141
|
].join("\n"));
|
|
208
142
|
}
|
|
209
143
|
TestValidator.equals = equals;
|
|
@@ -242,12 +176,12 @@ var TestValidator;
|
|
|
242
176
|
* @throws Error when values are equal (indicating validation failure)
|
|
243
177
|
*/
|
|
244
178
|
function notEquals(title, x, y, exception) {
|
|
245
|
-
|
|
179
|
+
const diff = (0, json_equal_to_1.json_equal_to)(exception !== null && exception !== void 0 ? exception : (() => false))(x)(y);
|
|
246
180
|
if (diff.length === 0)
|
|
247
181
|
throw new Error([
|
|
248
|
-
|
|
182
|
+
`Bug on ${title}: values should be different but are equal:`,
|
|
249
183
|
"\n",
|
|
250
|
-
JSON.stringify({ x
|
|
184
|
+
JSON.stringify({ x, y }, null, 2),
|
|
251
185
|
].join("\n"));
|
|
252
186
|
}
|
|
253
187
|
TestValidator.notEquals = notEquals;
|
|
@@ -283,13 +217,11 @@ var TestValidator;
|
|
|
283
217
|
* @throws Error when the task function does not throw an error or reject
|
|
284
218
|
*/
|
|
285
219
|
function error(title, task) {
|
|
286
|
-
|
|
220
|
+
const message = () => `Bug on ${title}: exception must be thrown.`;
|
|
287
221
|
try {
|
|
288
|
-
|
|
289
|
-
if (is_promise(
|
|
290
|
-
return new Promise(
|
|
291
|
-
return output_1.catch(function () { return resolve(); }).then(function () { return reject(message()); });
|
|
292
|
-
});
|
|
222
|
+
const output = task();
|
|
223
|
+
if (is_promise(output))
|
|
224
|
+
return new Promise((resolve, reject) => output.catch(() => resolve()).then(() => reject(message())));
|
|
293
225
|
else
|
|
294
226
|
throw new Error(message());
|
|
295
227
|
}
|
|
@@ -333,39 +265,33 @@ var TestValidator;
|
|
|
333
265
|
function httpError(title, status, task) {
|
|
334
266
|
if (typeof status === "number")
|
|
335
267
|
status = [status];
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
: new Error(message(typeof exp === "object" && exp.constructor.name === "HttpError"
|
|
347
|
-
? exp.status
|
|
348
|
-
: undefined));
|
|
349
|
-
};
|
|
268
|
+
const message = (actual) => typeof actual === "number"
|
|
269
|
+
? `Bug on ${title}: status code must be ${status.join(" or ")}, but ${actual}.`
|
|
270
|
+
: `Bug on ${title}: status code must be ${status.join(" or ")}, but succeeded.`;
|
|
271
|
+
const predicate = (exp) => typeof exp === "object" &&
|
|
272
|
+
exp.constructor.name === "HttpError" &&
|
|
273
|
+
status.some((val) => val === exp.status)
|
|
274
|
+
? null
|
|
275
|
+
: new Error(message(typeof exp === "object" && exp.constructor.name === "HttpError"
|
|
276
|
+
? exp.status
|
|
277
|
+
: undefined));
|
|
350
278
|
try {
|
|
351
|
-
|
|
352
|
-
if (is_promise(
|
|
353
|
-
return new Promise(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
.then(function () { return reject(new Error(message())); });
|
|
363
|
-
});
|
|
279
|
+
const output = task();
|
|
280
|
+
if (is_promise(output))
|
|
281
|
+
return new Promise((resolve, reject) => output
|
|
282
|
+
.catch((exp) => {
|
|
283
|
+
const res = predicate(exp);
|
|
284
|
+
if (res)
|
|
285
|
+
reject(res);
|
|
286
|
+
else
|
|
287
|
+
resolve();
|
|
288
|
+
})
|
|
289
|
+
.then(() => reject(new Error(message()))));
|
|
364
290
|
else
|
|
365
291
|
throw new Error(message());
|
|
366
292
|
}
|
|
367
293
|
catch (exp) {
|
|
368
|
-
|
|
294
|
+
const res = predicate(exp);
|
|
369
295
|
if (res)
|
|
370
296
|
throw res;
|
|
371
297
|
return undefined;
|
|
@@ -403,16 +329,15 @@ var TestValidator;
|
|
|
403
329
|
* @param trace - Optional flag to enable debug logging (default: false)
|
|
404
330
|
* @throws Error when entity order differs between expected and actual results
|
|
405
331
|
*/
|
|
406
|
-
TestValidator.index =
|
|
407
|
-
|
|
408
|
-
var length = Math.min(expected.length, gotten.length);
|
|
332
|
+
TestValidator.index = (title, expected, gotten, trace = false) => {
|
|
333
|
+
const length = Math.min(expected.length, gotten.length);
|
|
409
334
|
expected = expected.slice(0, length);
|
|
410
335
|
gotten = gotten.slice(0, length);
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
.filter(
|
|
336
|
+
const xIds = get_ids(expected).slice(0, length);
|
|
337
|
+
const yIds = get_ids(gotten)
|
|
338
|
+
.filter((id) => id >= xIds[0])
|
|
414
339
|
.slice(0, length);
|
|
415
|
-
|
|
340
|
+
const equals = xIds.every((x, i) => x === yIds[i]);
|
|
416
341
|
if (equals === true)
|
|
417
342
|
return;
|
|
418
343
|
else if (trace === true)
|
|
@@ -420,7 +345,7 @@ var TestValidator;
|
|
|
420
345
|
expected: xIds,
|
|
421
346
|
gotten: yIds,
|
|
422
347
|
});
|
|
423
|
-
throw new Error(
|
|
348
|
+
throw new Error(`Bug on ${title}: result of the index is different with manual aggregation.`);
|
|
424
349
|
};
|
|
425
350
|
/**
|
|
426
351
|
* Validates search functionality by testing API results against manual
|
|
@@ -475,63 +400,15 @@ var TestValidator;
|
|
|
475
400
|
* @returns A function that accepts search configuration properties
|
|
476
401
|
* @throws Error when API search results don't match manual filtering results
|
|
477
402
|
*/
|
|
478
|
-
TestValidator.search =
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
_loop_1 = function (s) {
|
|
488
|
-
var values, filtered, gotten;
|
|
489
|
-
return __generator(this, function (_c) {
|
|
490
|
-
switch (_c.label) {
|
|
491
|
-
case 0:
|
|
492
|
-
values = props.values(s);
|
|
493
|
-
filtered = total.filter(function (entity) {
|
|
494
|
-
return props.filter(entity, values);
|
|
495
|
-
});
|
|
496
|
-
return [4 /*yield*/, getter(props.request(values))];
|
|
497
|
-
case 1:
|
|
498
|
-
gotten = _c.sent();
|
|
499
|
-
TestValidator.index("".concat(title, " (").concat(props.fields.join(", "), ")"), filtered, gotten);
|
|
500
|
-
return [2 /*return*/];
|
|
501
|
-
}
|
|
502
|
-
});
|
|
503
|
-
};
|
|
504
|
-
_b.label = 1;
|
|
505
|
-
case 1:
|
|
506
|
-
_b.trys.push([1, 6, 7, 8]);
|
|
507
|
-
samples_1 = __values(samples), samples_1_1 = samples_1.next();
|
|
508
|
-
_b.label = 2;
|
|
509
|
-
case 2:
|
|
510
|
-
if (!!samples_1_1.done) return [3 /*break*/, 5];
|
|
511
|
-
s = samples_1_1.value;
|
|
512
|
-
return [5 /*yield**/, _loop_1(s)];
|
|
513
|
-
case 3:
|
|
514
|
-
_b.sent();
|
|
515
|
-
_b.label = 4;
|
|
516
|
-
case 4:
|
|
517
|
-
samples_1_1 = samples_1.next();
|
|
518
|
-
return [3 /*break*/, 2];
|
|
519
|
-
case 5: return [3 /*break*/, 8];
|
|
520
|
-
case 6:
|
|
521
|
-
e_1_1 = _b.sent();
|
|
522
|
-
e_1 = { error: e_1_1 };
|
|
523
|
-
return [3 /*break*/, 8];
|
|
524
|
-
case 7:
|
|
525
|
-
try {
|
|
526
|
-
if (samples_1_1 && !samples_1_1.done && (_a = samples_1.return)) _a.call(samples_1);
|
|
527
|
-
}
|
|
528
|
-
finally { if (e_1) throw e_1.error; }
|
|
529
|
-
return [7 /*endfinally*/];
|
|
530
|
-
case 8: return [2 /*return*/];
|
|
531
|
-
}
|
|
532
|
-
});
|
|
533
|
-
}); };
|
|
534
|
-
};
|
|
403
|
+
TestValidator.search = (title, getter, total, sampleCount = 1) => (props) => __awaiter(this, void 0, void 0, function* () {
|
|
404
|
+
const samples = RandomGenerator_1.RandomGenerator.sample(total, sampleCount);
|
|
405
|
+
for (const s of samples) {
|
|
406
|
+
const values = props.values(s);
|
|
407
|
+
const filtered = total.filter((entity) => props.filter(entity, values));
|
|
408
|
+
const gotten = yield getter(props.request(values));
|
|
409
|
+
TestValidator.index(`${title} (${props.fields.join(", ")})`, filtered, gotten);
|
|
410
|
+
}
|
|
411
|
+
});
|
|
535
412
|
/**
|
|
536
413
|
* Validates sorting functionality of pagination APIs.
|
|
537
414
|
*
|
|
@@ -582,49 +459,24 @@ var TestValidator;
|
|
|
582
459
|
* @throws Error when API results are not properly sorted according to
|
|
583
460
|
* specification
|
|
584
461
|
*/
|
|
585
|
-
TestValidator.sort =
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
if (trace === void 0) { trace = false; }
|
|
600
|
-
return __generator(this, function (_a) {
|
|
601
|
-
switch (_a.label) {
|
|
602
|
-
case 0: return [4 /*yield*/, getter(fields.map(function (field) { return "".concat(direction).concat(field); }))];
|
|
603
|
-
case 1:
|
|
604
|
-
data = _a.sent();
|
|
605
|
-
if (filter)
|
|
606
|
-
data = data.filter(filter);
|
|
607
|
-
reversed = direction === "+" ? comp : function (x, y) { return comp(y, x); };
|
|
608
|
-
if (is_sorted(data, reversed) === false) {
|
|
609
|
-
if (fields.length === 1 &&
|
|
610
|
-
data.length &&
|
|
611
|
-
data[0][fields[0]] !== undefined &&
|
|
612
|
-
trace)
|
|
613
|
-
console.log(data.map(function (elem) { return elem[fields[0]]; }));
|
|
614
|
-
throw new Error("Bug on ".concat(title, ": wrong sorting on ").concat(direction, "(").concat(fields.join(", "), ")."));
|
|
615
|
-
}
|
|
616
|
-
return [2 /*return*/];
|
|
617
|
-
}
|
|
618
|
-
});
|
|
619
|
-
});
|
|
620
|
-
};
|
|
621
|
-
};
|
|
622
|
-
};
|
|
623
|
-
};
|
|
462
|
+
TestValidator.sort = (title, getter) => (...fields) => (comp, filter) => (direction_1, ...args_1) => __awaiter(this, [direction_1, ...args_1], void 0, function* (direction, trace = false) {
|
|
463
|
+
let data = yield getter(fields.map((field) => `${direction}${field}`));
|
|
464
|
+
if (filter)
|
|
465
|
+
data = data.filter(filter);
|
|
466
|
+
const reversed = direction === "+" ? comp : (x, y) => comp(y, x);
|
|
467
|
+
if (is_sorted(data, reversed) === false) {
|
|
468
|
+
if (fields.length === 1 &&
|
|
469
|
+
data.length &&
|
|
470
|
+
data[0][fields[0]] !== undefined &&
|
|
471
|
+
trace)
|
|
472
|
+
console.log(data.map((elem) => elem[fields[0]]));
|
|
473
|
+
throw new Error(`Bug on ${title}: wrong sorting on ${direction}(${fields.join(", ")}).`);
|
|
474
|
+
}
|
|
475
|
+
});
|
|
624
476
|
})(TestValidator || (exports.TestValidator = TestValidator = {}));
|
|
625
477
|
/** @internal */
|
|
626
478
|
function get_ids(entities) {
|
|
627
|
-
return entities.map(
|
|
479
|
+
return entities.map((entity) => entity.id).sort((x, y) => (x < y ? -1 : 1));
|
|
628
480
|
}
|
|
629
481
|
/** @internal */
|
|
630
482
|
function is_promise(input) {
|
|
@@ -635,7 +487,7 @@ function is_promise(input) {
|
|
|
635
487
|
}
|
|
636
488
|
/** @internal */
|
|
637
489
|
function is_sorted(data, comp) {
|
|
638
|
-
for (
|
|
490
|
+
for (let i = 1; i < data.length; ++i)
|
|
639
491
|
if (comp(data[i - 1], data[i]) > 0)
|
|
640
492
|
return false;
|
|
641
493
|
return true;
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
|