ejv 2.1.1 → 2.1.3

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.
Files changed (45) hide show
  1. package/.mocharc.json +8 -8
  2. package/CHANGELOG.md +134 -135
  3. package/LICENSE +21 -21
  4. package/README-KR.md +604 -597
  5. package/README.md +608 -603
  6. package/build/cjs/constants.js +1 -0
  7. package/build/cjs/constants.js.map +1 -1
  8. package/build/cjs/ejv.js +3 -0
  9. package/build/cjs/ejv.js.map +1 -1
  10. package/build/cjs/package.json +1 -1
  11. package/build/cjs/tester.js +11 -1
  12. package/build/cjs/tester.js.map +1 -1
  13. package/build/constants.d.ts +1 -0
  14. package/build/esm/constants.js +1 -0
  15. package/build/esm/constants.js.map +1 -1
  16. package/build/esm/ejv.js +4 -1
  17. package/build/esm/ejv.js.map +1 -1
  18. package/build/esm/package.json +1 -1
  19. package/build/esm/tester.js +9 -0
  20. package/build/esm/tester.js.map +1 -1
  21. package/build/tester.d.ts +1 -0
  22. package/eslint.config.mjs +66 -59
  23. package/package.json +56 -54
  24. package/scripts/add-js-extensions.ts +59 -59
  25. package/spec/ArrayScheme.ts +1021 -1021
  26. package/spec/CommonScheme.ts +251 -251
  27. package/spec/DateScheme.ts +472 -472
  28. package/spec/NumberScheme.ts +1160 -1160
  29. package/spec/ObjectScheme.ts +499 -499
  30. package/spec/RegExpScheme.ts +112 -112
  31. package/spec/StringScheme.ts +1407 -1336
  32. package/spec/common-test-util.ts +63 -63
  33. package/spec/ejv.spec.ts +235 -235
  34. package/spec/testers.spec.ts +833 -833
  35. package/src/constants.ts +164 -162
  36. package/src/ejv.ts +1751 -1746
  37. package/src/index.ts +14 -14
  38. package/src/interfaces.ts +144 -144
  39. package/src/tester.ts +323 -312
  40. package/src/util.ts +124 -124
  41. package/tsconfig.cjs.json +8 -8
  42. package/tsconfig.esm.json +7 -7
  43. package/tsconfig.json +19 -19
  44. package/tsconfig.scripts.json +14 -14
  45. package/tsconfig.types.json +9 -9
