@nestia/e2e 13.0.4 → 14.0.1
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/README.md +1 -1
- package/lib/ArrayUtil.js +1 -1
- package/lib/ArrayUtil.js.map +1 -1
- package/lib/GaffComparator.js +9 -3
- package/lib/GaffComparator.js.map +1 -1
- package/lib/TestValidator.d.ts +5 -0
- package/lib/TestValidator.js +22 -8
- package/lib/TestValidator.js.map +1 -1
- package/lib/internal/json_equal_to.js +9 -0
- package/lib/internal/json_equal_to.js.map +1 -1
- package/package.json +1 -1
- package/src/ArrayUtil.ts +1 -1
- package/src/GaffComparator.ts +11 -3
- package/src/TestValidator.ts +26 -9
- package/src/internal/json_equal_to.ts +11 -0
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ Check out the document in the [website](https://nestia.io/docs/):
|
|
|
60
60
|
### 🏠 Home
|
|
61
61
|
- [Introduction](https://nestia.io/docs/)
|
|
62
62
|
- [Setup](https://nestia.io/docs/setup/)
|
|
63
|
-
- [Pure TypeScript](https://nestia.io/docs/
|
|
63
|
+
- [Pure TypeScript](https://nestia.io/docs/core/TypedBody/)
|
|
64
64
|
|
|
65
65
|
### 📖 Features
|
|
66
66
|
- Core Library
|
package/lib/ArrayUtil.js
CHANGED
|
@@ -200,7 +200,7 @@ var ArrayUtil;
|
|
|
200
200
|
* @param pred - The predicate function to test elements
|
|
201
201
|
* @returns Boolean indicating if any element satisfies the condition
|
|
202
202
|
*/
|
|
203
|
-
ArrayUtil.has = (elements, pred) => elements.
|
|
203
|
+
ArrayUtil.has = (elements, pred) => elements.some((elem) => pred(elem));
|
|
204
204
|
/**
|
|
205
205
|
* Executes a function a specified number of times and collects the results
|
|
206
206
|
* into an array.
|
package/lib/ArrayUtil.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../src/ArrayUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,IAAiB,SAAS,CA4SzB;AA5SD,WAAiB,SAAS;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACU,qBAAW,GAAG,CACzB,QAA0B,EAC1B,IAIqB,EACH,EAAE;QACpB,MAAM,GAAG,GAAY,EAAE,CAAC;QACxB,MAAM,sBAAY,CAAC,QAAQ,EAAE,CAAO,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,IAAI,KAAK,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAA,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACU,sBAAY,GAAG,CAC1B,QAA0B,EAC1B,OAIiB,EACF,EAAE;QACjB,MAAM,qBAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAC3C,CAAC;IACJ,CAAC,CAAA,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACU,kBAAQ,GAAG,CACtB,QAA0B,EAC1B,OAIoB,EACD,EAAE;QACrB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,sBAAY,CAAC,QAAQ,EAAE,CAAO,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,MAAM,GAAW,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAA,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACU,qBAAW,GAAG,CACzB,KAAa,EACb,OAAsC,EACxB,EAAE;QAChB,MAAM,OAAO,GAAa,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC,CAAA,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACU,aAAG,GAAG,CACjB,QAAsB,EACtB,IAA0B,EACjB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../src/ArrayUtil.ts"],"names":[],"mappings":"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"}
|
package/lib/GaffComparator.js
CHANGED
|
@@ -110,7 +110,7 @@ var GaffComparator;
|
|
|
110
110
|
GaffComparator.strings = (getter) => (x, y) => {
|
|
111
111
|
const a = wrap(getter(x));
|
|
112
112
|
const b = wrap(getter(y));
|
|
113
|
-
const idx = a
|
|
113
|
+
const idx = mismatch(a, b);
|
|
114
114
|
return idx !== -1 ? compare(a[idx], b[idx]) : a.length - b.length;
|
|
115
115
|
};
|
|
116
116
|
/**
|
|
@@ -192,7 +192,7 @@ var GaffComparator;
|
|
|
192
192
|
const take = (v) => wrap(getter(v)).map((str) => new Date(str).getTime());
|
|
193
193
|
const a = take(x);
|
|
194
194
|
const b = take(y);
|
|
195
|
-
const idx = a
|
|
195
|
+
const idx = mismatch(a, b);
|
|
196
196
|
return idx !== -1 ? a[idx] - b[idx] : a.length - b.length;
|
|
197
197
|
};
|
|
198
198
|
/**
|
|
@@ -269,10 +269,16 @@ var GaffComparator;
|
|
|
269
269
|
GaffComparator.numbers = (closure) => (x, y) => {
|
|
270
270
|
const a = wrap(closure(x));
|
|
271
271
|
const b = wrap(closure(y));
|
|
272
|
-
const idx = a
|
|
272
|
+
const idx = mismatch(a, b);
|
|
273
273
|
return idx !== -1 ? a[idx] - b[idx] : a.length - b.length;
|
|
274
274
|
};
|
|
275
275
|
const compare = (x, y) => x.localeCompare(y);
|
|
276
|
+
/**
|
|
277
|
+
* The first index where the two key lists differ within their common length,
|
|
278
|
+
* or -1; beyond it a proper prefix orders before its extension, in both
|
|
279
|
+
* argument orders.
|
|
280
|
+
*/
|
|
281
|
+
const mismatch = (a, b) => a.findIndex((v, i) => i < b.length && v !== b[i]);
|
|
276
282
|
const wrap = (elem) => (Array.isArray(elem) ? elem : [elem]);
|
|
277
283
|
})(GaffComparator || (exports.GaffComparator = GaffComparator = {}));
|
|
278
284
|
//# sourceMappingURL=GaffComparator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,IAAiB,cAAc,
|
|
1
|
+
{"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,IAAiB,cAAc,CAwP9B;AAxPD,WAAiB,cAAc;IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACU,sBAAO,GAClB,CAAI,MAAuC,EAAE,EAAE,CAC/C,CAAC,CAAI,EAAE,CAAI,EAAU,EAAE;QACrB,MAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtE,CAAC,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0EG;IACU,oBAAK,GAChB,CAAI,MAAuC,EAAE,EAAE,CAC/C,CAAC,CAAI,EAAE,CAAI,EAAU,EAAE;QACrB,MAAM,IAAI,GAAG,CAAC,CAAI,EAAE,EAAE,CACpB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,GAAG,GAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsEG;IACU,sBAAO,GAClB,CAAI,OAAwC,EAAE,EAAE,CAChD,CAAC,CAAI,EAAE,CAAI,EAAU,EAAE;QACrB,MAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,GAAG,GAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAE7D;;;;OAIG;IACH,MAAM,QAAQ,GAAG,CAAI,CAAM,EAAE,CAAM,EAAU,EAAE,CAC7C,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,CAAI,IAAa,EAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC,EAxPgB,cAAc,aAAd,cAAc,GAAd,cAAc,QAwP9B"}
|
package/lib/TestValidator.d.ts
CHANGED
|
@@ -198,6 +198,10 @@ export declare namespace TestValidator {
|
|
|
198
198
|
* sequence. Commonly used for testing database queries, search results, and
|
|
199
199
|
* any paginated data APIs.
|
|
200
200
|
*
|
|
201
|
+
* A page holds the first entities, so only the common prefix of the two lists
|
|
202
|
+
* is compared. An empty result against expected entities, or the reverse,
|
|
203
|
+
* fails.
|
|
204
|
+
*
|
|
201
205
|
* @example
|
|
202
206
|
* ```typescript
|
|
203
207
|
* // Test article pagination
|
|
@@ -220,6 +224,7 @@ export declare namespace TestValidator {
|
|
|
220
224
|
* @param gotten - The actual entities returned by the API
|
|
221
225
|
* @param trace - Optional flag to enable debug logging (default: false)
|
|
222
226
|
* @throws Error when entity order differs between expected and actual results
|
|
227
|
+
* over their common prefix, or when exactly one of them is empty
|
|
223
228
|
*/
|
|
224
229
|
const index: <X extends IEntity<any>, Y extends X = X>(title: string, expected: X[], gotten: Y[], trace?: boolean) => void;
|
|
225
230
|
/**
|
package/lib/TestValidator.js
CHANGED
|
@@ -90,7 +90,7 @@ var TestValidator;
|
|
|
90
90
|
if (flag === true)
|
|
91
91
|
resolve();
|
|
92
92
|
else
|
|
93
|
-
reject(message());
|
|
93
|
+
reject(new Error(message()));
|
|
94
94
|
})
|
|
95
95
|
.catch(reject);
|
|
96
96
|
});
|
|
@@ -218,18 +218,17 @@ var TestValidator;
|
|
|
218
218
|
*/
|
|
219
219
|
function error(title, task) {
|
|
220
220
|
const message = () => `Bug on ${title}: exception must be thrown.`;
|
|
221
|
+
// only the task's own throw is caught: the failure below must escape
|
|
222
|
+
let output;
|
|
221
223
|
try {
|
|
222
|
-
|
|
223
|
-
if (is_promise(output))
|
|
224
|
-
return new Promise((resolve, reject) => output
|
|
225
|
-
.catch(() => resolve())
|
|
226
|
-
.then(() => reject(new Error(message()))));
|
|
227
|
-
else
|
|
228
|
-
throw new Error(message());
|
|
224
|
+
output = task();
|
|
229
225
|
}
|
|
230
226
|
catch (_a) {
|
|
231
227
|
return undefined;
|
|
232
228
|
}
|
|
229
|
+
if (is_promise(output))
|
|
230
|
+
return new Promise((resolve, reject) => output.catch(() => resolve()).then(() => reject(new Error(message()))));
|
|
231
|
+
throw new Error(message());
|
|
233
232
|
}
|
|
234
233
|
TestValidator.error = error;
|
|
235
234
|
/**
|
|
@@ -308,6 +307,10 @@ var TestValidator;
|
|
|
308
307
|
* sequence. Commonly used for testing database queries, search results, and
|
|
309
308
|
* any paginated data APIs.
|
|
310
309
|
*
|
|
310
|
+
* A page holds the first entities, so only the common prefix of the two lists
|
|
311
|
+
* is compared. An empty result against expected entities, or the reverse,
|
|
312
|
+
* fails.
|
|
313
|
+
*
|
|
311
314
|
* @example
|
|
312
315
|
* ```typescript
|
|
313
316
|
* // Test article pagination
|
|
@@ -330,8 +333,19 @@ var TestValidator;
|
|
|
330
333
|
* @param gotten - The actual entities returned by the API
|
|
331
334
|
* @param trace - Optional flag to enable debug logging (default: false)
|
|
332
335
|
* @throws Error when entity order differs between expected and actual results
|
|
336
|
+
* over their common prefix, or when exactly one of them is empty
|
|
333
337
|
*/
|
|
334
338
|
TestValidator.index = (title, expected, gotten, trace = false) => {
|
|
339
|
+
// a page holds the first entities, so only the common prefix is compared,
|
|
340
|
+
// but an empty side against a non-empty one has no prefix to prove
|
|
341
|
+
if ((expected.length === 0) !== (gotten.length === 0)) {
|
|
342
|
+
if (trace === true)
|
|
343
|
+
console.log({
|
|
344
|
+
expected: get_ids(expected),
|
|
345
|
+
gotten: get_ids(gotten),
|
|
346
|
+
});
|
|
347
|
+
throw new Error(`Bug on ${title}: result of the index is different with manual aggregation.`);
|
|
348
|
+
}
|
|
335
349
|
const length = Math.min(expected.length, gotten.length);
|
|
336
350
|
expected = expected.slice(0, length);
|
|
337
351
|
gotten = gotten.slice(0, length);
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoD;AACpD,4DAAyD;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,IAAiB,aAAa,
|
|
1
|
+
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ exports.json_equal_to = void 0;
|
|
|
4
4
|
const json_equal_to = (exception) => (x) => (y) => {
|
|
5
5
|
const container = [];
|
|
6
6
|
const iterate = (accessor) => (x) => (y) => {
|
|
7
|
+
// compare what JSON holds: a Date has no keys of its own and would
|
|
8
|
+
// equal every other Date, while its JSON form is the ISO string
|
|
9
|
+
x = toJSON(x);
|
|
10
|
+
y = toJSON(y);
|
|
7
11
|
if (typeof x === "function" || typeof y === "function")
|
|
8
12
|
return;
|
|
9
13
|
else if (typeof x !== typeof y)
|
|
@@ -39,4 +43,9 @@ const json_equal_to = (exception) => (x) => (y) => {
|
|
|
39
43
|
return container;
|
|
40
44
|
};
|
|
41
45
|
exports.json_equal_to = json_equal_to;
|
|
46
|
+
const toJSON = (value) => value !== null &&
|
|
47
|
+
typeof value === "object" &&
|
|
48
|
+
typeof value.toJSON === "function"
|
|
49
|
+
? value.toJSON()
|
|
50
|
+
: value;
|
|
42
51
|
//# sourceMappingURL=json_equal_to.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json_equal_to.js","sourceRoot":"","sources":["../../src/internal/json_equal_to.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GACxB,CAAC,SAAmC,EAAE,EAAE,CACxC,CAAI,CAAI,EAAE,EAAE,CACZ,CAAC,CAAuB,EAAY,EAAE;IACpC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GACX,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAM,EAAE,EAAE,CACX,CAAC,CAAM,EAAQ,EAAE;QACf,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,UAAU;YAAE,OAAO;aAC1D,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,qEAAqE;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,kDAAkD;aAC7C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,CAAC,YAAY,KAAK;YAC3B,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACxB,IAAI,CAAC,YAAY,MAAM;YAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC;IACJ,MAAM,KAAK,GACT,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAQ,EAAE,EAAE,CACb,CAAC,CAAQ,EAAQ,EAAE;QACjB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC;IACJ,MAAM,MAAM,GACV,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAM,EAAE,EAAE,CACX,CAAC,CAAM,EAAQ,EAAE,CACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACX,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACxD,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"json_equal_to.js","sourceRoot":"","sources":["../../src/internal/json_equal_to.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/ArrayUtil.ts
CHANGED
|
@@ -218,7 +218,7 @@ export namespace ArrayUtil {
|
|
|
218
218
|
export const has = <T>(
|
|
219
219
|
elements: readonly T[],
|
|
220
220
|
pred: (elem: T) => boolean,
|
|
221
|
-
): boolean => elements.
|
|
221
|
+
): boolean => elements.some((elem) => pred(elem));
|
|
222
222
|
|
|
223
223
|
/**
|
|
224
224
|
* Executes a function a specified number of times and collects the results
|
package/src/GaffComparator.ts
CHANGED
|
@@ -109,7 +109,7 @@ export namespace GaffComparator {
|
|
|
109
109
|
const a: string[] = wrap(getter(x));
|
|
110
110
|
const b: string[] = wrap(getter(y));
|
|
111
111
|
|
|
112
|
-
const idx: number = a
|
|
112
|
+
const idx: number = mismatch(a, b);
|
|
113
113
|
return idx !== -1 ? compare(a[idx]!, b[idx]!) : a.length - b.length;
|
|
114
114
|
};
|
|
115
115
|
|
|
@@ -196,7 +196,7 @@ export namespace GaffComparator {
|
|
|
196
196
|
const a: number[] = take(x);
|
|
197
197
|
const b: number[] = take(y);
|
|
198
198
|
|
|
199
|
-
const idx: number = a
|
|
199
|
+
const idx: number = mismatch(a, b);
|
|
200
200
|
return idx !== -1 ? a[idx]! - b[idx]! : a.length - b.length;
|
|
201
201
|
};
|
|
202
202
|
|
|
@@ -277,11 +277,19 @@ export namespace GaffComparator {
|
|
|
277
277
|
const a: number[] = wrap(closure(x));
|
|
278
278
|
const b: number[] = wrap(closure(y));
|
|
279
279
|
|
|
280
|
-
const idx: number = a
|
|
280
|
+
const idx: number = mismatch(a, b);
|
|
281
281
|
return idx !== -1 ? a[idx]! - b[idx]! : a.length - b.length;
|
|
282
282
|
};
|
|
283
283
|
|
|
284
284
|
const compare = (x: string, y: string) => x.localeCompare(y);
|
|
285
285
|
|
|
286
|
+
/**
|
|
287
|
+
* The first index where the two key lists differ within their common length,
|
|
288
|
+
* or -1; beyond it a proper prefix orders before its extension, in both
|
|
289
|
+
* argument orders.
|
|
290
|
+
*/
|
|
291
|
+
const mismatch = <K>(a: K[], b: K[]): number =>
|
|
292
|
+
a.findIndex((v, i) => i < b.length && v !== b[i]);
|
|
293
|
+
|
|
286
294
|
const wrap = <T>(elem: T | T[]): T[] => (Array.isArray(elem) ? elem : [elem]);
|
|
287
295
|
}
|
package/src/TestValidator.ts
CHANGED
|
@@ -83,7 +83,7 @@ export namespace TestValidator {
|
|
|
83
83
|
output
|
|
84
84
|
.then((flag) => {
|
|
85
85
|
if (flag === true) resolve();
|
|
86
|
-
else reject(message());
|
|
86
|
+
else reject(new Error(message()));
|
|
87
87
|
})
|
|
88
88
|
.catch(reject);
|
|
89
89
|
}) as any;
|
|
@@ -228,18 +228,18 @@ export namespace TestValidator {
|
|
|
228
228
|
task: () => T,
|
|
229
229
|
): T extends Promise<any> ? Promise<void> : void {
|
|
230
230
|
const message = () => `Bug on ${title}: exception must be thrown.`;
|
|
231
|
+
// only the task's own throw is caught: the failure below must escape
|
|
232
|
+
let output: T;
|
|
231
233
|
try {
|
|
232
|
-
|
|
233
|
-
if (is_promise(output))
|
|
234
|
-
return new Promise<void>((resolve, reject) =>
|
|
235
|
-
output
|
|
236
|
-
.catch(() => resolve())
|
|
237
|
-
.then(() => reject(new Error(message()))),
|
|
238
|
-
) as any;
|
|
239
|
-
else throw new Error(message());
|
|
234
|
+
output = task();
|
|
240
235
|
} catch {
|
|
241
236
|
return undefined as any;
|
|
242
237
|
}
|
|
238
|
+
if (is_promise(output))
|
|
239
|
+
return new Promise<void>((resolve, reject) =>
|
|
240
|
+
output.catch(() => resolve()).then(() => reject(new Error(message()))),
|
|
241
|
+
) as any;
|
|
242
|
+
throw new Error(message());
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
/**
|
|
@@ -328,6 +328,10 @@ export namespace TestValidator {
|
|
|
328
328
|
* sequence. Commonly used for testing database queries, search results, and
|
|
329
329
|
* any paginated data APIs.
|
|
330
330
|
*
|
|
331
|
+
* A page holds the first entities, so only the common prefix of the two lists
|
|
332
|
+
* is compared. An empty result against expected entities, or the reverse,
|
|
333
|
+
* fails.
|
|
334
|
+
*
|
|
331
335
|
* @example
|
|
332
336
|
* ```typescript
|
|
333
337
|
* // Test article pagination
|
|
@@ -350,6 +354,7 @@ export namespace TestValidator {
|
|
|
350
354
|
* @param gotten - The actual entities returned by the API
|
|
351
355
|
* @param trace - Optional flag to enable debug logging (default: false)
|
|
352
356
|
* @throws Error when entity order differs between expected and actual results
|
|
357
|
+
* over their common prefix, or when exactly one of them is empty
|
|
353
358
|
*/
|
|
354
359
|
export const index = <X extends IEntity<any>, Y extends X = X>(
|
|
355
360
|
title: string,
|
|
@@ -357,6 +362,18 @@ export namespace TestValidator {
|
|
|
357
362
|
gotten: Y[],
|
|
358
363
|
trace: boolean = false,
|
|
359
364
|
): void => {
|
|
365
|
+
// a page holds the first entities, so only the common prefix is compared,
|
|
366
|
+
// but an empty side against a non-empty one has no prefix to prove
|
|
367
|
+
if ((expected.length === 0) !== (gotten.length === 0)) {
|
|
368
|
+
if (trace === true)
|
|
369
|
+
console.log({
|
|
370
|
+
expected: get_ids(expected),
|
|
371
|
+
gotten: get_ids(gotten),
|
|
372
|
+
});
|
|
373
|
+
throw new Error(
|
|
374
|
+
`Bug on ${title}: result of the index is different with manual aggregation.`,
|
|
375
|
+
);
|
|
376
|
+
}
|
|
360
377
|
const length: number = Math.min(expected.length, gotten.length);
|
|
361
378
|
expected = expected.slice(0, length);
|
|
362
379
|
gotten = gotten.slice(0, length);
|
|
@@ -7,6 +7,10 @@ export const json_equal_to =
|
|
|
7
7
|
(accessor: string) =>
|
|
8
8
|
(x: any) =>
|
|
9
9
|
(y: any): void => {
|
|
10
|
+
// compare what JSON holds: a Date has no keys of its own and would
|
|
11
|
+
// equal every other Date, while its JSON form is the ISO string
|
|
12
|
+
x = toJSON(x);
|
|
13
|
+
y = toJSON(y);
|
|
10
14
|
if (typeof x === "function" || typeof y === "function") return;
|
|
11
15
|
else if (typeof x !== typeof y) container.push(accessor);
|
|
12
16
|
// `typeof null` is "object", so the check above does not separate an
|
|
@@ -40,3 +44,10 @@ export const json_equal_to =
|
|
|
40
44
|
iterate("")(x)(y);
|
|
41
45
|
return container;
|
|
42
46
|
};
|
|
47
|
+
|
|
48
|
+
const toJSON = (value: any): any =>
|
|
49
|
+
value !== null &&
|
|
50
|
+
typeof value === "object" &&
|
|
51
|
+
typeof value.toJSON === "function"
|
|
52
|
+
? value.toJSON()
|
|
53
|
+
: value;
|