parameters_schema 0.42 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,452 +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
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