validno 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.
- package/.eslintrc.cjs +13 -0
- package/.eslintrc.json +16 -0
- package/README.md +1 -0
- package/dist/Schema.js +15 -0
- package/dist/Validator.js +100 -0
- package/dist/checkRules.js +122 -0
- package/dist/checkType.js +151 -0
- package/dist/index.js +2 -0
- package/dist/utils/validations.js +87 -0
- package/dist/validate.js +110 -0
- package/jest.config.ts +199 -0
- package/nodemon.json +4 -0
- package/package.json +26 -0
- package/src/Schema.ts +40 -0
- package/src/app.ts +199 -0
- package/src/checkRules.ts +146 -0
- package/src/checkType.ts +172 -0
- package/src/index.ts +3 -0
- package/src/tsconfig.json +103 -0
- package/src/utils/validations.ts +111 -0
- package/src/validate.ts +166 -0
- package/tests/types.test.js +311 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import {describe, expect, test} from '@jest/globals';
|
|
2
|
+
import { Schema } from '../dist/Schema.js';
|
|
3
|
+
|
|
4
|
+
describe("Проверка каждого типа по отдельности", () => {
|
|
5
|
+
test('Тест String', () => {
|
|
6
|
+
const key = 'testKey'
|
|
7
|
+
const scheme = new Schema({
|
|
8
|
+
[key]: {
|
|
9
|
+
required: true,
|
|
10
|
+
type: String
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
const objOK = {
|
|
14
|
+
[key]: 'string'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const resOK = scheme.validate(objOK)
|
|
18
|
+
|
|
19
|
+
expect(resOK.ok).toBe(true)
|
|
20
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
21
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
22
|
+
|
|
23
|
+
const objBad = {
|
|
24
|
+
[key]: 1
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const resBad = scheme.validate(objBad)
|
|
28
|
+
expect(resBad.ok).toBe(false)
|
|
29
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
30
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
31
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
test('Тест Number', () => {
|
|
35
|
+
const key = 'testKey'
|
|
36
|
+
const scheme = new Schema({
|
|
37
|
+
[key]: {
|
|
38
|
+
required: true,
|
|
39
|
+
type: Number
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
const objOK = {
|
|
43
|
+
[key]: 111
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const resOK = scheme.validate(objOK)
|
|
47
|
+
|
|
48
|
+
expect(resOK.ok).toBe(true)
|
|
49
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
50
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
51
|
+
|
|
52
|
+
const objBad = {
|
|
53
|
+
[key]: 'string'
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const resBad = scheme.validate(objBad)
|
|
57
|
+
expect(resBad.ok).toBe(false)
|
|
58
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
59
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
60
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('Тест Boolean', () => {
|
|
64
|
+
const key = 'testKey'
|
|
65
|
+
const scheme = new Schema({
|
|
66
|
+
[key]: {
|
|
67
|
+
required: true,
|
|
68
|
+
type: Boolean
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
const objOK = {
|
|
72
|
+
[key]: true
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const resOK = scheme.validate(objOK)
|
|
76
|
+
|
|
77
|
+
expect(resOK.ok).toBe(true)
|
|
78
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
79
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
80
|
+
|
|
81
|
+
const objBad = {
|
|
82
|
+
[key]: 'false'
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const resBad = scheme.validate(objBad)
|
|
86
|
+
expect(resBad.ok).toBe(false)
|
|
87
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
88
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
89
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
test('Тест Array', () => {
|
|
93
|
+
const key = 'testKey'
|
|
94
|
+
const scheme = new Schema({
|
|
95
|
+
[key]: {
|
|
96
|
+
required: true,
|
|
97
|
+
type: Array
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
const objOK = {
|
|
101
|
+
[key]: []
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const objOK2 = {
|
|
105
|
+
[key]: [1,2,3]
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const resOK = scheme.validate(objOK)
|
|
109
|
+
expect(resOK.ok).toBe(true)
|
|
110
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
111
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
112
|
+
|
|
113
|
+
const resOK2 = scheme.validate(objOK2)
|
|
114
|
+
expect(resOK2.ok).toBe(true)
|
|
115
|
+
expect(resOK2.passed.includes(key)).toBe(true)
|
|
116
|
+
expect(resOK2.byKeys[key]).toBe(true)
|
|
117
|
+
|
|
118
|
+
const objBad = {
|
|
119
|
+
[key]: 'not array'
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const resBad = scheme.validate(objBad)
|
|
123
|
+
expect(resBad.ok).toBe(false)
|
|
124
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
125
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
126
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
test('Тест null', () => {
|
|
130
|
+
const key = 'testKey'
|
|
131
|
+
const scheme = new Schema({
|
|
132
|
+
[key]: {
|
|
133
|
+
required: true,
|
|
134
|
+
type: null
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
const objOK = {
|
|
138
|
+
[key]: null
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const resOK = scheme.validate(objOK)
|
|
142
|
+
expect(resOK.ok).toBe(true)
|
|
143
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
144
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
145
|
+
|
|
146
|
+
const objBad = {
|
|
147
|
+
[key]: 'not null'
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const resBad = scheme.validate(objBad)
|
|
151
|
+
expect(resBad.ok).toBe(false)
|
|
152
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
153
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
154
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
test('Тест Date', () => {
|
|
158
|
+
const key = 'testKey'
|
|
159
|
+
const scheme = new Schema({
|
|
160
|
+
[key]: {
|
|
161
|
+
required: true,
|
|
162
|
+
type: Date
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
const objOK = {
|
|
166
|
+
[key]: new Date()
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const resOK = scheme.validate(objOK)
|
|
170
|
+
expect(resOK.ok).toBe(true)
|
|
171
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
172
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
173
|
+
|
|
174
|
+
const objBad = {
|
|
175
|
+
[key]: 'not date'
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const resBad = scheme.validate(objBad)
|
|
179
|
+
expect(resBad.ok).toBe(false)
|
|
180
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
181
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
182
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
test('Тест Object', () => {
|
|
186
|
+
const key = 'testKey'
|
|
187
|
+
const scheme = new Schema({
|
|
188
|
+
[key]: {
|
|
189
|
+
required: true,
|
|
190
|
+
type: Object
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
const objOK = {
|
|
194
|
+
[key]: { test: 1}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const resOK = scheme.validate(objOK)
|
|
198
|
+
expect(resOK.ok).toBe(true)
|
|
199
|
+
expect(resOK.passed.includes(key)).toBe(true)
|
|
200
|
+
expect(resOK.byKeys[key]).toBe(true)
|
|
201
|
+
|
|
202
|
+
const objBad = {
|
|
203
|
+
[key]: 'not obj'
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const resBad = scheme.validate(objBad)
|
|
207
|
+
expect(resBad.ok).toBe(false)
|
|
208
|
+
expect(resBad.failed.includes(key)).toBe(true)
|
|
209
|
+
expect(resBad.passed.includes(key)).toBe(false)
|
|
210
|
+
expect(resBad.byKeys[key]).toBe(false)
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
describe("Проверка всех типов сразу", () => {
|
|
215
|
+
test('Тест всех типов с корректными данными', () => {
|
|
216
|
+
const schema = new Schema({
|
|
217
|
+
str: {
|
|
218
|
+
type: String,
|
|
219
|
+
},
|
|
220
|
+
obj: {
|
|
221
|
+
type: Object,
|
|
222
|
+
},
|
|
223
|
+
num: {
|
|
224
|
+
type: Number,
|
|
225
|
+
},
|
|
226
|
+
arr: {
|
|
227
|
+
type: Array,
|
|
228
|
+
},
|
|
229
|
+
null: {
|
|
230
|
+
type: null,
|
|
231
|
+
},
|
|
232
|
+
bool: {
|
|
233
|
+
type: Boolean,
|
|
234
|
+
},
|
|
235
|
+
date: {
|
|
236
|
+
type: Date
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
const obj = {
|
|
241
|
+
str: 'String',
|
|
242
|
+
obj: {},
|
|
243
|
+
num: 1,
|
|
244
|
+
arr: [1,2,3],
|
|
245
|
+
null: null,
|
|
246
|
+
bool: true,
|
|
247
|
+
date: new Date()
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const res = schema.validate(obj)
|
|
251
|
+
expect(res.ok).toBe(true)
|
|
252
|
+
const arePassed = []
|
|
253
|
+
for (const key in obj) {
|
|
254
|
+
arePassed.push(res.byKeys[key])
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
expect(arePassed.every(el => el === true)).toBe(true)
|
|
258
|
+
expect(res.errors.length).toBe(0)
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
test('Тест всех типов с некорректными данными', () => {
|
|
262
|
+
const schema = new Schema({
|
|
263
|
+
str: {
|
|
264
|
+
type: String,
|
|
265
|
+
},
|
|
266
|
+
obj: {
|
|
267
|
+
type: Object,
|
|
268
|
+
},
|
|
269
|
+
num: {
|
|
270
|
+
type: Number,
|
|
271
|
+
},
|
|
272
|
+
arr: {
|
|
273
|
+
type: Array,
|
|
274
|
+
},
|
|
275
|
+
null: {
|
|
276
|
+
type: null,
|
|
277
|
+
},
|
|
278
|
+
bool: {
|
|
279
|
+
type: Boolean,
|
|
280
|
+
},
|
|
281
|
+
date: {
|
|
282
|
+
type: Date
|
|
283
|
+
}
|
|
284
|
+
})
|
|
285
|
+
|
|
286
|
+
const obj = {
|
|
287
|
+
str: 123,
|
|
288
|
+
obj: [],
|
|
289
|
+
num: 'str',
|
|
290
|
+
arr: null,
|
|
291
|
+
null: {},
|
|
292
|
+
bool: new Date(),
|
|
293
|
+
date: true
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const res = schema.validate(obj)
|
|
297
|
+
expect(res.ok).toBe(false)
|
|
298
|
+
|
|
299
|
+
const areFailed = []
|
|
300
|
+
const hasErrorMsg = []
|
|
301
|
+
|
|
302
|
+
for (const key in obj) {
|
|
303
|
+
areFailed.push(res.byKeys[key])
|
|
304
|
+
hasErrorMsg.push(key in res.errorsByKeys)
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
expect(areFailed.every(el => el === false)).toBe(true)
|
|
308
|
+
expect(hasErrorMsg.every(el => el === true)).toBe(true)
|
|
309
|
+
expect(res.errors.length).toBe(Object.keys(obj).length)
|
|
310
|
+
})
|
|
311
|
+
})
|