@@ -1,472 +1,472 @@
1
- import { describe, it } from 'mocha';
2
- import { expect } from 'chai';
3
-
4
- import { ejv } from '../src/ejv';
5
-
6
- import { DateScheme, EjvError, Scheme } from '../src/interfaces';
7
- import { ERROR_MESSAGE, ERROR_TYPE } from '../src/constants';
8
- import { createErrorMsg } from '../src/util';
9
- import { checkSchemeError, TypeTester, typeTesterArr } from './common-test-util';
10
-
11
-
12
- describe('DateScheme', () => {
13
- const now: Date = new Date();
14
-
15
- const year: number = now.getFullYear();
16
- const month: number = now.getMonth();
17
- const date: number = now.getDate();
18
-
19
- const hours: number = now.getHours();
20
- const minutes: number = now.getMinutes();
21
- const seconds: number = now.getSeconds();
22
- const ms: number = now.getMilliseconds();
23
-
24
- const nowOnlyDate: Date = new Date();
25
- nowOnlyDate.setHours(0, 0, 0, 0);
26
-
27
-
28
- const TestCases: Date[] = [
29
- // dates
30
- new Date(year, month, date - 1),
31
- new Date(year, month, date),
32
- new Date(year, month, date + 1),
33
-
34
- // with time
35
- new Date(year, month, date, hours, minutes, seconds, ms - 1),
36
- new Date(year, month, date, hours, minutes, seconds, ms),
37
- new Date(year, month, date, hours, minutes, seconds, ms + 1)
38
- ];
39
-
40
- type ResultDefine = {
41
- scheme: Partial<DateScheme>;
42
-
43
- error: null | keyof typeof ERROR_TYPE;
44
- placeholder?: string;
45
- }
46
-
47
-
48
- function checkError (defines: ResultDefine[]): void {
49
- if (defines.length !== TestCases.length) {
50
- throw new Error('invalid spec');
51
- }
52
-
53
- defines.forEach((define: ResultDefine, i: number): void => {
54
- const checkValue: Date = i < 3 ? nowOnlyDate : now;
55
-
56
- const result: EjvError | null = ejv({
57
- date: checkValue
58
- }, [{
59
- key: 'date',
60
- type: 'date',
61
-
62
- ...define.scheme
63
- }]);
64
-
65
- if (define.error === null) {
66
- expect(result).to.be.null;
67
- }
68
- else {
69
- expect(result).to.be.instanceOf(EjvError);
70
-
71
- if (!result) {
72
- throw new Error('spec failed');
73
- }
74
-
75
- expect(result.type).to.be.eql(ERROR_TYPE[define.error]);
76
- expect(result.message).to.eql(createErrorMsg(ERROR_MESSAGE[define.error as keyof typeof ERROR_MESSAGE], {
77
- placeholders: [define.placeholder || '']
78
- }));
79
- expect(result.path).to.be.eql('date');
80
- expect(result.errorData).to.be.instanceof(Date);
81
- expect(result.errorData).to.be.eql(checkValue);
82
- }
83
- });
84
- }
85
-
86
-
87
- describe('type', () => {
88
- describe('mismatch', () => {
89
- typeTesterArr
90
- .filter((obj: TypeTester): boolean => obj.type !== 'date')
91
- .forEach((obj: TypeTester): void => {
92
- const data = {
93
- a: obj.value
94
- };
95
-
96
- it(obj.type, () => {
97
- const error: EjvError | null = ejv(data, [{
98
- key: 'a',
99
- type: 'date'
100
- }]);
101
-
102
- expect(error).to.be.instanceof(EjvError);
103
-
104
- if (!error) {
105
- throw new Error('spec failed');
106
- }
107
-
108
- expect(error.type).to.be.eql(ERROR_TYPE.TYPE_MISMATCH);
109
- expect(error.message).to.be.eql(createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH, {
110
- placeholders: ['date']
111
- }));
112
- expect(error.path).to.be.eql('a');
113
- expect(error.data).to.be.deep.equal(data);
114
- expect(error.errorData).to.be.eql(obj.value);
115
- });
116
- });
117
-
118
- it('multiple types', () => {
119
- const value = 'ejv';
120
- const typeArr: string[] = ['boolean', 'date'];
121
-
122
- const data = {
123
- a: value
124
- };
125
-
126
- const error: EjvError | null = ejv(data, [{
127
- key: 'a',
128
- type: typeArr
129
- }]);
130
-
131
- expect(error).to.be.instanceof(EjvError);
132
-
133
- if (!error) {
134
- throw new Error('spec failed');
135
- }
136
-
137
- expect(error.type).to.be.eql(ERROR_TYPE.TYPE_MISMATCH_ONE_OF);
138
- expect(error.message).to.be.eql(createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH_ONE_OF, {
139
- placeholders: [JSON.stringify(typeArr)]
140
- }));
141
- expect(error.path).to.be.eql('a');
142
- expect(error.data).to.be.deep.equal(data);
143
- expect(error.errorData).to.be.eql(value);
144
- });
145
- });
146
-
147
- describe('match', () => {
148
- it('optional', () => {
149
- expect(ejv({
150
- a: undefined
151
- }, [{
152
- key: 'a',
153
- type: 'date',
154
- optional: true
155
- }])).to.be.null;
156
- });
157
-
158
- it('single type', () => {
159
- expect(ejv({
160
- a: new Date
161
- }, [{
162
- key: 'a',
163
- type: 'date'
164
- }])).to.be.null;
165
- });
166
-
167
- it('multiple types', () => {
168
- expect(ejv({
169
- a: new Date
170
- }, [{
171
- key: 'a',
172
- type: ['date', 'number']
173
- }])).to.be.null;
174
- });
175
-
176
- it('multiple types', () => {
177
- expect(ejv({
178
- a: new Date
179
- }, [{
180
- key: 'a',
181
- type: ['number', 'date']
182
- }])).to.be.null;
183
- });
184
- });
185
- });
186
-
187
- describe('min & exclusiveMin', () => {
188
- describe('min only', () => {
189
- describe('check parameter', () => {
190
- const data = {
191
- date: new Date()
192
- };
193
-
194
- it('undefined is ok', () => {
195
- expect(ejv(data, [{
196
- key: 'date',
197
- type: 'date',
198
- min: undefined
199
- }])).to.be.null;
200
- });
201
-
202
- it('null', () => {
203
- const errorScheme: Scheme = {
204
- key: 'date',
205
- type: 'date',
206
- min: null as unknown as string
207
- };
208
-
209
- checkSchemeError({
210
- data,
211
- errorScheme,
212
- message: createErrorMsg(ERROR_MESSAGE.MIN_DATE_SHOULD_BE_DATE_OR_STRING)
213
- });
214
- });
215
-
216
- it('min type', () => {
217
- const errorScheme: Scheme = {
218
- key: 'date',
219
- type: 'date',
220
- min: 123 as unknown as string
221
- };
222
-
223
- checkSchemeError({
224
- data,
225
- errorScheme,
226
- message: createErrorMsg(ERROR_MESSAGE.MIN_DATE_SHOULD_BE_DATE_OR_STRING)
227
- });
228
- });
229
- });
230
-
231
- it('by date', () => {
232
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
233
- const result: ResultDefine = {
234
- scheme: {
235
- min: one
236
- },
237
- error: null
238
- };
239
-
240
- if ([2, 5].includes(i)) {
241
- result.error = ERROR_TYPE.AFTER_OR_SAME_DATE;
242
- result.placeholder = one.toISOString();
243
- }
244
-
245
- return result;
246
- }));
247
- });
248
-
249
- it('by date string', () => {
250
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
251
- const result: ResultDefine = {
252
- scheme: {
253
- min: one.toISOString()
254
- },
255
- error: null
256
- };
257
-
258
- if ([2, 5].includes(i)) {
259
- result.error = ERROR_TYPE.AFTER_OR_SAME_DATE;
260
- result.placeholder = one.toISOString();
261
- }
262
-
263
- return result;
264
- }));
265
- });
266
- });
267
-
268
- describe('exclusiveMin', () => {
269
- describe('check parameter', () => {
270
- it('exclusiveMin type', () => {
271
- const data = {
272
- date: new Date()
273
- };
274
-
275
- const errorScheme: Scheme = {
276
- key: 'date',
277
- type: 'date',
278
- min: now,
279
- exclusiveMin: now.toISOString() as unknown as boolean
280
- };
281
-
282
- checkSchemeError({
283
- data,
284
- errorScheme,
285
- message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN)
286
- });
287
- });
288
- });
289
-
290
- it('exclusiveMin === true', () => {
291
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
292
- const result: ResultDefine = {
293
- scheme: {
294
- min: one,
295
- exclusiveMin: true
296
- },
297
- error: null
298
- };
299
-
300
- if ([1, 2, 4, 5].includes(i)) {
301
- result.error = ERROR_TYPE.AFTER_DATE;
302
- result.placeholder = one.toISOString();
303
- }
304
-
305
- return result;
306
- }));
307
- });
308
-
309
- it('exclusiveMin === false', () => {
310
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
311
- const result: ResultDefine = {
312
- scheme: {
313
- min: one,
314
- exclusiveMin: false
315
- },
316
- error: null
317
- };
318
-
319
- if ([2, 5].includes(i)) {
320
- result.error = ERROR_TYPE.AFTER_OR_SAME_DATE;
321
- result.placeholder = one.toISOString();
322
- }
323
-
324
- return result;
325
- }));
326
- });
327
- });
328
-
329
- describe('max & exclusiveMax', () => {
330
- describe('max only', () => {
331
- describe('check parameter', () => {
332
- const data = {
333
- date: new Date()
334
- };
335
-
336
- it('undefined is ok', () => {
337
- expect(ejv(data, [{
338
- key: 'date',
339
- type: 'date',
340
- max: undefined
341
- }])).to.be.null;
342
- });
343
-
344
- it('null', () => {
345
- const errorScheme: Scheme = {
346
- key: 'date',
347
- type: 'date',
348
- max: null as unknown as string
349
- };
350
-
351
- checkSchemeError({
352
- data,
353
- errorScheme,
354
- message: createErrorMsg(ERROR_MESSAGE.MAX_DATE_SHOULD_BE_DATE_OR_STRING)
355
- });
356
- });
357
-
358
- it('max type', () => {
359
- const errorScheme: Scheme = {
360
- key: 'date',
361
- type: 'date',
362
- max: 123 as unknown as string
363
- };
364
-
365
- checkSchemeError({
366
- data,
367
- errorScheme,
368
- message: createErrorMsg(ERROR_MESSAGE.MAX_DATE_SHOULD_BE_DATE_OR_STRING)
369
- });
370
- });
371
- });
372
-
373
- it('by date', () => {
374
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
375
- const result: ResultDefine = {
376
- scheme: {
377
- max: one
378
- },
379
- error: null
380
- };
381
-
382
- if ([0, 3].includes(i)) {
383
- result.error = ERROR_TYPE.BEFORE_OR_SAME_DATE;
384
- result.placeholder = one.toISOString();
385
- }
386
-
387
- return result;
388
- }));
389
- });
390
-
391
- it('by date string', () => {
392
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
393
- const result: ResultDefine = {
394
- scheme: {
395
- max: one.toISOString()
396
- },
397
- error: null
398
- };
399
-
400
- if ([0, 3].includes(i)) {
401
- result.error = ERROR_TYPE.BEFORE_OR_SAME_DATE;
402
- result.placeholder = one.toISOString();
403
- }
404
-
405
- return result;
406
- }));
407
- });
408
- });
409
-
410
- describe('exclusiveMax', () => {
411
- describe('check parameter', () => {
412
- it('exclusiveMax type', () => {
413
- const data = {
414
- date: new Date()
415
- };
416
-
417
- const errorScheme: Scheme = {
418
- key: 'date',
419
- type: 'date',
420
- max: now,
421
- exclusiveMax: now.toISOString() as unknown as boolean
422
- };
423
-
424
- checkSchemeError({
425
- data,
426
- errorScheme,
427
- message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN)
428
- });
429
- });
430
- });
431
-
432
- it('exclusiveMax === true', () => {
433
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
434
- const result: ResultDefine = {
435
- scheme: {
436
- max: one,
437
- exclusiveMax: true
438
- },
439
- error: null
440
- };
441
-
442
- if ([0, 1, 3, 4].includes(i)) {
443
- result.error = ERROR_TYPE.BEFORE_DATE;
444
- result.placeholder = one.toISOString();
445
- }
446
-
447
- return result;
448
- }));
449
- });
450
-
451
- it('exclusiveMax === false', () => {
452
- checkError(TestCases.map((one: Date, i: number): ResultDefine => {
453
- const result: ResultDefine = {
454
- scheme: {
455
- max: one,
456
- exclusiveMax: false
457
- },
458
- error: null
459
- };
460
-
461
- if ([0, 3].includes(i)) {
462
- result.error = ERROR_TYPE.BEFORE_OR_SAME_DATE;
463
- result.placeholder = one.toISOString();
464
- }
465
-
466
- return result;
467
- }));
468
- });
469
- });
470
- });
471
- });
472
- });
1
+ import { describe, it } from 'mocha';
2
+ import { expect } from 'chai';
3
+
4
+ import { ejv } from '../src/ejv';
5
+
6
+ import { DateScheme, EjvError, Scheme } from '../src/interfaces';
7
+ import { ERROR_MESSAGE, ERROR_TYPE } from '../src/constants';
8
+ import { createErrorMsg } from '../src/util';
9
+ import { checkSchemeError, TypeTester, typeTesterArr } from './common-test-util';
10
+
11
+
12
+ describe('DateScheme', () => {
13
+ const now: Date = new Date();
14
+
15
+ const year: number = now.getFullYear();
16
+ const month: number = now.getMonth();
17
+ const date: number = now.getDate();
18
+
19
+ const hours: number = now.getHours();
20
+ const minutes: number = now.getMinutes();
21
+ const seconds: number = now.getSeconds();
22
+ const ms: number = now.getMilliseconds();
23
+
24
+ const nowOnlyDate: Date = new Date();
25
+ nowOnlyDate.setHours(0, 0, 0, 0);
26
+
27
+
28
+ const TestCases: Date[] = [
29
+ // dates
30
+ new Date(year, month, date - 1),
31
+ new Date(year, month, date),
32
+ new Date(year, month, date + 1),
33
+
34
+ // with time
35
+ new Date(year, month, date, hours, minutes, seconds, ms - 1),
36
+ new Date(year, month, date, hours, minutes, seconds, ms),
37
+ new Date(year, month, date, hours, minutes, seconds, ms + 1)
38
+ ];
39
+
40
+ type ResultDefine = {
41
+ scheme: Partial<DateScheme>;
42
+
43
+ error: null | keyof typeof ERROR_TYPE;
44
+ placeholder?: string;
45
+ }
46
+
47
+
48
+ function checkError (defines: ResultDefine[]): void {
49
+ if (defines.length !== TestCases.length) {
50
+ throw new Error('invalid spec');
51
+ }
52
+
53
+ defines.forEach((define: ResultDefine, i: number): void => {
54
+ const checkValue: Date = i < 3 ? nowOnlyDate : now;
55
+
56
+ const result: EjvError | null = ejv({
57
+ date: checkValue
58
+ }, [{
59
+ key: 'date',
60
+ type: 'date',
61
+
62
+ ...define.scheme
63
+ }]);
64
+
65
+ if (define.error === null) {
66
+ expect(result).to.be.null;
67
+ }
68
+ else {
69
+ expect(result).to.be.instanceOf(EjvError);
70
+
71
+ if (!result) {
72
+ throw new Error('spec failed');
73
+ }
74
+
75
+ expect(result.type).to.be.eql(ERROR_TYPE[define.error]);
76
+ expect(result.message).to.eql(createErrorMsg(ERROR_MESSAGE[define.error as keyof typeof ERROR_MESSAGE], {
77
+ placeholders: [define.placeholder || '']
78
+ }));
79
+ expect(result.path).to.be.eql('date');
80
+ expect(result.errorData).to.be.instanceof(Date);
81
+ expect(result.errorData).to.be.eql(checkValue);
82
+ }
83
+ });
84
+ }
85
+
86
+
87
+ describe('type', () => {
88
+ describe('mismatch', () => {
89
+ typeTesterArr
90
+ .filter((obj: TypeTester): boolean => obj.type !== 'date')
91
+ .forEach((obj: TypeTester): void => {
92
+ const data = {
93
+ a: obj.value
94
+ };
95
+
96
+ it(obj.type, () => {
97
+ const error: EjvError | null = ejv(data, [{
98
+ key: 'a',
99
+ type: 'date'
100
+ }]);
101
+
102
+ expect(error).to.be.instanceof(EjvError);
103
+
104
+ if (!error) {
105
+ throw new Error('spec failed');
106
+ }
107
+
108
+ expect(error.type).to.be.eql(ERROR_TYPE.TYPE_MISMATCH);
109
+ expect(error.message).to.be.eql(createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH, {
110
+ placeholders: ['date']
111
+ }));
112
+ expect(error.path).to.be.eql('a');
113
+ expect(error.data).to.be.deep.equal(data);
114
+ expect(error.errorData).to.be.eql(obj.value);
115
+ });
116
+ });
117
+
118
+ it('multiple types', () => {
119
+ const value = 'ejv';
120
+ const typeArr: string[] = ['boolean', 'date'];
121
+
122
+ const data = {
123
+ a: value
124
+ };
125
+
126
+ const error: EjvError | null = ejv(data, [{
127
+ key: 'a',
128
+ type: typeArr
129
+ }]);
130
+
131
+ expect(error).to.be.instanceof(EjvError);
132
+
133
+ if (!error) {
134
+ throw new Error('spec failed');
135
+ }
136
+
137
+ expect(error.type).to.be.eql(ERROR_TYPE.TYPE_MISMATCH_ONE_OF);
138
+ expect(error.message).to.be.eql(createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH_ONE_OF, {
139
+ placeholders: [JSON.stringify(typeArr)]
140
+ }));
141
+ expect(error.path).to.be.eql('a');
142
+ expect(error.data).to.be.deep.equal(data);
143
+ expect(error.errorData).to.be.eql(value);
144
+ });
145
+ });
146
+
147
+ describe('match', () => {
148
+ it('optional', () => {
149
+ expect(ejv({
150
+ a: undefined
151
+ }, [{
152
+ key: 'a',
153
+ type: 'date',
154
+ optional: true
155
+ }])).to.be.null;
156
+ });
157
+
158
+ it('single type', () => {
159
+ expect(ejv({
160
+ a: new Date
161
+ }, [{
162
+ key: 'a',
163
+ type: 'date'
164
+ }])).to.be.null;
165
+ });
166
+
167
+ it('multiple types', () => {
168
+ expect(ejv({
169
+ a: new Date
170
+ }, [{
171
+ key: 'a',
172
+ type: ['date', 'number']
173
+ }])).to.be.null;
174
+ });
175
+
176
+ it('multiple types', () => {
177
+ expect(ejv({
178
+ a: new Date
179
+ }, [{
180
+ key: 'a',
181
+ type: ['number', 'date']
182
+ }])).to.be.null;
183
+ });
184
+ });
185
+ });
186
+
187
+ describe('min & exclusiveMin', () => {
188
+ describe('min only', () => {
189
+ describe('check parameter', () => {
190
+ const data = {
191
+ date: new Date()
192
+ };
193
+
194
+ it('undefined is ok', () => {
195
+ expect(ejv(data, [{
196
+ key: 'date',
197
+ type: 'date',
198
+ min: undefined
199
+ }])).to.be.null;
200
+ });
201
+
202
+ it('null', () => {
203
+ const errorScheme: Scheme = {
204
+ key: 'date',
205
+ type: 'date',
206
+ min: null as unknown as string
207
+ };
208
+
209
+ checkSchemeError({
210
+ data,
211
+ errorScheme,
212
+ message: createErrorMsg(ERROR_MESSAGE.MIN_DATE_SHOULD_BE_DATE_OR_STRING)
213
+ });
214
+ });
215
+
216
+ it('min type', () => {
217
+ const errorScheme: Scheme = {
218
+ key: 'date',
219
+ type: 'date',
220
+ min: 123 as unknown as string
221
+ };
222
+
223
+ checkSchemeError({
224
+ data,
225
+ errorScheme,
226
+ message: createErrorMsg(ERROR_MESSAGE.MIN_DATE_SHOULD_BE_DATE_OR_STRING)
227
+ });
228
+ });
229
+ });
230
+
231
+ it('by date', () => {
232
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
233
+ const result: ResultDefine = {
234
+ scheme: {
235
+ min: one
236
+ },
237
+ error: null
238
+ };
239
+
240
+ if ([2, 5].includes(i)) {
241
+ result.error = ERROR_TYPE.AFTER_OR_SAME_DATE;
242
+ result.placeholder = one.toISOString();
243
+ }
244
+
245
+ return result;
246
+ }));
247
+ });
248
+
249
+ it('by date string', () => {
250
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
251
+ const result: ResultDefine = {
252
+ scheme: {
253
+ min: one.toISOString()
254
+ },
255
+ error: null
256
+ };
257
+
258
+ if ([2, 5].includes(i)) {
259
+ result.error = ERROR_TYPE.AFTER_OR_SAME_DATE;
260
+ result.placeholder = one.toISOString();
261
+ }
262
+
263
+ return result;
264
+ }));
265
+ });
266
+ });
267
+
268
+ describe('exclusiveMin', () => {
269
+ describe('check parameter', () => {
270
+ it('exclusiveMin type', () => {
271
+ const data = {
272
+ date: new Date()
273
+ };
274
+
275
+ const errorScheme: Scheme = {
276
+ key: 'date',
277
+ type: 'date',
278
+ min: now,
279
+ exclusiveMin: now.toISOString() as unknown as boolean
280
+ };
281
+
282
+ checkSchemeError({
283
+ data,
284
+ errorScheme,
285
+ message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN)
286
+ });
287
+ });
288
+ });
289
+
290
+ it('exclusiveMin === true', () => {
291
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
292
+ const result: ResultDefine = {
293
+ scheme: {
294
+ min: one,
295
+ exclusiveMin: true
296
+ },
297
+ error: null
298
+ };
299
+
300
+ if ([1, 2, 4, 5].includes(i)) {
301
+ result.error = ERROR_TYPE.AFTER_DATE;
302
+ result.placeholder = one.toISOString();
303
+ }
304
+
305
+ return result;
306
+ }));
307
+ });
308
+
309
+ it('exclusiveMin === false', () => {
310
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
311
+ const result: ResultDefine = {
312
+ scheme: {
313
+ min: one,
314
+ exclusiveMin: false
315
+ },
316
+ error: null
317
+ };
318
+
319
+ if ([2, 5].includes(i)) {
320
+ result.error = ERROR_TYPE.AFTER_OR_SAME_DATE;
321
+ result.placeholder = one.toISOString();
322
+ }
323
+
324
+ return result;
325
+ }));
326
+ });
327
+ });
328
+
329
+ describe('max & exclusiveMax', () => {
330
+ describe('max only', () => {
331
+ describe('check parameter', () => {
332
+ const data = {
333
+ date: new Date()
334
+ };
335
+
336
+ it('undefined is ok', () => {
337
+ expect(ejv(data, [{
338
+ key: 'date',
339
+ type: 'date',
340
+ max: undefined
341
+ }])).to.be.null;
342
+ });
343
+
344
+ it('null', () => {
345
+ const errorScheme: Scheme = {
346
+ key: 'date',
347
+ type: 'date',
348
+ max: null as unknown as string
349
+ };
350
+
351
+ checkSchemeError({
352
+ data,
353
+ errorScheme,
354
+ message: createErrorMsg(ERROR_MESSAGE.MAX_DATE_SHOULD_BE_DATE_OR_STRING)
355
+ });
356
+ });
357
+
358
+ it('max type', () => {
359
+ const errorScheme: Scheme = {
360
+ key: 'date',
361
+ type: 'date',
362
+ max: 123 as unknown as string
363
+ };
364
+
365
+ checkSchemeError({
366
+ data,
367
+ errorScheme,
368
+ message: createErrorMsg(ERROR_MESSAGE.MAX_DATE_SHOULD_BE_DATE_OR_STRING)
369
+ });
370
+ });
371
+ });
372
+
373
+ it('by date', () => {
374
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
375
+ const result: ResultDefine = {
376
+ scheme: {
377
+ max: one
378
+ },
379
+ error: null
380
+ };
381
+
382
+ if ([0, 3].includes(i)) {
383
+ result.error = ERROR_TYPE.BEFORE_OR_SAME_DATE;
384
+ result.placeholder = one.toISOString();
385
+ }
386
+
387
+ return result;
388
+ }));
389
+ });
390
+
391
+ it('by date string', () => {
392
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
393
+ const result: ResultDefine = {
394
+ scheme: {
395
+ max: one.toISOString()
396
+ },
397
+ error: null
398
+ };
399
+
400
+ if ([0, 3].includes(i)) {
401
+ result.error = ERROR_TYPE.BEFORE_OR_SAME_DATE;
402
+ result.placeholder = one.toISOString();
403
+ }
404
+
405
+ return result;
406
+ }));
407
+ });
408
+ });
409
+
410
+ describe('exclusiveMax', () => {
411
+ describe('check parameter', () => {
412
+ it('exclusiveMax type', () => {
413
+ const data = {
414
+ date: new Date()
415
+ };
416
+
417
+ const errorScheme: Scheme = {
418
+ key: 'date',
419
+ type: 'date',
420
+ max: now,
421
+ exclusiveMax: now.toISOString() as unknown as boolean
422
+ };
423
+
424
+ checkSchemeError({
425
+ data,
426
+ errorScheme,
427
+ message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN)
428
+ });
429
+ });
430
+ });
431
+
432
+ it('exclusiveMax === true', () => {
433
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
434
+ const result: ResultDefine = {
435
+ scheme: {
436
+ max: one,
437
+ exclusiveMax: true
438
+ },
439
+ error: null
440
+ };
441
+
442
+ if ([0, 1, 3, 4].includes(i)) {
443
+ result.error = ERROR_TYPE.BEFORE_DATE;
444
+ result.placeholder = one.toISOString();
445
+ }
446
+
447
+ return result;
448
+ }));
449
+ });
450
+
451
+ it('exclusiveMax === false', () => {
452
+ checkError(TestCases.map((one: Date, i: number): ResultDefine => {
453
+ const result: ResultDefine = {
454
+ scheme: {
455
+ max: one,
456
+ exclusiveMax: false
457
+ },
458
+ error: null
459
+ };
460
+
461
+ if ([0, 3].includes(i)) {
462
+ result.error = ERROR_TYPE.BEFORE_OR_SAME_DATE;
463
+ result.placeholder = one.toISOString();
464
+ }
465
+
466
+ return result;
467
+ }));
468
+ });
469
+ });
470
+ });
471
+ });
472
+ });