functional-models 1.0.27 → 1.1.2

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 (105) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc +9 -15
  3. package/cucumber.js +10 -0
  4. package/dist/src/constants.d.ts +14 -0
  5. package/dist/src/constants.js +19 -0
  6. package/dist/src/constants.js.map +1 -0
  7. package/dist/src/errors.d.ts +9 -0
  8. package/dist/src/errors.js +15 -0
  9. package/dist/src/errors.js.map +1 -0
  10. package/dist/src/index.d.ts +9 -0
  11. package/dist/src/index.js +39 -0
  12. package/dist/src/index.js.map +1 -0
  13. package/dist/src/interfaces.d.ts +145 -0
  14. package/dist/src/interfaces.js +5 -0
  15. package/dist/src/interfaces.js.map +1 -0
  16. package/dist/src/lazy.d.ts +2 -0
  17. package/dist/src/lazy.js +37 -0
  18. package/dist/src/lazy.js.map +1 -0
  19. package/dist/src/methods.d.ts +4 -0
  20. package/dist/src/methods.js +18 -0
  21. package/dist/src/methods.js.map +1 -0
  22. package/dist/src/models.d.ts +3 -0
  23. package/dist/src/models.js +128 -0
  24. package/dist/src/models.js.map +1 -0
  25. package/dist/src/properties.d.ts +16 -0
  26. package/dist/src/properties.js +208 -0
  27. package/dist/src/properties.js.map +1 -0
  28. package/dist/src/serialization.d.ts +3 -0
  29. package/dist/src/serialization.js +49 -0
  30. package/dist/src/serialization.js.map +1 -0
  31. package/dist/src/utils.d.ts +4 -0
  32. package/dist/src/utils.js +44 -0
  33. package/dist/src/utils.js.map +1 -0
  34. package/dist/src/validation.d.ts +29 -0
  35. package/dist/src/validation.js +286 -0
  36. package/dist/src/validation.js.map +1 -0
  37. package/dist/stepDefinitions/oldSteps.d.ts +1 -0
  38. package/dist/stepDefinitions/oldSteps.js +191 -0
  39. package/dist/stepDefinitions/oldSteps.js.map +1 -0
  40. package/dist/stepDefinitions/tssteps.d.ts +1 -0
  41. package/dist/stepDefinitions/tssteps.js +96 -0
  42. package/dist/stepDefinitions/tssteps.js.map +1 -0
  43. package/dist/test/src/errors.test.d.ts +1 -0
  44. package/dist/test/src/errors.test.js +33 -0
  45. package/dist/test/src/errors.test.js.map +1 -0
  46. package/dist/test/src/lazy.test.d.ts +1 -0
  47. package/dist/test/src/lazy.test.js +28 -0
  48. package/dist/test/src/lazy.test.js.map +1 -0
  49. package/dist/test/src/methods.test.d.ts +1 -0
  50. package/dist/test/src/methods.test.js +48 -0
  51. package/dist/test/src/methods.test.js.map +1 -0
  52. package/dist/test/src/models.test.d.ts +1 -0
  53. package/dist/test/src/models.test.js +395 -0
  54. package/dist/test/src/models.test.js.map +1 -0
  55. package/dist/test/src/properties.test.d.ts +1 -0
  56. package/dist/test/src/properties.test.js +724 -0
  57. package/dist/test/src/properties.test.js.map +1 -0
  58. package/dist/test/src/serialization.test.d.ts +1 -0
  59. package/dist/test/src/serialization.test.js +91 -0
  60. package/dist/test/src/serialization.test.js.map +1 -0
  61. package/dist/test/src/utils.test.d.ts +1 -0
  62. package/dist/test/src/utils.test.js +81 -0
  63. package/dist/test/src/utils.test.js.map +1 -0
  64. package/dist/test/src/validation.test.d.ts +1 -0
  65. package/dist/test/src/validation.test.js +612 -0
  66. package/dist/test/src/validation.test.js.map +1 -0
  67. package/features/arrayFields.feature +7 -7
  68. package/features/basic-ts.feature +13 -0
  69. package/features/functions.feature +2 -3
  70. package/package.json +35 -10
  71. package/src/constants.ts +15 -0
  72. package/src/{errors.js → errors.ts} +6 -4
  73. package/src/index.ts +12 -0
  74. package/src/interfaces.ts +323 -0
  75. package/src/lazy.ts +24 -0
  76. package/src/methods.ts +30 -0
  77. package/src/models.ts +183 -0
  78. package/src/properties.ts +375 -0
  79. package/src/serialization.ts +39 -0
  80. package/src/{utils.js → utils.ts} +16 -26
  81. package/src/validation.ts +390 -0
  82. package/{features/stepDefinitions/steps.js → stepDefinitions/oldSteps.ts} +76 -53
  83. package/stepDefinitions/tssteps.ts +107 -0
  84. package/test/src/errors.test.ts +31 -0
  85. package/test/src/{lazy.test.js → lazy.test.ts} +4 -4
  86. package/test/src/methods.test.ts +45 -0
  87. package/test/src/models.test.ts +417 -0
  88. package/test/src/{properties.test.js → properties.test.ts} +251 -58
  89. package/test/src/serialization.test.ts +80 -0
  90. package/test/src/{utils.test.js → utils.test.ts} +29 -7
  91. package/test/src/{validation.test.js → validation.test.ts} +278 -210
  92. package/tsconfig.json +100 -0
  93. package/src/constants.js +0 -19
  94. package/src/functions.js +0 -7
  95. package/src/index.js +0 -10
  96. package/src/lazy.js +0 -19
  97. package/src/models.js +0 -152
  98. package/src/properties.js +0 -313
  99. package/src/serialization.js +0 -50
  100. package/src/validation.js +0 -285
  101. package/test/base/index.test.js +0 -5
  102. package/test/src/functions.test.js +0 -45
  103. package/test/src/index.test.js +0 -5
  104. package/test/src/models.test.js +0 -380
  105. package/test/src/serialization.test.js +0 -127
