parameters_schema 0.42

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,58 @@
1
+ require 'minitest/autorun'
2
+ require 'parameters_schema'
3
+ require_relative 'helpers'
4
+
5
+ describe 'Empty schema' do
6
+ before do
7
+ ParametersSchema::Options.reset_defaults
8
+ @schema = ParametersSchema::Schema.new do end
9
+ end
10
+
11
+ it 'accepts nil params' do
12
+ @schema
13
+ .validate!(nil)
14
+ .must_equal_hash({})
15
+ end
16
+
17
+ it 'accepts empty params' do
18
+ @schema
19
+ .validate!({})
20
+ .must_equal_hash({})
21
+ end
22
+
23
+ it 'wont accept non-empty params' do
24
+ Proc
25
+ .new{ @schema.validate!(potatoe: 'Eramosa') }
26
+ .must_raise(ParametersSchema::InvalidParameters)
27
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::UNKNOWN)
28
+ end
29
+ end
30
+
31
+ describe 'Simple schema' do
32
+ before do
33
+ @schema = ParametersSchema::Schema.new do
34
+ param :potatoe
35
+ end
36
+ end
37
+
38
+ it 'accepts string or symbol keys' do
39
+ ['potatoe', :potatoe].each do |key|
40
+ @schema
41
+ .validate!(key => 'Eramosa')
42
+ .must_equal_hash(key => 'Eramosa')
43
+ end
44
+ end
45
+
46
+ it 'validates a valid input' do
47
+ @schema
48
+ .validate!(potatoe: 'Eramosa')
49
+ .must_equal_hash(potatoe: 'Eramosa')
50
+ end
51
+
52
+ it 'validates an invalid input because of a missing key' do
53
+ exception = Proc
54
+ .new{ @schema.validate!({}) }
55
+ .must_raise(ParametersSchema::InvalidParameters)
56
+ .errors.must_equal_hash(potatoe: :missing)
57
+ end
58
+ end
@@ -0,0 +1,452 @@
1
+ require 'minitest/autorun'
2
+ require 'parameters_schema'
3
+ require_relative 'helpers'
4
+
5
+ describe 'Types' do
6
+ describe String do
7
+ before do
8
+ ParametersSchema::Options.reset_defaults
9
+
10
+ @schema = ParametersSchema::Schema.new do
11
+ param :potatoe, type: String
12
+ end
13
+ end
14
+
15
+ it 'allow this type' do
16
+ @schema
17
+ .validate!(potatoe: 'Eramosa')
18
+ .must_equal_hash(potatoe: 'Eramosa')
19
+ end
20
+
21
+ it 'allow a Symbol value' do
22
+ @schema
23
+ .validate!(potatoe: :eramosa)
24
+ .must_equal_hash(potatoe: 'eramosa')
25
+ end
26
+
27
+ it 'wont allow other values (no implicit conversion with #to_s)' do
28
+ [true, 1, 1.0, Date.today, DateTime.now, [1], { nope: true }].each do |value|
29
+ Proc
30
+ .new{ @schema.validate!(potatoe: value) }
31
+ .must_raise(ParametersSchema::InvalidParameters)
32
+ .errors.must_equal_hash(potatoe: :disallowed)
33
+ end
34
+ end
35
+
36
+ it 'must have a value' do
37
+ Proc
38
+ .new{ @schema.validate!(potatoe: nil) }
39
+ .must_raise(ParametersSchema::InvalidParameters)
40
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
41
+
42
+ Proc
43
+ .new{ @schema.validate!(potatoe: '') }
44
+ .must_raise(ParametersSchema::InvalidParameters)
45
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::EMPTY)
46
+ end
47
+ end
48
+
49
+ describe Symbol do
50
+ before do
51
+ ParametersSchema::Options.reset_defaults
52
+
53
+ @schema = ParametersSchema::Schema.new do
54
+ param :potatoe, type: Symbol
55
+ end
56
+ end
57
+
58
+ it 'allow this type' do
59
+ @schema
60
+ .validate!(potatoe: :eramosa)
61
+ .must_equal_hash(potatoe: :eramosa)
62
+ end
63
+
64
+ it 'allow a String value' do
65
+ @schema
66
+ .validate!(potatoe: 'eramosa')
67
+ .must_equal_hash(potatoe: :eramosa)
68
+ end
69
+
70
+ it 'wont allow other values' do
71
+ [true, 1, 1.0, Date.today, DateTime.now, [1], { nope: true }].each do |value|
72
+ Proc
73
+ .new{ @schema.validate!(potatoe: value) }
74
+ .must_raise(ParametersSchema::InvalidParameters)
75
+ .errors.must_equal_hash(potatoe: :disallowed)
76
+ end
77
+ end
78
+
79
+ it 'must have a value' do
80
+ Proc
81
+ .new{ @schema.validate!(potatoe: nil) }
82
+ .must_raise(ParametersSchema::InvalidParameters)
83
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
84
+
85
+ Proc
86
+ .new{ @schema.validate!(potatoe: :'') }
87
+ .must_raise(ParametersSchema::InvalidParameters)
88
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::EMPTY)
89
+ end
90
+ end
91
+
92
+ describe Fixnum do
93
+ before do
94
+ ParametersSchema::Options.reset_defaults
95
+
96
+ @schema = ParametersSchema::Schema.new do
97
+ param :potatoe, type: Fixnum
98
+ end
99
+ end
100
+
101
+ it 'allow this type' do
102
+ @schema
103
+ .validate!(potatoe: 1)
104
+ .must_equal_hash(potatoe: 1)
105
+ end
106
+
107
+ it 'allow a String value' do
108
+ @schema
109
+ .validate!(potatoe: '2')
110
+ .must_equal_hash(potatoe: 2)
111
+ end
112
+
113
+ it 'allow a Float value' do
114
+ @schema
115
+ .validate!(potatoe: 2.1)
116
+ .must_equal_hash(potatoe: 2)
117
+ end
118
+
119
+ it 'allow a String value representing a Float value' do
120
+ @schema
121
+ .validate!(potatoe: '2.1')
122
+ .must_equal_hash(potatoe: 2)
123
+ end
124
+
125
+ it 'wont allow other values' do
126
+ [true, '1a', '1.2.3.4', Date.today, DateTime.now, [1], { nope: true }].each do |value|
127
+ Proc
128
+ .new{ @schema.validate!(potatoe: value) }
129
+ .must_raise(ParametersSchema::InvalidParameters)
130
+ .errors.must_equal_hash(potatoe: :disallowed)
131
+ end
132
+ end
133
+
134
+ it 'must have a value' do
135
+ Proc
136
+ .new{ @schema.validate!(potatoe: nil) }
137
+ .must_raise(ParametersSchema::InvalidParameters)
138
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
139
+ end
140
+ end
141
+
142
+ describe Float do
143
+ before do
144
+ ParametersSchema::Options.reset_defaults
145
+
146
+ @schema = ParametersSchema::Schema.new do
147
+ param :potatoe, type: Float
148
+ end
149
+ end
150
+
151
+ it 'allow this type' do
152
+ @schema
153
+ .validate!(potatoe: 1.0)
154
+ .must_equal_hash(potatoe: 1.0)
155
+ end
156
+
157
+ it 'allow a String value' do
158
+ @schema
159
+ .validate!(potatoe: '1.2')
160
+ .must_equal_hash(potatoe: 1.2)
161
+ end
162
+
163
+ it 'allow a Fixnum value' do
164
+ @schema
165
+ .validate!(potatoe: 3)
166
+ .must_equal_hash(potatoe: 3.0)
167
+ end
168
+
169
+ it 'allow a String value representing a Fixnum value' do
170
+ @schema
171
+ .validate!(potatoe: '3')
172
+ .must_equal_hash(potatoe: 3)
173
+ end
174
+
175
+ it 'wont allow other values' do
176
+ [true, '1a', '1.2.3.4', Date.today, DateTime.now, [1], { nope: true }].each do |value|
177
+ Proc
178
+ .new{ @schema.validate!(potatoe: value) }
179
+ .must_raise(ParametersSchema::InvalidParameters)
180
+ .errors.must_equal_hash(potatoe: :disallowed)
181
+ end
182
+ end
183
+
184
+ it 'must have a value' do
185
+ Proc
186
+ .new{ @schema.validate!(potatoe: nil) }
187
+ .must_raise(ParametersSchema::InvalidParameters)
188
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
189
+ end
190
+ end
191
+
192
+ describe :boolean do
193
+ before do
194
+ ParametersSchema::Options.reset_defaults
195
+
196
+ @schema = ParametersSchema::Schema.new do
197
+ param :potatoe, type: :boolean
198
+ end
199
+ end
200
+
201
+ it 'allow this type' do
202
+ (ParametersSchema::Options.boolean_true_values + ParametersSchema::Options.boolean_false_values).each do |value|
203
+ @schema
204
+ .validate!(potatoe: value)
205
+ .must_equal_hash(potatoe: ParametersSchema::Options.boolean_true_values.include?(value))
206
+ end
207
+ end
208
+
209
+ it 'is not case-sensitive' do
210
+ %w(t T true True TRUE tRuE).each do |value|
211
+ @schema
212
+ .validate!(potatoe: value)
213
+ .must_equal_hash(potatoe: true)
214
+ end
215
+ end
216
+
217
+ it 'wont allow other values' do
218
+ [2, 1.2, 'whatever', Date.today, DateTime.now, [1], { nope: true }].each do |value|
219
+ Proc
220
+ .new{ @schema.validate!(potatoe: value) }
221
+ .must_raise(ParametersSchema::InvalidParameters)
222
+ .errors.must_equal_hash(potatoe: :disallowed)
223
+ end
224
+ end
225
+
226
+ it 'must have a value' do
227
+ Proc
228
+ .new{ @schema.validate!(potatoe: nil) }
229
+ .must_raise(ParametersSchema::InvalidParameters)
230
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
231
+ end
232
+ end
233
+
234
+ describe :any do
235
+ before do
236
+ ParametersSchema::Options.reset_defaults
237
+
238
+ @schema = ParametersSchema::Schema.new do
239
+ param :potatoe, type: :any
240
+ end
241
+ end
242
+
243
+ it 'allow this type' do
244
+ [2, 1.2, 'whatever', Date.today, DateTime.now, [1], { nope: true }].each do |value|
245
+ @schema
246
+ .validate!(potatoe: value)
247
+ .must_equal_hash(potatoe: value)
248
+ end
249
+ end
250
+
251
+ it 'must have a value' do
252
+ Proc
253
+ .new{ @schema.validate!(potatoe: nil) }
254
+ .must_raise(ParametersSchema::InvalidParameters)
255
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
256
+ end
257
+ end
258
+
259
+ describe Date do
260
+ before do
261
+ ParametersSchema::Options.reset_defaults
262
+
263
+ @schema = ParametersSchema::Schema.new do
264
+ param :potatoe, type: Date
265
+ end
266
+ end
267
+
268
+ it 'allow this type' do
269
+ date = Date.today
270
+
271
+ @schema
272
+ .validate!(potatoe: date)
273
+ .must_equal_hash(potatoe: date)
274
+ end
275
+
276
+ it 'accepts a String using the default format' do
277
+ date = Date.today
278
+
279
+ @schema
280
+ .validate!(potatoe: date.to_s)
281
+ .must_equal_hash(potatoe: date)
282
+ end
283
+
284
+ it 'accepts a DateTime' do
285
+ datetime = DateTime.now
286
+
287
+ @schema
288
+ .validate!(potatoe: datetime)
289
+ .must_equal_hash(potatoe: datetime.to_date)
290
+ end
291
+
292
+ it 'accepts a String representing a DateTime' do
293
+ datetime = DateTime.now
294
+
295
+ @schema
296
+ .validate!(potatoe: datetime.to_s)
297
+ .must_equal_hash(potatoe: datetime.to_date)
298
+ end
299
+
300
+ it 'wont allow other values' do
301
+ [2, 1.2, 'whatever', true, [1], { nope: true }, :lol].each do |value|
302
+ Proc
303
+ .new{ @schema.validate!(potatoe: value) }
304
+ .must_raise(ParametersSchema::InvalidParameters)
305
+ .errors.must_equal_hash(potatoe: :disallowed)
306
+ end
307
+ end
308
+
309
+ it 'must have a value' do
310
+ Proc
311
+ .new{ @schema.validate!(potatoe: nil) }
312
+ .must_raise(ParametersSchema::InvalidParameters)
313
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
314
+ end
315
+ end
316
+
317
+ describe DateTime do
318
+ before do
319
+ ParametersSchema::Options.reset_defaults
320
+
321
+ @schema = ParametersSchema::Schema.new do
322
+ param :potatoe, type: DateTime
323
+ end
324
+ end
325
+
326
+ it 'allow this type' do
327
+ time = DateTime.now
328
+
329
+ @schema
330
+ .validate!(potatoe: time)
331
+ .must_equal_hash(potatoe: time)
332
+ end
333
+
334
+ it 'accepts a String using the default format' do
335
+ time = DateTime.now
336
+
337
+ @schema
338
+ .validate!(potatoe: time.to_s)
339
+ .must_equal_hash(potatoe: DateTime.parse(time.to_s))
340
+ end
341
+
342
+ it 'accepts a Date' do
343
+ date = Date.today
344
+
345
+ @schema
346
+ .validate!(potatoe: date)
347
+ .must_equal_hash(potatoe: date.to_datetime)
348
+ end
349
+
350
+ it 'accepts a String representing a Date' do
351
+ date = Date.today
352
+
353
+ @schema
354
+ .validate!(potatoe: date.to_s)
355
+ .must_equal_hash(potatoe: date.to_datetime)
356
+ end
357
+
358
+ it 'wont allow other values' do
359
+ [2, 1.2, 'whatever', true, [1], { nope: true }, :lol].each do |value|
360
+ Proc
361
+ .new{ @schema.validate!(potatoe: value) }
362
+ .must_raise(ParametersSchema::InvalidParameters)
363
+ .errors.must_equal_hash(potatoe: :disallowed)
364
+ end
365
+ end
366
+
367
+ it 'must have a value' do
368
+ Proc
369
+ .new{ @schema.validate!(potatoe: nil) }
370
+ .must_raise(ParametersSchema::InvalidParameters)
371
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
372
+ end
373
+ end
374
+
375
+ describe Hash do
376
+ before do
377
+ ParametersSchema::Options.reset_defaults
378
+
379
+ @schema = ParametersSchema::Schema.new do
380
+ param :potatoe, type: Hash
381
+ end
382
+ end
383
+
384
+ it 'allow this type' do
385
+ [{ id: 1 }, { id: '1' }, { id: :'1' }, { description: { name: 'Eramosa' } }].each do |value|
386
+ @schema
387
+ .validate!(potatoe: value)
388
+ .must_equal_hash(potatoe: value)
389
+ end
390
+ end
391
+
392
+ it 'wont allow other values' do
393
+ [2, 1.2, 'whatever', true, [1], :lol].each do |value|
394
+ Proc
395
+ .new{ @schema.validate!(potatoe: value) }
396
+ .must_raise(ParametersSchema::InvalidParameters)
397
+ .errors.must_equal_hash(potatoe: :disallowed)
398
+ end
399
+ end
400
+
401
+ it 'must have a value' do
402
+ Proc
403
+ .new{ @schema.validate!(potatoe: nil) }
404
+ .must_raise(ParametersSchema::InvalidParameters)
405
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
406
+
407
+ Proc
408
+ .new{ @schema.validate!(potatoe: '') }
409
+ .must_raise(ParametersSchema::InvalidParameters)
410
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::EMPTY)
411
+ end
412
+ end
413
+
414
+ describe Array do
415
+ before do
416
+ ParametersSchema::Options.reset_defaults
417
+
418
+ @schema = ParametersSchema::Schema.new do
419
+ param :potatoe, type: Array
420
+ end
421
+ end
422
+
423
+ it 'allow this type' do
424
+ [[1], [:a], ['a', 'b', 'c'], [nil], [1, true, 'a', :b]].each do |value|
425
+ @schema
426
+ .validate!(potatoe: value)
427
+ .must_equal_hash(potatoe: value)
428
+ end
429
+ end
430
+
431
+ it 'wont allow other values' do
432
+ [2, 1.2, 'whatever', true, { test: 1 }, :lol].each do |value|
433
+ Proc
434
+ .new{ @schema.validate!(potatoe: value) }
435
+ .must_raise(ParametersSchema::InvalidParameters)
436
+ .errors.must_equal_hash(potatoe: :disallowed)
437
+ end
438
+ end
439
+
440
+ it 'must have a value' do
441
+ Proc
442
+ .new{ @schema.validate!(potatoe: nil) }
443
+ .must_raise(ParametersSchema::InvalidParameters)
444
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::NIL)
445
+
446
+ Proc
447
+ .new{ @schema.validate!(potatoe: []) }
448
+ .must_raise(ParametersSchema::InvalidParameters)
449
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::EMPTY)
450
+ end
451
+ end
452
+ end