@nestia/e2e 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RandomGenerator = void 0;
4
+ var tstl_1 = require("tstl");
5
+ var ranges_1 = require("tstl/ranges");
6
+ /**
7
+ * Random data generator.
8
+ *
9
+ * @author Jeongho Nam - https://github.com/samchon
10
+ */
11
+ var RandomGenerator;
12
+ (function (RandomGenerator) {
13
+ /* ----------------------------------------------------------------
14
+ IDENTIFICATIONS
15
+ ---------------------------------------------------------------- */
16
+ var CHARACTERS = "abcdefghijklmnopqrstuvwxyz";
17
+ var LETTERS = "0123456789" + CHARACTERS;
18
+ /**
19
+ * Generate random alphabets
20
+ *
21
+ * @param length Length of alphabets
22
+ * @returns Generated alphabets
23
+ */
24
+ function alphabets(length) {
25
+ return new Array(length)
26
+ .fill("")
27
+ .map(function () { return CHARACTERS[(0, tstl_1.randint)(0, CHARACTERS.length - 1)]; })
28
+ .join("");
29
+ }
30
+ RandomGenerator.alphabets = alphabets;
31
+ /**
32
+ * Generate random alpha-numeric characters.
33
+ *
34
+ * Generate random string constructed with only alphabets and numbers.
35
+ *
36
+ * @param length Length of characters
37
+ * @returns Generated string
38
+ */
39
+ function alphaNumeric(length) {
40
+ return new Array(length)
41
+ .fill("")
42
+ .map(function () { return LETTERS[(0, tstl_1.randint)(0, LETTERS.length - 1)]; })
43
+ .join("");
44
+ }
45
+ RandomGenerator.alphaNumeric = alphaNumeric;
46
+ /**
47
+ * Generate random name.
48
+ *
49
+ * @param length Length of paragraph, default is 2 or 3
50
+ * @returns Generated name
51
+ */
52
+ function name(length) {
53
+ if (length === void 0) { length = (0, tstl_1.randint)(2, 3); }
54
+ return RandomGenerator.paragraph(length)();
55
+ }
56
+ RandomGenerator.name = name;
57
+ /**
58
+ * Generate random paragraph.
59
+ *
60
+ * @param sentences Number of sentences
61
+ * @returns Paragraph generator
62
+ */
63
+ RandomGenerator.paragraph = function (sentences) {
64
+ /**
65
+ * @param wordMin Minimum number of characters in a sentence
66
+ * @param wordMax Maximum number of characters in a sentence
67
+ * @returns Generated paragraph
68
+ */
69
+ return function (wordMin, wordMax) {
70
+ if (wordMin === void 0) { wordMin = 3; }
71
+ if (wordMax === void 0) { wordMax = 7; }
72
+ return new Array(sentences)
73
+ .fill("")
74
+ .map(function () { return alphabets((0, tstl_1.randint)(wordMin, wordMax)); })
75
+ .join(" ");
76
+ };
77
+ };
78
+ /**
79
+ * Generate random content.
80
+ *
81
+ * @param paragraphes Number of paragraphes
82
+ * @returns Currying function
83
+ */
84
+ RandomGenerator.content = function (paragraphes) {
85
+ /**
86
+ * @param sentenceMin Minimum number of sentences in a paragraph
87
+ * @param sentenceMax Maximum number of sentences in a paragraph
88
+ * @returns Currying function
89
+ */
90
+ return function (sentenceMin, sentenceMax) {
91
+ if (sentenceMin === void 0) { sentenceMin = 10; }
92
+ if (sentenceMax === void 0) { sentenceMax = 40; }
93
+ /**
94
+ * @param wordMin Minimum number of characters in a sentence
95
+ * @param wordMax Maximum number of characters in a sentence
96
+ * @returns Content generator
97
+ */
98
+ return function (wordMin, wordMax) {
99
+ if (wordMin === void 0) { wordMin = 1; }
100
+ if (wordMax === void 0) { wordMax = 7; }
101
+ return new Array(paragraphes)
102
+ .fill("")
103
+ .map(function () {
104
+ return RandomGenerator.paragraph((0, tstl_1.randint)(sentenceMin, sentenceMax))(wordMin, wordMax);
105
+ })
106
+ .join("\n\n");
107
+ };
108
+ };
109
+ };
110
+ /**
111
+ * Generate random substring.
112
+ *
113
+ * @param content Target content
114
+ * @returns Random substring
115
+ */
116
+ function substring(content) {
117
+ var first = (0, tstl_1.randint)(0, content.length - 1);
118
+ var last = (0, tstl_1.randint)(first + 1, content.length);
119
+ return content.substring(first, last).trim();
120
+ }
121
+ RandomGenerator.substring = substring;
122
+ /**
123
+ * Generate random mobile number.
124
+ *
125
+ * @param prefix Prefix string, default is "010"
126
+ * @returns Random mobile number
127
+ */
128
+ function mobile(prefix) {
129
+ if (prefix === void 0) { prefix = "010"; }
130
+ return "".concat(prefix).concat(digit(3, 4)).concat(digit(4, 4));
131
+ }
132
+ RandomGenerator.mobile = mobile;
133
+ /**
134
+ * Generate random digit.
135
+ *
136
+ * Generate random digit that filling front with zero characters
137
+ * when value is less than maximum cipher.
138
+ *
139
+ * @param minC Minimum cipher
140
+ * @param maxC Maximum cipher
141
+ * @returns
142
+ */
143
+ function digit(minC, maxC) {
144
+ var val = (0, tstl_1.randint)(0, Math.pow(10.0, maxC) - 1);
145
+ var log10 = val ? Math.floor(Math.log10(val)) + 1 : 0;
146
+ var prefix = "0".repeat(Math.max(0, minC - log10));
147
+ return prefix + val.toString();
148
+ }
149
+ RandomGenerator.digit = digit;
150
+ /**
151
+ * Generate random date.
152
+ *
153
+ * @param from Start date
154
+ * @param range Range of random milliseconds
155
+ * @returns Random date
156
+ */
157
+ function date(from, range) {
158
+ var time = from.getTime() + (0, tstl_1.randint)(0, range);
159
+ return new Date(time);
160
+ }
161
+ RandomGenerator.date = date;
162
+ /**
163
+ * Pick random elements from an array.
164
+ *
165
+ * @param array Target array
166
+ * @param count Number of count to pick
167
+ * @returns Sampled array
168
+ */
169
+ function sample(array, count) {
170
+ var ret = [];
171
+ (0, ranges_1.sample)(array, (0, tstl_1.back_inserter)(ret), count);
172
+ return ret;
173
+ }
174
+ RandomGenerator.sample = sample;
175
+ /**
176
+ * Pick random element from an array.
177
+ *
178
+ * @param array Target array
179
+ * @returns picked element
180
+ */
181
+ function pick(array) {
182
+ return array[(0, tstl_1.randint)(0, array.length - 1)];
183
+ }
184
+ RandomGenerator.pick = pick;
185
+ })(RandomGenerator = exports.RandomGenerator || (exports.RandomGenerator = {}));
186
+ //# sourceMappingURL=RandomGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RandomGenerator.js","sourceRoot":"","sources":["../src/RandomGenerator.ts"],"names":[],"mappings":";;;AAAA,6BAA8C;AAC9C,sCAAgD;AAEhD;;;;GAIG;AACH,IAAiB,eAAe,CAyK/B;AAzKD,WAAiB,eAAe;IAC5B;;uEAEmE;IACnE,IAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,IAAM,OAAO,GAAW,YAAY,GAAG,UAAU,CAAC;IAElD;;;;;OAKG;IACH,SAAgB,SAAS,CAAC,MAAc;QACpC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,cAAM,OAAA,UAAU,CAAC,IAAA,cAAO,EAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAA7C,CAA6C,CAAC;aACxD,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IALe,yBAAS,YAKxB,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,YAAY,CAAC,MAAc;QACvC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,cAAM,OAAA,OAAO,CAAC,IAAA,cAAO,EAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAvC,CAAuC,CAAC;aAClD,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IALe,4BAAY,eAK3B,CAAA;IAED;;;;;OAKG;IACH,SAAgB,IAAI,CAAC,MAA8B;QAA9B,uBAAA,EAAA,aAAiB,cAAO,EAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,gBAAA,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/B,CAAC;IAFe,oBAAI,OAEnB,CAAA;IAED;;;;;OAKG;IACU,yBAAS,GAClB,UAAC,SAAiB;QAClB;;;;WAIG;QACH,OAAA,UAAC,OAAmB,EAAE,OAAmB;YAAxC,wBAAA,EAAA,WAAmB;YAAE,wBAAA,EAAA,WAAmB;YACrC,OAAA,IAAI,KAAK,CAAC,SAAS,CAAC;iBACf,IAAI,CAAC,EAAE,CAAC;iBACR,GAAG,CAAC,cAAM,OAAA,SAAS,CAAC,IAAA,cAAO,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAApC,CAAoC,CAAC;iBAC/C,IAAI,CAAC,GAAG,CAAC;QAHd,CAGc;IAJlB,CAIkB,CAAC;IAEvB;;;;;OAKG;IACU,uBAAO,GAChB,UAAC,WAAmB;QACpB;;;;WAIG;QACH,OAAA,UAAC,WAAwB,EAAE,WAAwB;YAAlD,4BAAA,EAAA,gBAAwB;YAAE,4BAAA,EAAA,gBAAwB;YACnD;;;;eAIG;YACH,OAAA,UAAC,OAAmB,EAAE,OAAmB;gBAAxC,wBAAA,EAAA,WAAmB;gBAAE,wBAAA,EAAA,WAAmB;gBACrC,OAAA,IAAI,KAAK,CAAC,WAAW,CAAC;qBACjB,IAAI,CAAC,EAAE,CAAC;qBACR,GAAG,CAAC;oBACD,OAAA,gBAAA,SAAS,CAAC,IAAA,cAAO,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CACxC,OAAO,EACP,OAAO,CACV;gBAHD,CAGC,CACJ;qBACA,IAAI,CAAC,MAAM,CAAC;YARjB,CAQiB;QATrB,CASqB;IAfrB,CAeqB,CAAC;IAE1B;;;;;OAKG;IACH,SAAgB,SAAS,CAAC,OAAe;QACrC,IAAM,KAAK,GAAW,IAAA,cAAO,EAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,IAAM,IAAI,GAAW,IAAA,cAAO,EAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAExD,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IALe,yBAAS,YAKxB,CAAA;IAED;;;;;OAKG;IACH,SAAgB,MAAM,CAAC,MAAsB;QAAtB,uBAAA,EAAA,cAAsB;QACzC,OAAO,UAAG,MAAM,SAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC;IACnD,CAAC;IAFe,sBAAM,SAErB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,KAAK,CAAC,IAAY,EAAE,IAAY;QAC5C,IAAM,GAAG,GAAW,IAAA,cAAO,EAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,IAAM,KAAK,GAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAM,MAAM,GAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;QAE7D,OAAO,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IANe,qBAAK,QAMpB,CAAA;IAED;;;;;;OAMG;IACH,SAAgB,IAAI,CAAC,IAAU,EAAE,KAAa;QAC1C,IAAM,IAAI,GAAW,IAAI,CAAC,OAAO,EAAE,GAAG,IAAA,cAAO,EAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAHe,oBAAI,OAGnB,CAAA;IAED;;;;;;OAMG;IACH,SAAgB,MAAM,CAAI,KAAU,EAAE,KAAa;QAC/C,IAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,IAAA,eAAO,EAAC,KAAK,EAAE,IAAA,oBAAa,EAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC;IACf,CAAC;IAJe,sBAAM,SAIrB,CAAA;IAED;;;;;OAKG;IACH,SAAgB,IAAI,CAAI,KAAU;QAC9B,OAAO,KAAK,CAAC,IAAA,cAAO,EAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAFe,oBAAI,OAEnB,CAAA;AACL,CAAC,EAzKgB,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAyK/B"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Elapsed time measurement utility.
3
+ *
4
+ * @author Sachon
5
+ */
6
+ export declare namespace StopWatch {
7
+ /**
8
+ * Type of task.
9
+ */
10
+ type Task = () => Promise<void>;
11
+ /**
12
+ *
13
+ * @param task
14
+ * @returns
15
+ */
16
+ function measure(task: Task): Promise<number>;
17
+ /**
18
+ *
19
+ * @param title
20
+ * @param task
21
+ * @returns
22
+ */
23
+ function trace(title: string, task: Task): Promise<number>;
24
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
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;
13
+ return g = { next: verb(0), "throw": verb(1), "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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.StopWatch = void 0;
40
+ /**
41
+ * Elapsed time measurement utility.
42
+ *
43
+ * @author Sachon
44
+ */
45
+ var StopWatch;
46
+ (function (StopWatch) {
47
+ /**
48
+ *
49
+ * @param task
50
+ * @returns
51
+ */
52
+ function measure(task) {
53
+ return __awaiter(this, void 0, void 0, function () {
54
+ var time;
55
+ return __generator(this, function (_a) {
56
+ switch (_a.label) {
57
+ case 0:
58
+ time = Date.now();
59
+ return [4 /*yield*/, task()];
60
+ case 1:
61
+ _a.sent();
62
+ return [2 /*return*/, Date.now() - time];
63
+ }
64
+ });
65
+ });
66
+ }
67
+ StopWatch.measure = measure;
68
+ /**
69
+ *
70
+ * @param title
71
+ * @param task
72
+ * @returns
73
+ */
74
+ function trace(title, task) {
75
+ return __awaiter(this, void 0, void 0, function () {
76
+ var time;
77
+ return __generator(this, function (_a) {
78
+ switch (_a.label) {
79
+ case 0:
80
+ process.stdout.write(" - ".concat(title, ": "));
81
+ return [4 /*yield*/, measure(task)];
82
+ case 1:
83
+ time = _a.sent();
84
+ console.log("".concat(time.toLocaleString(), " ms"));
85
+ return [2 /*return*/, time];
86
+ }
87
+ });
88
+ });
89
+ }
90
+ StopWatch.trace = trace;
91
+ })(StopWatch = exports.StopWatch || (exports.StopWatch = {}));
92
+ //# sourceMappingURL=StopWatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StopWatch.js","sourceRoot":"","sources":["../src/StopWatch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;GAIG;AACH,IAAiB,SAAS,CA8BzB;AA9BD,WAAiB,SAAS;IAMtB;;;;OAIG;IACH,SAAsB,OAAO,CAAC,IAAU;;;;;;wBAC9B,IAAI,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;wBAChC,qBAAM,IAAI,EAAE,EAAA;;wBAAZ,SAAY,CAAC;wBACb,sBAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAC;;;;KAC5B;IAJqB,iBAAO,UAI5B,CAAA;IAED;;;;;OAKG;IACH,SAAsB,KAAK,CAAC,KAAa,EAAE,IAAU;;;;;;wBACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAO,KAAK,OAAI,CAAC,CAAC;wBAClB,qBAAM,OAAO,CAAC,IAAI,CAAC,EAAA;;wBAAlC,IAAI,GAAW,SAAmB;wBAExC,OAAO,CAAC,GAAG,CAAC,UAAG,IAAI,CAAC,cAAc,EAAE,QAAK,CAAC,CAAC;wBAC3C,sBAAO,IAAI,EAAC;;;;KACf;IANqB,eAAK,QAM1B,CAAA;AACL,CAAC,EA9BgB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QA8BzB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Test validator.
3
+ *
4
+ * `TestValidator` is a collection gathering E2E validation functions.
5
+ *
6
+ * @author Jeongho Nam - https://github.com/samchon
7
+ */
8
+ export declare namespace TestValidator {
9
+ /**
10
+ * Test whether error occurs.
11
+ *
12
+ * If error occurs, nothing would be happened.
13
+ *
14
+ * However, no error exists, then exception would be thrown.
15
+ *
16
+ * @param title Title of exception because of no error exists
17
+ */
18
+ const error: (title: string) => (task: () => any | Promise<any>) => Promise<void>;
19
+ /**
20
+ * Validate index API.
21
+ *
22
+ * Test whether two indexed values are equal.
23
+ *
24
+ * If two values are different, then exception would be thrown.
25
+ *
26
+ * @param title Title of error message when different
27
+ */
28
+ const index: (title: string) => <Solution extends IEntity<any>>(expected: Solution[]) => <Summary extends IEntity<any>>(gotten: Summary[], trace?: boolean) => void;
29
+ /**
30
+ * Validate sorting options.
31
+ *
32
+ * Test a pagination API supporting sorting options.
33
+ *
34
+ * You can validate detailed sorting options both asceding and descending orders
35
+ * with multiple fields. However, as it forms a complicate currying function,
36
+ * I recomend you to see below example code before using.
37
+ *
38
+ * @param title Title of error messaeg when sorting is invalid
39
+ *
40
+ * @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
41
+ */
42
+ const sort: (title: string) => <T extends object, Fields extends string, Sortable_1 extends (`-${Fields}` | `+${Fields}`)[]>(getter: (sortable: Sortable_1) => Promise<T[]>) => (...fields: Fields[]) => (comp: (x: T, y: T) => number, filter?: ((elem: T) => boolean) | undefined) => (direction: "+" | "-", trace?: boolean) => Promise<void>;
43
+ type Sortable<Literal extends string> = Array<`-${Literal}` | `+${Literal}`>;
44
+ }
45
+ interface IEntity<Type extends string | number | bigint> {
46
+ id: Type;
47
+ }
48
+ export {};
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
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;
13
+ return g = { next: verb(0), "throw": verb(1), "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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TestValidator = void 0;
40
+ var ranges_1 = require("tstl/ranges");
41
+ /**
42
+ * Test validator.
43
+ *
44
+ * `TestValidator` is a collection gathering E2E validation functions.
45
+ *
46
+ * @author Jeongho Nam - https://github.com/samchon
47
+ */
48
+ var TestValidator;
49
+ (function (TestValidator) {
50
+ var _this = this;
51
+ /**
52
+ * Test whether error occurs.
53
+ *
54
+ * If error occurs, nothing would be happened.
55
+ *
56
+ * However, no error exists, then exception would be thrown.
57
+ *
58
+ * @param title Title of exception because of no error exists
59
+ */
60
+ TestValidator.error = function (title) {
61
+ return function (task) { return __awaiter(_this, void 0, void 0, function () {
62
+ var _a;
63
+ return __generator(this, function (_b) {
64
+ switch (_b.label) {
65
+ case 0:
66
+ _b.trys.push([0, 2, , 3]);
67
+ return [4 /*yield*/, task()];
68
+ case 1:
69
+ _b.sent();
70
+ return [3 /*break*/, 3];
71
+ case 2:
72
+ _a = _b.sent();
73
+ return [2 /*return*/];
74
+ case 3: throw new Error("Bug on ".concat(title, ": exception must be thrown."));
75
+ }
76
+ });
77
+ }); };
78
+ };
79
+ /**
80
+ * Validate index API.
81
+ *
82
+ * Test whether two indexed values are equal.
83
+ *
84
+ * If two values are different, then exception would be thrown.
85
+ *
86
+ * @param title Title of error message when different
87
+ */
88
+ TestValidator.index = function (title) {
89
+ return function (expected) {
90
+ return function (gotten, trace) {
91
+ if (trace === void 0) { trace = true; }
92
+ var length = Math.min(expected.length, gotten.length);
93
+ expected = expected.slice(0, length);
94
+ gotten = gotten.slice(0, length);
95
+ var xIds = get_ids(expected).slice(0, length);
96
+ var yIds = get_ids(gotten)
97
+ .filter(function (id) { return id >= xIds[0]; })
98
+ .slice(0, length);
99
+ var equals = xIds.every(function (x, i) { return x === yIds[i]; });
100
+ if (equals === true)
101
+ return;
102
+ else if (trace === true)
103
+ console.log({
104
+ expected: xIds,
105
+ gotten: yIds,
106
+ });
107
+ throw new Error("Bug on ".concat(title, ": result of the index is different with manual aggregation."));
108
+ };
109
+ };
110
+ };
111
+ /**
112
+ * Validate sorting options.
113
+ *
114
+ * Test a pagination API supporting sorting options.
115
+ *
116
+ * You can validate detailed sorting options both asceding and descending orders
117
+ * with multiple fields. However, as it forms a complicate currying function,
118
+ * I recomend you to see below example code before using.
119
+ *
120
+ * @param title Title of error messaeg when sorting is invalid
121
+ *
122
+ * @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
123
+ */
124
+ TestValidator.sort = function (title) {
125
+ /**
126
+ * @param getter A pagination API function to be called
127
+ */
128
+ return function (getter) {
129
+ /**
130
+ * @param fields List of fields to be sorted
131
+ */
132
+ return function () {
133
+ var fields = [];
134
+ for (var _i = 0; _i < arguments.length; _i++) {
135
+ fields[_i] = arguments[_i];
136
+ }
137
+ /**
138
+ * @param comp Comparator function for validation
139
+ * @param filter Filter function for data if required
140
+ */
141
+ return function (comp, filter) {
142
+ /**
143
+ * @param direction "+" means ascending order, and "-" means descending order
144
+ */
145
+ return function (direction, trace) {
146
+ if (trace === void 0) { trace = true; }
147
+ return __awaiter(_this, void 0, void 0, function () {
148
+ var data, reversed;
149
+ return __generator(this, function (_a) {
150
+ switch (_a.label) {
151
+ case 0: return [4 /*yield*/, getter(fields.map(function (field) { return "".concat(direction).concat(field); }))];
152
+ case 1:
153
+ data = _a.sent();
154
+ if (filter)
155
+ data = data.filter(filter);
156
+ reversed = direction === "+" ? comp : function (x, y) { return comp(y, x); };
157
+ if ((0, ranges_1.is_sorted)(data, function (x, y) { return reversed(x, y) < 0; }) === false) {
158
+ if (fields.length === 1 &&
159
+ data.length &&
160
+ data[0][fields[0]] !== undefined &&
161
+ trace)
162
+ console.log(data.map(function (elem) { return elem[fields[0]]; }));
163
+ throw new Error("Bug on ".concat(title, ": wrong sorting on ").concat(direction, "(").concat(fields.join(", "), ")."));
164
+ }
165
+ return [2 /*return*/];
166
+ }
167
+ });
168
+ });
169
+ };
170
+ };
171
+ };
172
+ };
173
+ };
174
+ })(TestValidator = exports.TestValidator || (exports.TestValidator = {}));
175
+ function get_ids(entities) {
176
+ return entities.map(function (entity) { return entity.id; }).sort(function (x, y) { return (x < y ? -1 : 1); });
177
+ }
178
+ //# sourceMappingURL=TestValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import * as e2e from "./module";
2
+ export default e2e;
3
+ export * from "./module";
package/lib/index.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ var e2e = __importStar(require("./module"));
30
+ exports.default = e2e;
31
+ __exportStar(require("./module"), exports);
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAgC;AAEhC,kBAAe,GAAG,CAAC;AACnB,2CAAyB"}
@@ -0,0 +1,6 @@
1
+ export * from "./ArrayUtil";
2
+ export * from "./DynamicExecutor";
3
+ export * from "./GaffComparator";
4
+ export * from "./RandomGenerator";
5
+ export * from "./StopWatch";
6
+ export * from "./TestValidator";
package/lib/module.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ArrayUtil"), exports);
18
+ __exportStar(require("./DynamicExecutor"), exports);
19
+ __exportStar(require("./GaffComparator"), exports);
20
+ __exportStar(require("./RandomGenerator"), exports);
21
+ __exportStar(require("./StopWatch"), exports);
22
+ __exportStar(require("./TestValidator"), exports);
23
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,mDAAiC;AACjC,oDAAkC;AAClC,8CAA4B;AAC5B,kDAAgC"}