@@ -0,0 +1,612 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const chai_1 = __importDefault(require("chai"));
16
+ const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
17
+ chai_1.default.use(chai_as_promised_1.default);
18
+ const sinon_1 = __importDefault(require("sinon"));
19
+ const models_1 = require("../../src/models");
20
+ const properties_1 = require("../../src/properties");
21
+ const validation_1 = require("../../src/validation");
22
+ const assert = chai_1.default.assert;
23
+ const TestModel1 = (0, models_1.BaseModel)('TestModel1', {
24
+ properties: {},
25
+ });
26
+ const TestModel2 = (0, models_1.BaseModel)('TestModel2', {
27
+ properties: {},
28
+ });
29
+ const createTestModel3 = (modelValidators) => (0, models_1.BaseModel)('TestModel3', {
30
+ properties: {
31
+ name: (0, properties_1.TextProperty)(),
32
+ },
33
+ modelValidators,
34
+ });
35
+ const EMPTY_MODEL = (0, models_1.BaseModel)('EmptyModel', {
36
+ properties: {},
37
+ });
38
+ const EMPTY_MODEL_INSTANCE = EMPTY_MODEL.create({});
39
+ describe('/src/validation.ts', () => {
40
+ describe('#isDate()', () => {
41
+ it('should return an error if value is null', () => {
42
+ // @ts-ignore
43
+ const actual = (0, validation_1.isDate)(null, EMPTY_MODEL_INSTANCE, {});
44
+ assert.isOk(actual);
45
+ });
46
+ it('should return an error if value is undefined', () => {
47
+ // @ts-ignore
48
+ const actual = (0, validation_1.isDate)(undefined, EMPTY_MODEL_INSTANCE, {});
49
+ assert.isOk(actual);
50
+ });
51
+ it('should return an error object does not have toISOString', () => {
52
+ // @ts-ignore
53
+ const actual = (0, validation_1.isDate)({}, EMPTY_MODEL_INSTANCE, {});
54
+ assert.isOk(actual);
55
+ });
56
+ it('should return undefined if a date', () => {
57
+ const actual = (0, validation_1.isDate)(new Date(), EMPTY_MODEL_INSTANCE, {});
58
+ assert.isUndefined(actual);
59
+ });
60
+ });
61
+ describe('#referenceTypeMatch()', () => {
62
+ it('should return an error if undefined is passed as a value', () => {
63
+ const myModel = TestModel1.create({});
64
+ const actual = (0, validation_1.referenceTypeMatch)(TestModel1)(
65
+ // @ts-ignore
66
+ undefined, EMPTY_MODEL_INSTANCE, {});
67
+ assert.isOk(actual);
68
+ });
69
+ it('should return an error if null is passed as a value', () => {
70
+ const myModel = TestModel1.create({});
71
+ const actual = (0, validation_1.referenceTypeMatch)(TestModel1)(
72
+ // @ts-ignore
73
+ null, EMPTY_MODEL_INSTANCE, {});
74
+ assert.isOk(actual);
75
+ });
76
+ it('should allow a function for a model', () => __awaiter(void 0, void 0, void 0, function* () {
77
+ const myModel = EMPTY_MODEL.create({});
78
+ const actual = (0, validation_1.referenceTypeMatch)(() => EMPTY_MODEL)(myModel, myModel, yield myModel.toObj());
79
+ const expected = undefined;
80
+ assert.equal(actual, expected);
81
+ }));
82
+ it('should validate when the correct object matches the model', () => __awaiter(void 0, void 0, void 0, function* () {
83
+ const myModel = EMPTY_MODEL.create({});
84
+ const actual = (0, validation_1.referenceTypeMatch)(EMPTY_MODEL)(myModel, myModel, yield myModel.toObj());
85
+ const expected = undefined;
86
+ assert.equal(actual, expected);
87
+ }));
88
+ it('should return an error when the input does not match the model', () => {
89
+ const myModel = EMPTY_MODEL.create({});
90
+ const actual = (0, validation_1.referenceTypeMatch)(TestModel1)(
91
+ // @ts-ignore
92
+ myModel, myModel, {});
93
+ assert.isOk(actual);
94
+ });
95
+ });
96
+ describe('#isNumber()', () => {
97
+ it('should return an error when empty is passed', () => {
98
+ const actual = (0, validation_1.isNumber)(null, EMPTY_MODEL_INSTANCE, {});
99
+ assert.isOk(actual);
100
+ });
101
+ it('should return an error when "asdf" is passed', () => {
102
+ const actual = (0, validation_1.isNumber)('asdf', EMPTY_MODEL_INSTANCE, {});
103
+ assert.isOk(actual);
104
+ });
105
+ it('should return undefined when 1 is passed', () => {
106
+ const actual = (0, validation_1.isNumber)(1, EMPTY_MODEL_INSTANCE, {});
107
+ assert.isUndefined(actual);
108
+ });
109
+ it('should return error when "1" is passed', () => {
110
+ const actual = (0, validation_1.isNumber)('1', EMPTY_MODEL_INSTANCE, {});
111
+ assert.isOk(actual);
112
+ });
113
+ });
114
+ describe('#isString()', () => {
115
+ it('should return undefined when "1" is passed', () => {
116
+ const actual = (0, validation_1.isString)('1', EMPTY_MODEL_INSTANCE, {});
117
+ assert.isUndefined(actual);
118
+ });
119
+ it('should return error when 1 is passed', () => {
120
+ const actual = (0, validation_1.isString)(1, EMPTY_MODEL_INSTANCE, {});
121
+ assert.isOk(actual);
122
+ });
123
+ });
124
+ describe('#isRequired()', () => {
125
+ it('should return undefined when 1 is passed', () => {
126
+ const actual = (0, validation_1.isRequired)(1, EMPTY_MODEL_INSTANCE, {});
127
+ assert.isUndefined(actual);
128
+ });
129
+ it('should return undefined when a date is passed', () => {
130
+ const actual = (0, validation_1.isRequired)(new Date(), EMPTY_MODEL_INSTANCE, {});
131
+ assert.isUndefined(actual);
132
+ });
133
+ it('should return undefined when 0 is passed', () => {
134
+ const actual = (0, validation_1.isRequired)(0, EMPTY_MODEL_INSTANCE, {});
135
+ assert.isUndefined(actual);
136
+ });
137
+ it('should return undefined when "something" is passed', () => {
138
+ const actual = (0, validation_1.isRequired)('something', EMPTY_MODEL_INSTANCE, {});
139
+ assert.isUndefined(actual);
140
+ });
141
+ it('should return error when null is passed', () => {
142
+ const actual = (0, validation_1.isRequired)(null, EMPTY_MODEL_INSTANCE, {});
143
+ assert.isOk(actual);
144
+ });
145
+ it('should return error when undefined is passed', () => {
146
+ const actual = (0, validation_1.isRequired)(undefined, EMPTY_MODEL_INSTANCE, {});
147
+ assert.isOk(actual);
148
+ });
149
+ it('should return undefined when false is passed', () => {
150
+ const actual = (0, validation_1.isRequired)(false, EMPTY_MODEL_INSTANCE, {});
151
+ assert.isUndefined(actual);
152
+ });
153
+ it('should return undefined when true is passed', () => {
154
+ const actual = (0, validation_1.isRequired)(true, EMPTY_MODEL_INSTANCE, {});
155
+ assert.isUndefined(actual);
156
+ });
157
+ });
158
+ describe('#isBoolean()', () => {
159
+ it('should return error when "true" is passed"', () => {
160
+ const actual = (0, validation_1.isBoolean)('true', EMPTY_MODEL_INSTANCE, {});
161
+ assert.isOk(actual);
162
+ });
163
+ it('should return an error when "false" is passed', () => {
164
+ const actual = (0, validation_1.isBoolean)('false', EMPTY_MODEL_INSTANCE, {});
165
+ assert.isOk(actual);
166
+ });
167
+ it('should return undefined when true is passed"', () => {
168
+ const actual = (0, validation_1.isBoolean)(true, EMPTY_MODEL_INSTANCE, {});
169
+ assert.isUndefined(actual);
170
+ });
171
+ it('should return undefined when false is passed', () => {
172
+ const actual = (0, validation_1.isBoolean)(false, EMPTY_MODEL_INSTANCE, {});
173
+ assert.isUndefined(actual);
174
+ });
175
+ });
176
+ describe('#maxNumber()', () => {
177
+ it('should return error if max=5 and value="hello world"', () => {
178
+ // @ts-ignore
179
+ const actual = (0, validation_1.maxNumber)(5)('hello world', EMPTY_MODEL_INSTANCE, {});
180
+ assert.isOk(actual);
181
+ });
182
+ it('should return error if max=5 and value=6', () => {
183
+ const actual = (0, validation_1.maxNumber)(5)(6, EMPTY_MODEL_INSTANCE, {});
184
+ assert.isOk(actual);
185
+ });
186
+ it('should return undefined if max=5 and value=5', () => {
187
+ const actual = (0, validation_1.maxNumber)(5)(5, EMPTY_MODEL_INSTANCE, {});
188
+ assert.isUndefined(actual);
189
+ });
190
+ it('should return undefined if max=5 and value=4', () => {
191
+ const actual = (0, validation_1.maxNumber)(5)(4, EMPTY_MODEL_INSTANCE, {});
192
+ assert.isUndefined(actual);
193
+ });
194
+ });
195
+ describe('#minNumber()', () => {
196
+ it('should return error if min=5 and value="hello world"', () => {
197
+ // @ts-ignore
198
+ const actual = (0, validation_1.minNumber)(5)('hello world', EMPTY_MODEL_INSTANCE, {});
199
+ assert.isOk(actual);
200
+ });
201
+ it('should return error if min=5 and value=4', () => {
202
+ const actual = (0, validation_1.minNumber)(5)(4, EMPTY_MODEL_INSTANCE, {});
203
+ assert.isOk(actual);
204
+ });
205
+ it('should return undefined if min=5 and value=4', () => {
206
+ const actual = (0, validation_1.minNumber)(5)(5, EMPTY_MODEL_INSTANCE, {});
207
+ assert.isUndefined(actual);
208
+ });
209
+ it('should return undefined if min=5 and value=6', () => {
210
+ const actual = (0, validation_1.minNumber)(5)(6, EMPTY_MODEL_INSTANCE, {});
211
+ assert.isUndefined(actual);
212
+ });
213
+ });
214
+ describe('#choices()', () => {
215
+ it('should return an error if choices are [1,2,3] and value is 4', () => {
216
+ const actual = (0, validation_1.choices)(['1', '2', '3'])('4', EMPTY_MODEL_INSTANCE, {});
217
+ assert.isOk(actual);
218
+ });
219
+ it('should return undefined if choices are [1,2,3] and value is 1', () => {
220
+ const actual = (0, validation_1.choices)(['1', '2', '3'])('1', EMPTY_MODEL_INSTANCE, {});
221
+ assert.isUndefined(actual);
222
+ });
223
+ });
224
+ describe('#minTextLength()', () => {
225
+ it('should return error if min=5 and value=5', () => {
226
+ // @ts-ignore
227
+ const actual = (0, validation_1.minTextLength)(5)(5, EMPTY_MODEL_INSTANCE, {});
228
+ assert.isOk(actual);
229
+ });
230
+ it('should return error if min=5 and value=5', () => {
231
+ const actual = (0, validation_1.minTextLength)(5)('5', EMPTY_MODEL_INSTANCE, {});
232
+ assert.isOk(actual);
233
+ });
234
+ it('should return error if length=5 and value="asdf"', () => {
235
+ const actual = (0, validation_1.minTextLength)(5)('asdf', EMPTY_MODEL_INSTANCE, {});
236
+ assert.isOk(actual);
237
+ });
238
+ it('should return undefined if length=5 and value="hello"', () => {
239
+ const actual = (0, validation_1.minTextLength)(5)('hello', EMPTY_MODEL_INSTANCE, {});
240
+ assert.isUndefined(actual);
241
+ });
242
+ it('should return undefined if length=5 and value="hello world"', () => {
243
+ const actual = (0, validation_1.minTextLength)(5)('hello world', EMPTY_MODEL_INSTANCE, {});
244
+ assert.isUndefined(actual);
245
+ });
246
+ });
247
+ describe('#maxTextLength()', () => {
248
+ it('should return error if length=5 and value=5', () => {
249
+ // @ts-ignore
250
+ const actual = (0, validation_1.maxTextLength)(5)(5, EMPTY_MODEL_INSTANCE, {});
251
+ assert.isOk(actual);
252
+ });
253
+ it('should return error if length=5 and value="hello world"', () => {
254
+ const actual = (0, validation_1.maxTextLength)(5)('hello world', EMPTY_MODEL_INSTANCE, {});
255
+ assert.isOk(actual);
256
+ });
257
+ it('should return undefined if length=5 and value="hello"', () => {
258
+ const actual = (0, validation_1.maxTextLength)(5)('hello', EMPTY_MODEL_INSTANCE, {});
259
+ assert.isUndefined(actual);
260
+ });
261
+ it('should return undefined if length=5 and value="asdf"', () => {
262
+ const actual = (0, validation_1.maxTextLength)(5)('asdf', EMPTY_MODEL_INSTANCE, {});
263
+ assert.isUndefined(actual);
264
+ });
265
+ });
266
+ describe('#meetsRegex()', () => {
267
+ it('should return an error with regex=/asdf/ flags="g" and value="hello world"', () => {
268
+ const actual = (0, validation_1.meetsRegex)(/asdf/, 'g')('hello world', EMPTY_MODEL_INSTANCE, {});
269
+ assert.isOk(actual);
270
+ });
271
+ it('should return undefined with regex=/asdf/ flags="g" and value="hello asdf world"', () => {
272
+ const actual = (0, validation_1.meetsRegex)(/asdf/, 'g')('asdf', EMPTY_MODEL_INSTANCE, {});
273
+ assert.isUndefined(actual);
274
+ });
275
+ });
276
+ describe('#aggregateValidator()', () => {
277
+ it('should return two errors when two validators are passed, and the value fails both', () => __awaiter(void 0, void 0, void 0, function* () {
278
+ const validators = [(0, validation_1.minTextLength)(10), validation_1.isNumber];
279
+ const value = 'asdf';
280
+ const actual = (yield (0, validation_1.aggregateValidator)(value, validators)(EMPTY_MODEL_INSTANCE, {})).length;
281
+ const expected = 2;
282
+ assert.equal(actual, expected);
283
+ }));
284
+ it('should return one error when one validator is passed, and the value fails', () => __awaiter(void 0, void 0, void 0, function* () {
285
+ const validators = (0, validation_1.minTextLength)(10);
286
+ const value = 'asdf';
287
+ const actual = (yield (0, validation_1.aggregateValidator)(value, validators)(EMPTY_MODEL_INSTANCE, {})).length;
288
+ const expected = 1;
289
+ assert.equal(actual, expected);
290
+ }));
291
+ });
292
+ describe('#emptyValidator()', () => {
293
+ it('should return undefined with a value of 1', () => {
294
+ const actual = (0, validation_1.emptyValidator)(1, EMPTY_MODEL_INSTANCE, {});
295
+ const expected = undefined;
296
+ assert.equal(actual, expected);
297
+ });
298
+ it('should return undefined with a value of "1"', () => {
299
+ const actual = (0, validation_1.emptyValidator)('1', EMPTY_MODEL_INSTANCE, {});
300
+ const expected = undefined;
301
+ assert.equal(actual, expected);
302
+ });
303
+ it('should return undefined with a value of true', () => {
304
+ const actual = (0, validation_1.emptyValidator)(true, EMPTY_MODEL_INSTANCE, {});
305
+ const expected = undefined;
306
+ assert.equal(actual, expected);
307
+ });
308
+ it('should return undefined with a value of false', () => {
309
+ const actual = (0, validation_1.emptyValidator)(false, EMPTY_MODEL_INSTANCE, {});
310
+ const expected = undefined;
311
+ assert.equal(actual, expected);
312
+ });
313
+ it('should return undefined with a value of undefined', () => {
314
+ const actual = (0, validation_1.emptyValidator)(undefined, EMPTY_MODEL_INSTANCE, {});
315
+ const expected = undefined;
316
+ assert.equal(actual, expected);
317
+ });
318
+ });
319
+ describe('#isInteger()', () => {
320
+ it('should return an error with a value of "1"', () => {
321
+ const actual = (0, validation_1.isInteger)('1', EMPTY_MODEL_INSTANCE, {});
322
+ assert.isOk(actual);
323
+ });
324
+ it('should return undefined with a value of 1', () => {
325
+ const actual = (0, validation_1.isInteger)(1, EMPTY_MODEL_INSTANCE, {});
326
+ assert.isUndefined(actual);
327
+ });
328
+ });
329
+ describe('#createModelValidator()', () => {
330
+ it('should throw an exception if instance is null', () => {
331
+ const modelValidator = sinon_1.default.stub().returns(undefined);
332
+ const properties = {
333
+ id: sinon_1.default.stub().returns(undefined),
334
+ name: sinon_1.default.stub().returns(undefined),
335
+ };
336
+ const validator = (0, validation_1.createModelValidator)(properties, [modelValidator]);
337
+ // @ts-ignore
338
+ assert.isRejected(validator(undefined, {}));
339
+ });
340
+ it('should call the model validator passed in', () => __awaiter(void 0, void 0, void 0, function* () {
341
+ const modelValidator = sinon_1.default.stub().returns(undefined);
342
+ const testModel3 = createTestModel3([modelValidator]);
343
+ const properties = {
344
+ id: sinon_1.default.stub().returns(undefined),
345
+ name: sinon_1.default.stub().returns(undefined),
346
+ };
347
+ const validator = (0, validation_1.createModelValidator)(properties, [modelValidator]);
348
+ yield validator(testModel3.create({
349
+ id: 'test-id',
350
+ name: 'my-name',
351
+ }), {
352
+ id: 'test-id',
353
+ name: 'my-name',
354
+ });
355
+ sinon_1.default.assert.calledOnce(modelValidator);
356
+ }));
357
+ it('should pass the instance into the validator as the first argument', () => __awaiter(void 0, void 0, void 0, function* () {
358
+ const modelValidator = sinon_1.default.stub().returns(undefined);
359
+ const testModel3 = createTestModel3([modelValidator]);
360
+ const properties = {
361
+ id: sinon_1.default.stub().returns(undefined),
362
+ name: sinon_1.default.stub().returns(undefined),
363
+ };
364
+ const validator = (0, validation_1.createModelValidator)(properties, [modelValidator]);
365
+ const instance = testModel3.create({
366
+ id: 'test-id',
367
+ name: 'my-name',
368
+ });
369
+ yield validator(instance, {});
370
+ const actual = modelValidator.getCall(0).args[0];
371
+ const expected = instance;
372
+ assert.deepEqual(actual, expected);
373
+ }));
374
+ it('should pass the instance data into the validator as the second argument', () => __awaiter(void 0, void 0, void 0, function* () {
375
+ const modelValidator = sinon_1.default.stub().returns(undefined);
376
+ const testModel3 = createTestModel3([modelValidator]);
377
+ const properties = {
378
+ id: sinon_1.default.stub().returns(undefined),
379
+ name: sinon_1.default.stub().returns(undefined),
380
+ };
381
+ const validator = (0, validation_1.createModelValidator)(properties, [modelValidator]);
382
+ const instance = testModel3.create({
383
+ id: 'test-id',
384
+ name: 'my-name',
385
+ });
386
+ const expected = yield instance.toObj();
387
+ yield validator(instance, {});
388
+ const actual = modelValidator.getCall(0).args[1];
389
+ assert.deepEqual(actual, expected);
390
+ }));
391
+ it('should return a overall: ["my-validation-error"] when the model validator returns "my-validation-error"', () => __awaiter(void 0, void 0, void 0, function* () {
392
+ const modelValidator = sinon_1.default.stub().returns('my-validation-error');
393
+ const testModel3 = createTestModel3([modelValidator]);
394
+ const properties = {
395
+ id: sinon_1.default.stub().returns(undefined),
396
+ name: sinon_1.default.stub().returns(undefined),
397
+ };
398
+ const validator = (0, validation_1.createModelValidator)(properties, [modelValidator]);
399
+ const instance = testModel3.create({
400
+ id: 'test-id',
401
+ name: 'my-name',
402
+ });
403
+ const actual = yield validator(instance, {});
404
+ const expected = {
405
+ overall: ['my-validation-error'],
406
+ };
407
+ assert.deepEqual(actual, expected);
408
+ }));
409
+ it('should return no errors when two model validators return undefined', () => __awaiter(void 0, void 0, void 0, function* () {
410
+ const modelValidator1 = sinon_1.default.stub().resolves(undefined);
411
+ const modelValidator2 = sinon_1.default.stub().resolves(undefined);
412
+ const testModel3 = createTestModel3([modelValidator1, modelValidator2]);
413
+ const properties = {
414
+ id: sinon_1.default.stub().returns(undefined),
415
+ name: sinon_1.default.stub().returns(undefined),
416
+ };
417
+ const validator = (0, validation_1.createModelValidator)(properties, [
418
+ modelValidator1,
419
+ modelValidator2,
420
+ ]);
421
+ const instance = testModel3.create({
422
+ id: 'test-id',
423
+ name: 'my-name',
424
+ });
425
+ const actual = yield validator(instance, {});
426
+ const expected = {};
427
+ assert.deepEqual(actual, expected);
428
+ }));
429
+ it('should use both functions.validate for two objects', () => __awaiter(void 0, void 0, void 0, function* () {
430
+ const properties = {
431
+ id: sinon_1.default.stub().returns(undefined),
432
+ type: sinon_1.default.stub().returns(undefined),
433
+ };
434
+ const validator = (0, validation_1.createModelValidator)(properties);
435
+ const testModel3 = (0, models_1.BaseModel)('Model', { properties: {} });
436
+ const instance = testModel3.create({
437
+ id: 'test-id',
438
+ name: 'my-name',
439
+ });
440
+ yield validator(instance, {});
441
+ sinon_1.default.assert.calledOnce(properties.id);
442
+ sinon_1.default.assert.calledOnce(properties.type);
443
+ }));
444
+ it('should run a validators.model() function', () => __awaiter(void 0, void 0, void 0, function* () {
445
+ const properties = {
446
+ id: sinon_1.default.stub().returns(undefined),
447
+ type: sinon_1.default.stub().returns(undefined),
448
+ model: sinon_1.default.stub().returns(undefined),
449
+ };
450
+ const validator = (0, validation_1.createModelValidator)(properties);
451
+ const testModel3 = (0, models_1.BaseModel)('Model', { properties: {} });
452
+ const instance = testModel3.create({
453
+ id: 'test-id',
454
+ name: 'my-name',
455
+ });
456
+ yield validator(instance, {});
457
+ sinon_1.default.assert.called(properties.model);
458
+ }));
459
+ it('should combine results for both validators for two objects that error', () => __awaiter(void 0, void 0, void 0, function* () {
460
+ const properties = {
461
+ id: sinon_1.default.stub().returns(['error1']),
462
+ type: sinon_1.default.stub().returns(['error2']),
463
+ };
464
+ const validator = (0, validation_1.createModelValidator)(properties);
465
+ const testModel3 = (0, models_1.BaseModel)('Model', { properties: {} });
466
+ const instance = testModel3.create({
467
+ id: 'test-id',
468
+ type: 'my-name',
469
+ });
470
+ const actual = yield validator(instance, {});
471
+ const expected = {
472
+ id: ['error1'],
473
+ type: ['error2'],
474
+ };
475
+ assert.deepEqual(actual, expected);
476
+ }));
477
+ it('should take the error of the one of two functions', () => __awaiter(void 0, void 0, void 0, function* () {
478
+ const properties = {
479
+ id: sinon_1.default.stub().returns(undefined),
480
+ type: sinon_1.default.stub().returns(['error2']),
481
+ };
482
+ const validator = (0, validation_1.createModelValidator)(properties);
483
+ const testModel3 = (0, models_1.BaseModel)('Model', { properties: {} });
484
+ const instance = testModel3.create({
485
+ id: 'test-id',
486
+ type: 'my-name',
487
+ });
488
+ const actual = yield validator(instance, {});
489
+ const expected = {
490
+ type: ['error2'],
491
+ };
492
+ assert.deepEqual(actual, expected);
493
+ }));
494
+ });
495
+ describe('#createPropertyValidator()', () => {
496
+ it('should accept an undefined configuration', () => __awaiter(void 0, void 0, void 0, function* () {
497
+ // @ts-ignore
498
+ const validator = (0, validation_1.createPropertyValidator)(() => null, undefined);
499
+ const actual = yield validator(EMPTY_MODEL_INSTANCE, {});
500
+ const expected = [];
501
+ assert.deepEqual(actual, expected);
502
+ }));
503
+ it('should accept unhandled configurations without exception', () => __awaiter(void 0, void 0, void 0, function* () {
504
+ const validator = (0, validation_1.createPropertyValidator)(() => null, {
505
+ // @ts-ignore
506
+ notarealarg: false,
507
+ });
508
+ const actual = yield validator(EMPTY_MODEL_INSTANCE, {});
509
+ const expected = [];
510
+ assert.deepEqual(actual, expected);
511
+ }));
512
+ it('should not include isRequired if required=false, returning []', () => __awaiter(void 0, void 0, void 0, function* () {
513
+ const validator = (0, validation_1.createPropertyValidator)(() => null, { required: false });
514
+ // @ts-ignore
515
+ const actual = yield validator(null, {});
516
+ const expected = [];
517
+ assert.deepEqual(actual, expected);
518
+ }));
519
+ it('should return [] if no configs are provided', () => __awaiter(void 0, void 0, void 0, function* () {
520
+ const validator = (0, validation_1.createPropertyValidator)(() => null, {});
521
+ // @ts-ignore
522
+ const actual = yield validator(null, {});
523
+ const expected = [];
524
+ assert.deepEqual(actual, expected);
525
+ }));
526
+ it('should use isRequired if required=false, returning one error', () => __awaiter(void 0, void 0, void 0, function* () {
527
+ const validator = (0, validation_1.createPropertyValidator)(() => null, { required: true });
528
+ // @ts-ignore
529
+ const actual = yield validator(null, {});
530
+ const expected = 1;
531
+ assert.equal(actual.length, expected);
532
+ }));
533
+ it('should use validators.isRequired returning one error', () => __awaiter(void 0, void 0, void 0, function* () {
534
+ const validator = (0, validation_1.createPropertyValidator)(() => null, {
535
+ validators: [validation_1.isRequired],
536
+ });
537
+ // @ts-ignore
538
+ const actual = yield validator(null, {});
539
+ const expected = 1;
540
+ assert.equal(actual.length, expected);
541
+ }));
542
+ });
543
+ describe('#isArray()', () => {
544
+ it('should return an error for null', () => {
545
+ const actual = (0, validation_1.isArray)(null, EMPTY_MODEL_INSTANCE, {});
546
+ assert.isOk(actual);
547
+ });
548
+ it('should return an error for undefined', () => {
549
+ const actual = (0, validation_1.isArray)(undefined, EMPTY_MODEL_INSTANCE, {});
550
+ assert.isOk(actual);
551
+ });
552
+ it('should return an error for 1', () => {
553
+ const actual = (0, validation_1.isArray)(1, EMPTY_MODEL_INSTANCE, {});
554
+ assert.isOk(actual);
555
+ });
556
+ it('should return an error for "1"', () => {
557
+ const actual = (0, validation_1.isArray)('1', EMPTY_MODEL_INSTANCE, {});
558
+ assert.isOk(actual);
559
+ });
560
+ it('should return undefined for [1,2,3]', () => {
561
+ const actual = (0, validation_1.isArray)([1, 2, 3], EMPTY_MODEL_INSTANCE, {});
562
+ assert.isUndefined(actual);
563
+ });
564
+ it('should return undefined for []', () => {
565
+ const actual = (0, validation_1.isArray)([], EMPTY_MODEL_INSTANCE, {});
566
+ assert.isUndefined(actual);
567
+ });
568
+ });
569
+ describe('#arrayType()', () => {
570
+ describe('#(object)()', () => {
571
+ it('should return an error for null, even though its an object, its not an array', () => {
572
+ const actual = (0, validation_1.arrayType)('object')(null, EMPTY_MODEL_INSTANCE, {});
573
+ assert.isOk(actual);
574
+ });
575
+ it('should return an error for 1', () => {
576
+ const actual = (0, validation_1.arrayType)('object')(1, EMPTY_MODEL_INSTANCE, {});
577
+ assert.isOk(actual);
578
+ });
579
+ it('should return undefined for [{}]', () => {
580
+ const actual = (0, validation_1.arrayType)('object')([{}], EMPTY_MODEL_INSTANCE, {});
581
+ assert.isUndefined(actual);
582
+ });
583
+ });
584
+ describe('#(integer)()', () => {
585
+ it('should return an error for null', () => {
586
+ const actual = (0, validation_1.arrayType)(validation_1.TYPE_PRIMITIVES.integer)(null, EMPTY_MODEL_INSTANCE, {});
587
+ assert.isOk(actual);
588
+ });
589
+ it('should return an error for undefined', () => {
590
+ const actual = (0, validation_1.arrayType)(validation_1.TYPE_PRIMITIVES.integer)(undefined, EMPTY_MODEL_INSTANCE, {});
591
+ assert.isOk(actual);
592
+ });
593
+ it('should return an error for 1', () => {
594
+ const actual = (0, validation_1.arrayType)(validation_1.TYPE_PRIMITIVES.integer)(1, EMPTY_MODEL_INSTANCE, {});
595
+ assert.isOk(actual);
596
+ });
597
+ it('should return an error for "1"', () => {
598
+ const actual = (0, validation_1.arrayType)(validation_1.TYPE_PRIMITIVES.integer)('1', EMPTY_MODEL_INSTANCE, {});
599
+ assert.isOk(actual);
600
+ });
601
+ it('should return undefined for [1,2,3]', () => {
602
+ const actual = (0, validation_1.arrayType)(validation_1.TYPE_PRIMITIVES.integer)([1, 2, 3], EMPTY_MODEL_INSTANCE, {});
603
+ assert.isUndefined(actual);
604
+ });
605
+ it('should return an error for [1,"2",3]', () => {
606
+ const actual = (0, validation_1.arrayType)(validation_1.TYPE_PRIMITIVES.integer)([1, '2', 3], EMPTY_MODEL_INSTANCE, {});
607
+ assert.isOk(actual);
608
+ });
609
+ });
610
+ });
611
+ });
612
+ //# sourceMappingURL=validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../../test/src/validation.test.ts"],"names":[],"mappings":"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"}