grape 1.8.0 → 2.0.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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +19 -22
  4. data/UPGRADING.md +35 -0
  5. data/grape.gemspec +1 -4
  6. data/lib/grape/dsl/desc.rb +1 -1
  7. data/lib/grape/dsl/inside_route.rb +9 -9
  8. data/lib/grape/endpoint.rb +9 -1
  9. data/lib/grape/exceptions/missing_group_type.rb +1 -1
  10. data/lib/grape/exceptions/unsupported_group_type.rb +1 -1
  11. data/lib/grape/http/headers.rb +12 -2
  12. data/lib/grape/middleware/auth/strategies.rb +1 -2
  13. data/lib/grape/middleware/error.rb +4 -4
  14. data/lib/grape/middleware/formatter.rb +5 -5
  15. data/lib/grape/railtie.rb +9 -0
  16. data/lib/grape/request.rb +8 -2
  17. data/lib/grape/router/route.rb +1 -1
  18. data/lib/grape/validations/validators/base.rb +1 -1
  19. data/lib/grape/validations/validators/values_validator.rb +2 -2
  20. data/lib/grape/version.rb +1 -1
  21. data/lib/grape.rb +15 -2
  22. metadata +8 -243
  23. data/spec/grape/api/custom_validations_spec.rb +0 -213
  24. data/spec/grape/api/deeply_included_options_spec.rb +0 -56
  25. data/spec/grape/api/defines_boolean_in_params_spec.rb +0 -38
  26. data/spec/grape/api/documentation_spec.rb +0 -59
  27. data/spec/grape/api/inherited_helpers_spec.rb +0 -114
  28. data/spec/grape/api/instance_spec.rb +0 -103
  29. data/spec/grape/api/invalid_format_spec.rb +0 -45
  30. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -38
  31. data/spec/grape/api/nested_helpers_spec.rb +0 -50
  32. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -43
  33. data/spec/grape/api/parameters_modification_spec.rb +0 -41
  34. data/spec/grape/api/patch_method_helpers_spec.rb +0 -79
  35. data/spec/grape/api/recognize_path_spec.rb +0 -21
  36. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -37
  37. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -26
  38. data/spec/grape/api/routes_with_requirements_spec.rb +0 -59
  39. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +0 -41
  40. data/spec/grape/api/shared_helpers_spec.rb +0 -36
  41. data/spec/grape/api_remount_spec.rb +0 -509
  42. data/spec/grape/api_spec.rb +0 -4356
  43. data/spec/grape/dsl/callbacks_spec.rb +0 -45
  44. data/spec/grape/dsl/desc_spec.rb +0 -98
  45. data/spec/grape/dsl/headers_spec.rb +0 -62
  46. data/spec/grape/dsl/helpers_spec.rb +0 -100
  47. data/spec/grape/dsl/inside_route_spec.rb +0 -531
  48. data/spec/grape/dsl/logger_spec.rb +0 -24
  49. data/spec/grape/dsl/middleware_spec.rb +0 -60
  50. data/spec/grape/dsl/parameters_spec.rb +0 -180
  51. data/spec/grape/dsl/request_response_spec.rb +0 -225
  52. data/spec/grape/dsl/routing_spec.rb +0 -275
  53. data/spec/grape/dsl/settings_spec.rb +0 -261
  54. data/spec/grape/dsl/validations_spec.rb +0 -55
  55. data/spec/grape/endpoint/declared_spec.rb +0 -846
  56. data/spec/grape/endpoint_spec.rb +0 -1085
  57. data/spec/grape/entity_spec.rb +0 -336
  58. data/spec/grape/exceptions/base_spec.rb +0 -81
  59. data/spec/grape/exceptions/body_parse_errors_spec.rb +0 -185
  60. data/spec/grape/exceptions/invalid_accept_header_spec.rb +0 -358
  61. data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -15
  62. data/spec/grape/exceptions/invalid_response_spec.rb +0 -11
  63. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +0 -15
  64. data/spec/grape/exceptions/missing_group_type_spec.rb +0 -17
  65. data/spec/grape/exceptions/missing_mime_type_spec.rb +0 -17
  66. data/spec/grape/exceptions/missing_option_spec.rb +0 -15
  67. data/spec/grape/exceptions/unknown_options_spec.rb +0 -15
  68. data/spec/grape/exceptions/unknown_validator_spec.rb +0 -15
  69. data/spec/grape/exceptions/unsupported_group_type_spec.rb +0 -19
  70. data/spec/grape/exceptions/validation_errors_spec.rb +0 -92
  71. data/spec/grape/exceptions/validation_spec.rb +0 -19
  72. data/spec/grape/extensions/param_builders/hash_spec.rb +0 -83
  73. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +0 -105
  74. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +0 -79
  75. data/spec/grape/grape_spec.rb +0 -9
  76. data/spec/grape/integration/global_namespace_function_spec.rb +0 -29
  77. data/spec/grape/integration/rack_sendfile_spec.rb +0 -48
  78. data/spec/grape/integration/rack_spec.rb +0 -51
  79. data/spec/grape/loading_spec.rb +0 -44
  80. data/spec/grape/middleware/auth/base_spec.rb +0 -31
  81. data/spec/grape/middleware/auth/dsl_spec.rb +0 -60
  82. data/spec/grape/middleware/auth/strategies_spec.rb +0 -120
  83. data/spec/grape/middleware/base_spec.rb +0 -221
  84. data/spec/grape/middleware/error_spec.rb +0 -85
  85. data/spec/grape/middleware/exception_spec.rb +0 -294
  86. data/spec/grape/middleware/formatter_spec.rb +0 -461
  87. data/spec/grape/middleware/globals_spec.rb +0 -30
  88. data/spec/grape/middleware/stack_spec.rb +0 -155
  89. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +0 -122
  90. data/spec/grape/middleware/versioner/header_spec.rb +0 -345
  91. data/spec/grape/middleware/versioner/param_spec.rb +0 -171
  92. data/spec/grape/middleware/versioner/path_spec.rb +0 -62
  93. data/spec/grape/middleware/versioner_spec.rb +0 -21
  94. data/spec/grape/named_api_spec.rb +0 -19
  95. data/spec/grape/parser_spec.rb +0 -86
  96. data/spec/grape/path_spec.rb +0 -252
  97. data/spec/grape/presenters/presenter_spec.rb +0 -71
  98. data/spec/grape/request_spec.rb +0 -126
  99. data/spec/grape/util/inheritable_setting_spec.rb +0 -242
  100. data/spec/grape/util/inheritable_values_spec.rb +0 -79
  101. data/spec/grape/util/reverse_stackable_values_spec.rb +0 -134
  102. data/spec/grape/util/stackable_values_spec.rb +0 -128
  103. data/spec/grape/util/strict_hash_configuration_spec.rb +0 -38
  104. data/spec/grape/validations/attributes_doc_spec.rb +0 -153
  105. data/spec/grape/validations/instance_behaivour_spec.rb +0 -43
  106. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +0 -38
  107. data/spec/grape/validations/params_scope_spec.rb +0 -1420
  108. data/spec/grape/validations/single_attribute_iterator_spec.rb +0 -56
  109. data/spec/grape/validations/types/array_coercer_spec.rb +0 -33
  110. data/spec/grape/validations/types/primitive_coercer_spec.rb +0 -150
  111. data/spec/grape/validations/types/set_coercer_spec.rb +0 -32
  112. data/spec/grape/validations/types_spec.rb +0 -111
  113. data/spec/grape/validations/validators/all_or_none_spec.rb +0 -162
  114. data/spec/grape/validations/validators/allow_blank_spec.rb +0 -575
  115. data/spec/grape/validations/validators/at_least_one_of_spec.rb +0 -205
  116. data/spec/grape/validations/validators/base_spec.rb +0 -38
  117. data/spec/grape/validations/validators/coerce_spec.rb +0 -1261
  118. data/spec/grape/validations/validators/default_spec.rb +0 -463
  119. data/spec/grape/validations/validators/exactly_one_of_spec.rb +0 -233
  120. data/spec/grape/validations/validators/except_values_spec.rb +0 -192
  121. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +0 -214
  122. data/spec/grape/validations/validators/presence_spec.rb +0 -315
  123. data/spec/grape/validations/validators/regexp_spec.rb +0 -161
  124. data/spec/grape/validations/validators/same_as_spec.rb +0 -57
  125. data/spec/grape/validations/validators/values_spec.rb +0 -733
  126. data/spec/grape/validations/validators/zh-CN.yml +0 -10
  127. data/spec/grape/validations_spec.rb +0 -2030
  128. data/spec/integration/eager_load/eager_load_spec.rb +0 -15
  129. data/spec/integration/multi_json/json_spec.rb +0 -7
  130. data/spec/integration/multi_xml/xml_spec.rb +0 -7
  131. data/spec/shared/deprecated_class_examples.rb +0 -16
  132. data/spec/shared/versioning_examples.rb +0 -215
  133. data/spec/spec_helper.rb +0 -52
  134. data/spec/support/basic_auth_encode_helpers.rb +0 -11
  135. data/spec/support/chunks.rb +0 -14
  136. data/spec/support/content_type_helpers.rb +0 -15
  137. data/spec/support/endpoint_faker.rb +0 -25
  138. data/spec/support/file_streamer.rb +0 -13
  139. data/spec/support/integer_helpers.rb +0 -13
  140. data/spec/support/versioned_helpers.rb +0 -55
@@ -1,575 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::Validations::Validators::AllowBlankValidator do
4
- let_it_be(:app) do
5
- Class.new(Grape::API) do
6
- default_format :json
7
-
8
- params do
9
- requires :name, allow_blank: false
10
- end
11
- get '/disallow_blank'
12
-
13
- params do
14
- optional :name, type: String, allow_blank: false
15
- end
16
- get '/opt_disallow_string_blank'
17
-
18
- params do
19
- optional :name, allow_blank: false
20
- end
21
- get '/disallow_blank_optional_param'
22
-
23
- params do
24
- requires :name, allow_blank: true
25
- end
26
- get '/allow_blank'
27
-
28
- params do
29
- requires :val, type: DateTime, allow_blank: true
30
- end
31
- get '/allow_datetime_blank'
32
-
33
- params do
34
- requires :val, type: DateTime, allow_blank: false
35
- end
36
- get '/disallow_datetime_blank'
37
-
38
- params do
39
- requires :val, type: DateTime
40
- end
41
- get '/default_allow_datetime_blank'
42
-
43
- params do
44
- requires :val, type: Date, allow_blank: true
45
- end
46
- get '/allow_date_blank'
47
-
48
- params do
49
- requires :val, type: Integer, allow_blank: true
50
- end
51
- get '/allow_integer_blank'
52
-
53
- params do
54
- requires :val, type: Float, allow_blank: true
55
- end
56
- get '/allow_float_blank'
57
-
58
- params do
59
- requires :val, type: Integer, allow_blank: true
60
- end
61
- get '/allow_integer_blank'
62
-
63
- params do
64
- requires :val, type: Symbol, allow_blank: true
65
- end
66
- get '/allow_symbol_blank'
67
-
68
- params do
69
- requires :val, type: Grape::API::Boolean, allow_blank: true
70
- end
71
- get '/allow_boolean_blank'
72
-
73
- params do
74
- requires :val, type: Grape::API::Boolean, allow_blank: false
75
- end
76
- get '/disallow_boolean_blank'
77
-
78
- params do
79
- optional :user, type: Hash do
80
- requires :name, allow_blank: false
81
- end
82
- end
83
- get '/disallow_blank_required_param_in_an_optional_group'
84
-
85
- params do
86
- optional :user, type: Hash do
87
- requires :name, type: Date, allow_blank: true
88
- end
89
- end
90
- get '/allow_blank_date_param_in_an_optional_group'
91
-
92
- params do
93
- optional :user, type: Hash do
94
- optional :name, allow_blank: false
95
- requires :age
96
- end
97
- end
98
- get '/disallow_blank_optional_param_in_an_optional_group'
99
-
100
- params do
101
- requires :user, type: Hash do
102
- requires :name, allow_blank: false
103
- end
104
- end
105
- get '/disallow_blank_required_param_in_a_required_group'
106
-
107
- params do
108
- requires :user, type: Hash do
109
- requires :name, allow_blank: false
110
- end
111
- end
112
- get '/disallow_string_value_in_a_required_hash_group'
113
-
114
- params do
115
- requires :user, type: Hash do
116
- optional :name, allow_blank: false
117
- end
118
- end
119
- get '/disallow_blank_optional_param_in_a_required_group'
120
-
121
- params do
122
- optional :user, type: Hash do
123
- optional :name, allow_blank: false
124
- end
125
- end
126
- get '/disallow_string_value_in_an_optional_hash_group'
127
-
128
- resources :custom_message do
129
- params do
130
- requires :name, allow_blank: { value: false, message: 'has no value' }
131
- end
132
- get
133
-
134
- params do
135
- optional :name, allow_blank: { value: false, message: 'has no value' }
136
- end
137
- get '/disallow_blank_optional_param'
138
-
139
- params do
140
- requires :name, allow_blank: true
141
- end
142
- get '/allow_blank'
143
-
144
- params do
145
- requires :val, type: DateTime, allow_blank: true
146
- end
147
- get '/allow_datetime_blank'
148
-
149
- params do
150
- requires :val, type: DateTime, allow_blank: { value: false, message: 'has no value' }
151
- end
152
- get '/disallow_datetime_blank'
153
-
154
- params do
155
- requires :val, type: DateTime
156
- end
157
- get '/default_allow_datetime_blank'
158
-
159
- params do
160
- requires :val, type: Date, allow_blank: true
161
- end
162
- get '/allow_date_blank'
163
-
164
- params do
165
- requires :val, type: Integer, allow_blank: true
166
- end
167
- get '/allow_integer_blank'
168
-
169
- params do
170
- requires :val, type: Float, allow_blank: true
171
- end
172
- get '/allow_float_blank'
173
-
174
- params do
175
- requires :val, type: Integer, allow_blank: true
176
- end
177
- get '/allow_integer_blank'
178
-
179
- params do
180
- requires :val, type: Symbol, allow_blank: true
181
- end
182
- get '/allow_symbol_blank'
183
-
184
- params do
185
- requires :val, type: Grape::API::Boolean, allow_blank: true
186
- end
187
- get '/allow_boolean_blank'
188
-
189
- params do
190
- requires :val, type: Grape::API::Boolean, allow_blank: { value: false, message: 'has no value' }
191
- end
192
- get '/disallow_boolean_blank'
193
-
194
- params do
195
- optional :user, type: Hash do
196
- requires :name, allow_blank: { value: false, message: 'has no value' }
197
- end
198
- end
199
- get '/disallow_blank_required_param_in_an_optional_group'
200
-
201
- params do
202
- optional :user, type: Hash do
203
- requires :name, type: Date, allow_blank: true
204
- end
205
- end
206
- get '/allow_blank_date_param_in_an_optional_group'
207
-
208
- params do
209
- optional :user, type: Hash do
210
- optional :name, allow_blank: { value: false, message: 'has no value' }
211
- requires :age
212
- end
213
- end
214
- get '/disallow_blank_optional_param_in_an_optional_group'
215
-
216
- params do
217
- requires :user, type: Hash do
218
- requires :name, allow_blank: { value: false, message: 'has no value' }
219
- end
220
- end
221
- get '/disallow_blank_required_param_in_a_required_group'
222
-
223
- params do
224
- requires :user, type: Hash do
225
- requires :name, allow_blank: { value: false, message: 'has no value' }
226
- end
227
- end
228
- get '/disallow_string_value_in_a_required_hash_group'
229
-
230
- params do
231
- requires :user, type: Hash do
232
- optional :name, allow_blank: { value: false, message: 'has no value' }
233
- end
234
- end
235
- get '/disallow_blank_optional_param_in_a_required_group'
236
-
237
- params do
238
- optional :user, type: Hash do
239
- optional :name, allow_blank: { value: false, message: 'has no value' }
240
- end
241
- end
242
- get '/disallow_string_value_in_an_optional_hash_group'
243
- end
244
- end
245
- end
246
-
247
- context 'invalid input' do
248
- it 'refuses empty string' do
249
- get '/disallow_blank', name: ''
250
- expect(last_response.status).to eq(400)
251
-
252
- get '/disallow_datetime_blank', val: ''
253
- expect(last_response.status).to eq(400)
254
- end
255
-
256
- it 'refuses only whitespaces' do
257
- get '/disallow_blank', name: ' '
258
- expect(last_response.status).to eq(400)
259
-
260
- get '/disallow_blank', name: " \n "
261
- expect(last_response.status).to eq(400)
262
-
263
- get '/disallow_blank', name: "\n"
264
- expect(last_response.status).to eq(400)
265
- end
266
-
267
- it 'refuses nil' do
268
- get '/disallow_blank', name: nil
269
- expect(last_response.status).to eq(400)
270
- end
271
-
272
- it 'refuses missing' do
273
- get '/disallow_blank'
274
- expect(last_response.status).to eq(400)
275
- end
276
- end
277
-
278
- context 'custom validation message' do
279
- context 'with invalid input' do
280
- it 'refuses empty string' do
281
- get '/custom_message', name: ''
282
- expect(last_response.body).to eq('{"error":"name has no value"}')
283
- end
284
-
285
- it 'refuses empty string for an optional param' do
286
- get '/custom_message/disallow_blank_optional_param', name: ''
287
- expect(last_response.body).to eq('{"error":"name has no value"}')
288
- end
289
-
290
- it 'refuses only whitespaces' do
291
- get '/custom_message', name: ' '
292
- expect(last_response.body).to eq('{"error":"name has no value"}')
293
-
294
- get '/custom_message', name: " \n "
295
- expect(last_response.body).to eq('{"error":"name has no value"}')
296
-
297
- get '/custom_message', name: "\n"
298
- expect(last_response.body).to eq('{"error":"name has no value"}')
299
- end
300
-
301
- it 'refuses nil' do
302
- get '/custom_message', name: nil
303
- expect(last_response.body).to eq('{"error":"name has no value"}')
304
- end
305
- end
306
-
307
- context 'with valid input' do
308
- it 'accepts valid input' do
309
- get '/custom_message', name: 'bob'
310
- expect(last_response.status).to eq(200)
311
- end
312
-
313
- it 'accepts empty input when allow_blank is false' do
314
- get '/custom_message/allow_blank', name: ''
315
- expect(last_response.status).to eq(200)
316
- end
317
-
318
- it 'accepts empty input' do
319
- get '/custom_message/default_allow_datetime_blank', val: ''
320
- expect(last_response.status).to eq(200)
321
- end
322
-
323
- it 'accepts empty when datetime allow_blank' do
324
- get '/custom_message/allow_datetime_blank', val: ''
325
- expect(last_response.status).to eq(200)
326
- end
327
-
328
- it 'accepts empty when date allow_blank' do
329
- get '/custom_message/allow_date_blank', val: ''
330
- expect(last_response.status).to eq(200)
331
- end
332
-
333
- context 'allow_blank when Numeric' do
334
- it 'accepts empty when integer allow_blank' do
335
- get '/custom_message/allow_integer_blank', val: ''
336
- expect(last_response.status).to eq(200)
337
- end
338
-
339
- it 'accepts empty when float allow_blank' do
340
- get '/custom_message/allow_float_blank', val: ''
341
- expect(last_response.status).to eq(200)
342
- end
343
-
344
- it 'accepts empty when integer allow_blank' do
345
- get '/custom_message/allow_integer_blank', val: ''
346
- expect(last_response.status).to eq(200)
347
- end
348
- end
349
-
350
- it 'accepts empty when symbol allow_blank' do
351
- get '/custom_message/allow_symbol_blank', val: ''
352
- expect(last_response.status).to eq(200)
353
- end
354
-
355
- it 'accepts empty when boolean allow_blank' do
356
- get '/custom_message/allow_boolean_blank', val: ''
357
- expect(last_response.status).to eq(200)
358
- end
359
-
360
- it 'accepts false when boolean allow_blank' do
361
- get '/custom_message/disallow_boolean_blank', val: false
362
- expect(last_response.status).to eq(200)
363
- end
364
- end
365
-
366
- context 'in an optional group' do
367
- context 'as a required param' do
368
- it 'accepts a missing group, even with a disallwed blank param' do
369
- get '/custom_message/disallow_blank_required_param_in_an_optional_group'
370
- expect(last_response.status).to eq(200)
371
- end
372
-
373
- it 'accepts a nested missing date value' do
374
- get '/custom_message/allow_blank_date_param_in_an_optional_group', user: { name: '' }
375
- expect(last_response.status).to eq(200)
376
- end
377
-
378
- it 'refuses a blank value in an existing group' do
379
- get '/custom_message/disallow_blank_required_param_in_an_optional_group', user: { name: '' }
380
- expect(last_response.status).to eq(400)
381
- expect(last_response.body).to eq('{"error":"user[name] has no value"}')
382
- end
383
- end
384
-
385
- context 'as an optional param' do
386
- it 'accepts a missing group, even with a disallwed blank param' do
387
- get '/custom_message/disallow_blank_optional_param_in_an_optional_group'
388
- expect(last_response.status).to eq(200)
389
- end
390
-
391
- it 'accepts a nested missing optional value' do
392
- get '/custom_message/disallow_blank_optional_param_in_an_optional_group', user: { age: '29' }
393
- expect(last_response.status).to eq(200)
394
- end
395
-
396
- it 'refuses a blank existing value in an existing scope' do
397
- get '/custom_message/disallow_blank_optional_param_in_an_optional_group', user: { age: '29', name: '' }
398
- expect(last_response.status).to eq(400)
399
- expect(last_response.body).to eq('{"error":"user[name] has no value"}')
400
- end
401
- end
402
- end
403
-
404
- context 'in a required group' do
405
- context 'as a required param' do
406
- it 'refuses a blank value in a required existing group' do
407
- get '/custom_message/disallow_blank_required_param_in_a_required_group', user: { name: '' }
408
- expect(last_response.status).to eq(400)
409
- expect(last_response.body).to eq('{"error":"user[name] has no value"}')
410
- end
411
-
412
- it 'refuses a string value in a required hash group' do
413
- get '/custom_message/disallow_string_value_in_a_required_hash_group', user: ''
414
- expect(last_response.status).to eq(400)
415
- expect(last_response.body).to eq('{"error":"user is invalid, user[name] is missing"}')
416
- end
417
- end
418
-
419
- context 'as an optional param' do
420
- it 'accepts a nested missing value' do
421
- get '/custom_message/disallow_blank_optional_param_in_a_required_group', user: { age: '29' }
422
- expect(last_response.status).to eq(200)
423
- end
424
-
425
- it 'refuses a blank existing value in an existing scope' do
426
- get '/custom_message/disallow_blank_optional_param_in_a_required_group', user: { age: '29', name: '' }
427
- expect(last_response.status).to eq(400)
428
- expect(last_response.body).to eq('{"error":"user[name] has no value"}')
429
- end
430
-
431
- it 'refuses a string value in an optional hash group' do
432
- get '/custom_message/disallow_string_value_in_an_optional_hash_group', user: ''
433
- expect(last_response.status).to eq(400)
434
- expect(last_response.body).to eq('{"error":"user is invalid"}')
435
- end
436
- end
437
- end
438
- end
439
-
440
- context 'valid input' do
441
- it 'allows missing optional strings' do
442
- get 'opt_disallow_string_blank'
443
- expect(last_response.status).to eq(200)
444
- end
445
-
446
- it 'accepts valid input' do
447
- get '/disallow_blank', name: 'bob'
448
- expect(last_response.status).to eq(200)
449
- end
450
-
451
- it 'accepts empty input when allow_blank is false' do
452
- get '/allow_blank', name: ''
453
- expect(last_response.status).to eq(200)
454
- end
455
-
456
- it 'accepts empty input' do
457
- get '/default_allow_datetime_blank', val: ''
458
- expect(last_response.status).to eq(200)
459
- end
460
-
461
- it 'accepts empty when datetime allow_blank' do
462
- get '/allow_datetime_blank', val: ''
463
- expect(last_response.status).to eq(200)
464
- end
465
-
466
- it 'accepts empty when date allow_blank' do
467
- get '/allow_date_blank', val: ''
468
- expect(last_response.status).to eq(200)
469
- end
470
-
471
- context 'allow_blank when Numeric' do
472
- it 'accepts empty when integer allow_blank' do
473
- get '/allow_integer_blank', val: ''
474
- expect(last_response.status).to eq(200)
475
- end
476
-
477
- it 'accepts empty when float allow_blank' do
478
- get '/allow_float_blank', val: ''
479
- expect(last_response.status).to eq(200)
480
- end
481
-
482
- it 'accepts empty when integer allow_blank' do
483
- get '/allow_integer_blank', val: ''
484
- expect(last_response.status).to eq(200)
485
- end
486
- end
487
-
488
- it 'accepts empty when symbol allow_blank' do
489
- get '/allow_symbol_blank', val: ''
490
- expect(last_response.status).to eq(200)
491
- end
492
-
493
- it 'accepts empty when boolean allow_blank' do
494
- get '/allow_boolean_blank', val: ''
495
- expect(last_response.status).to eq(200)
496
- end
497
-
498
- it 'accepts false when boolean allow_blank' do
499
- get '/disallow_boolean_blank', val: false
500
- expect(last_response.status).to eq(200)
501
- end
502
-
503
- it 'accepts value when time allow_blank' do
504
- get '/disallow_datetime_blank', val: Time.now
505
- expect(last_response.status).to eq(200)
506
- end
507
- end
508
-
509
- context 'in an optional group' do
510
- context 'as a required param' do
511
- it 'accepts a missing group, even with a disallwed blank param' do
512
- get '/disallow_blank_required_param_in_an_optional_group'
513
- expect(last_response.status).to eq(200)
514
- end
515
-
516
- it 'accepts a nested missing date value' do
517
- get '/allow_blank_date_param_in_an_optional_group', user: { name: '' }
518
- expect(last_response.status).to eq(200)
519
- end
520
-
521
- it 'refuses a blank value in an existing group' do
522
- get '/disallow_blank_required_param_in_an_optional_group', user: { name: '' }
523
- expect(last_response.status).to eq(400)
524
- end
525
- end
526
-
527
- context 'as an optional param' do
528
- it 'accepts a missing group, even with a disallwed blank param' do
529
- get '/disallow_blank_optional_param_in_an_optional_group'
530
- expect(last_response.status).to eq(200)
531
- end
532
-
533
- it 'accepts a nested missing optional value' do
534
- get '/disallow_blank_optional_param_in_an_optional_group', user: { age: '29' }
535
- expect(last_response.status).to eq(200)
536
- end
537
-
538
- it 'refuses a blank existing value in an existing scope' do
539
- get '/disallow_blank_optional_param_in_an_optional_group', user: { age: '29', name: '' }
540
- expect(last_response.status).to eq(400)
541
- end
542
- end
543
- end
544
-
545
- context 'in a required group' do
546
- context 'as a required param' do
547
- it 'refuses a blank value in a required existing group' do
548
- get '/disallow_blank_required_param_in_a_required_group', user: { name: '' }
549
- expect(last_response.status).to eq(400)
550
- end
551
-
552
- it 'refuses a string value in a required hash group' do
553
- get '/disallow_string_value_in_a_required_hash_group', user: ''
554
- expect(last_response.status).to eq(400)
555
- end
556
- end
557
-
558
- context 'as an optional param' do
559
- it 'accepts a nested missing value' do
560
- get '/disallow_blank_optional_param_in_a_required_group', user: { age: '29' }
561
- expect(last_response.status).to eq(200)
562
- end
563
-
564
- it 'refuses a blank existing value in an existing scope' do
565
- get '/disallow_blank_optional_param_in_a_required_group', user: { age: '29', name: '' }
566
- expect(last_response.status).to eq(400)
567
- end
568
-
569
- it 'refuses a string value in an optional hash group' do
570
- get '/disallow_string_value_in_an_optional_hash_group', user: ''
571
- expect(last_response.status).to eq(400)
572
- end
573
- end
574
- end
575
- end