dry-validation 0.13.3 → 1.7.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 (207) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +506 -95
  3. data/LICENSE +1 -1
  4. data/README.md +16 -12
  5. data/config/errors.yml +3 -88
  6. data/dry-validation.gemspec +37 -24
  7. data/lib/dry/validation/config.rb +24 -0
  8. data/lib/dry/validation/constants.rb +43 -0
  9. data/lib/dry/validation/contract/class_interface.rb +230 -0
  10. data/lib/dry/validation/contract.rb +171 -0
  11. data/lib/dry/validation/evaluator.rb +224 -0
  12. data/lib/dry/validation/extensions/hints.rb +67 -0
  13. data/lib/dry/validation/extensions/monads.rb +24 -8
  14. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  15. data/lib/dry/validation/failures.rb +70 -0
  16. data/lib/dry/validation/function.rb +44 -0
  17. data/lib/dry/validation/macro.rb +38 -0
  18. data/lib/dry/validation/macros.rb +104 -0
  19. data/lib/dry/validation/message.rb +80 -80
  20. data/lib/dry/validation/message_set.rb +80 -105
  21. data/lib/dry/validation/messages/resolver.rb +131 -0
  22. data/lib/dry/validation/result.rb +183 -41
  23. data/lib/dry/validation/rule.rb +135 -0
  24. data/lib/dry/validation/schema_ext.rb +19 -0
  25. data/lib/dry/validation/values.rb +104 -0
  26. data/lib/dry/validation/version.rb +3 -1
  27. data/lib/dry/validation.rb +45 -28
  28. data/lib/dry-validation.rb +3 -1
  29. metadata +46 -344
  30. data/.codeclimate.yml +0 -17
  31. data/.gitignore +0 -9
  32. data/.rspec +0 -3
  33. data/.travis.yml +0 -29
  34. data/CONTRIBUTING.md +0 -31
  35. data/Gemfile +0 -25
  36. data/Rakefile +0 -22
  37. data/benchmarks/benchmark_form_invalid.rb +0 -64
  38. data/benchmarks/benchmark_form_valid.rb +0 -64
  39. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  40. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  41. data/benchmarks/profile_schema_call_valid.rb +0 -20
  42. data/benchmarks/profile_schema_definition.rb +0 -14
  43. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  44. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  45. data/benchmarks/suite.rb +0 -5
  46. data/examples/basic.rb +0 -15
  47. data/examples/each.rb +0 -14
  48. data/examples/json.rb +0 -12
  49. data/examples/multiple.rb +0 -27
  50. data/examples/nested.rb +0 -22
  51. data/examples/params.rb +0 -11
  52. data/lib/dry/validation/compat/form.rb +0 -67
  53. data/lib/dry/validation/deprecations.rb +0 -24
  54. data/lib/dry/validation/executor.rb +0 -91
  55. data/lib/dry/validation/extensions/struct.rb +0 -32
  56. data/lib/dry/validation/extensions.rb +0 -7
  57. data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
  58. data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
  59. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
  60. data/lib/dry/validation/input_processor_compiler.rb +0 -137
  61. data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
  62. data/lib/dry/validation/message_compiler.rb +0 -188
  63. data/lib/dry/validation/messages/abstract.rb +0 -119
  64. data/lib/dry/validation/messages/i18n.rb +0 -47
  65. data/lib/dry/validation/messages/namespaced.rb +0 -39
  66. data/lib/dry/validation/messages/yaml.rb +0 -61
  67. data/lib/dry/validation/messages.rb +0 -14
  68. data/lib/dry/validation/predicate_registry.rb +0 -115
  69. data/lib/dry/validation/predicates.rb +0 -19
  70. data/lib/dry/validation/schema/check.rb +0 -37
  71. data/lib/dry/validation/schema/class_interface.rb +0 -190
  72. data/lib/dry/validation/schema/deprecated.rb +0 -30
  73. data/lib/dry/validation/schema/dsl.rb +0 -118
  74. data/lib/dry/validation/schema/form.rb +0 -9
  75. data/lib/dry/validation/schema/json.rb +0 -21
  76. data/lib/dry/validation/schema/key.rb +0 -71
  77. data/lib/dry/validation/schema/params.rb +0 -22
  78. data/lib/dry/validation/schema/rule.rb +0 -202
  79. data/lib/dry/validation/schema/value.rb +0 -211
  80. data/lib/dry/validation/schema.rb +0 -126
  81. data/lib/dry/validation/schema_compiler.rb +0 -81
  82. data/lib/dry/validation/template.rb +0 -66
  83. data/lib/dry/validation/type_specs.rb +0 -70
  84. data/log/.gitkeep +0 -0
  85. data/spec/extensions/monads/result_spec.rb +0 -40
  86. data/spec/extensions/struct/schema_spec.rb +0 -32
  87. data/spec/fixtures/locales/en.yml +0 -8
  88. data/spec/fixtures/locales/pl.yml +0 -22
  89. data/spec/integration/custom_error_messages_spec.rb +0 -54
  90. data/spec/integration/custom_predicates_spec.rb +0 -228
  91. data/spec/integration/hints_spec.rb +0 -170
  92. data/spec/integration/injecting_rules_spec.rb +0 -30
  93. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  94. data/spec/integration/localized_error_messages_spec.rb +0 -72
  95. data/spec/integration/message_compiler_spec.rb +0 -405
  96. data/spec/integration/messages/i18n_spec.rb +0 -104
  97. data/spec/integration/optional_keys_spec.rb +0 -28
  98. data/spec/integration/params/predicates/array_spec.rb +0 -287
  99. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  100. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  101. data/spec/integration/params/predicates/even_spec.rb +0 -455
  102. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  103. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  104. data/spec/integration/params/predicates/false_spec.rb +0 -455
  105. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  106. data/spec/integration/params/predicates/format_spec.rb +0 -454
  107. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  108. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  109. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  110. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  111. data/spec/integration/params/predicates/key_spec.rb +0 -67
  112. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  113. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  114. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  115. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  116. data/spec/integration/params/predicates/none_spec.rb +0 -265
  117. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  118. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  119. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  120. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  121. data/spec/integration/params/predicates/true_spec.rb +0 -455
  122. data/spec/integration/params/predicates/type_spec.rb +0 -391
  123. data/spec/integration/result_spec.rb +0 -81
  124. data/spec/integration/schema/array_schema_spec.rb +0 -59
  125. data/spec/integration/schema/check_rules_spec.rb +0 -119
  126. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  127. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  128. data/spec/integration/schema/default_settings_spec.rb +0 -11
  129. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  130. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  131. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  132. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  133. data/spec/integration/schema/form_spec.rb +0 -236
  134. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  135. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  136. data/spec/integration/schema/input_processor_spec.rb +0 -46
  137. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  138. data/spec/integration/schema/json_spec.rb +0 -163
  139. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  140. data/spec/integration/schema/macros/each_spec.rb +0 -268
  141. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  142. data/spec/integration/schema/macros/input_spec.rb +0 -139
  143. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  144. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  145. data/spec/integration/schema/macros/value_spec.rb +0 -119
  146. data/spec/integration/schema/macros/when_spec.rb +0 -62
  147. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  148. data/spec/integration/schema/nested_values_spec.rb +0 -46
  149. data/spec/integration/schema/not_spec.rb +0 -34
  150. data/spec/integration/schema/numbers_spec.rb +0 -19
  151. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  152. data/spec/integration/schema/or_spec.rb +0 -87
  153. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  154. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  155. data/spec/integration/schema/params_spec.rb +0 -234
  156. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  157. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  158. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  159. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  160. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  161. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  162. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  163. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  164. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  165. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  166. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  167. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  168. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  169. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  170. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  171. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  172. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  173. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  174. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  175. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  176. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  178. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  179. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  180. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  181. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  182. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  183. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  184. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  185. data/spec/integration/schema/using_types_spec.rb +0 -135
  186. data/spec/integration/schema/validate_spec.rb +0 -120
  187. data/spec/integration/schema/xor_spec.rb +0 -35
  188. data/spec/integration/schema_builders_spec.rb +0 -17
  189. data/spec/integration/schema_spec.rb +0 -173
  190. data/spec/shared/message_compiler.rb +0 -11
  191. data/spec/shared/predicate_helper.rb +0 -15
  192. data/spec/shared/rule_compiler.rb +0 -8
  193. data/spec/spec_helper.rb +0 -62
  194. data/spec/support/define_struct.rb +0 -25
  195. data/spec/support/matchers.rb +0 -38
  196. data/spec/support/mutant.rb +0 -9
  197. data/spec/support/predicates_integration.rb +0 -7
  198. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  199. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  200. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  201. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  202. data/spec/unit/message_compiler_spec.rb +0 -7
  203. data/spec/unit/predicate_registry_spec.rb +0 -34
  204. data/spec/unit/schema/key_spec.rb +0 -38
  205. data/spec/unit/schema/rule_spec.rb +0 -42
  206. data/spec/unit/schema/value_spec.rb +0 -131
  207. data/spec/unit/schema_spec.rb +0 -35
@@ -1,396 +0,0 @@
1
- RSpec.describe 'Predicates: Size' do
2
- context 'Range' do
3
- context 'with required' do
4
- subject(:schema) do
5
- Dry::Validation.Params do
6
- required(:foo) { size?(2..3) }
7
- end
8
- end
9
-
10
- context 'with valid input' do
11
- let(:input) { { 'foo' => %w(1 2 3) } }
12
-
13
- it 'is successful' do
14
- expect(result).to be_successful
15
- end
16
- end
17
-
18
- context 'with missing input' do
19
- let(:input) { {} }
20
-
21
- it 'is not successful' do
22
- expect(result).to be_failing ['is missing', 'size must be within 2 - 3']
23
- end
24
- end
25
-
26
- context 'with nil input' do
27
- let(:input) { { 'foo' => nil } }
28
-
29
- it 'raises error' do
30
- expect { result }.to raise_error(NoMethodError)
31
- end
32
- end
33
-
34
- context 'with blank input' do
35
- let(:input) { { 'foo' => '' } }
36
-
37
- #see: https://github.com/dry-rb/dry-validation/issues/121
38
- it 'is not successful' do
39
- expect(result).to be_failing ['length must be within 2 - 3']
40
- end
41
- end
42
-
43
- context 'with invalid input' do
44
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
45
-
46
- it 'is not successful' do
47
- expect(result).to be_failing ['size must be within 2 - 3']
48
- end
49
- end
50
- end
51
-
52
- context 'with optional' do
53
- subject(:schema) do
54
- Dry::Validation.Params do
55
- optional(:foo) { size?(2..3) }
56
- end
57
- end
58
-
59
- context 'with valid input' do
60
- let(:input) { { 'foo' => %w(1 2 3) } }
61
-
62
- it 'is successful' do
63
- expect(result).to be_successful
64
- end
65
- end
66
-
67
- context 'with missing input' do
68
- let(:input) { {} }
69
-
70
- it 'is successful' do
71
- expect(result).to be_successful
72
- end
73
- end
74
-
75
- context 'with nil input' do
76
- let(:input) { { 'foo' => nil } }
77
-
78
- it 'raises error' do
79
- expect { result }.to raise_error(NoMethodError)
80
- end
81
- end
82
-
83
- context 'with blank input' do
84
- let(:input) { { 'foo' => '' } }
85
-
86
- #see: https://github.com/dry-rb/dry-validation/issues/121
87
- it 'is not successful' do
88
- expect(result).to be_failing ['length must be within 2 - 3']
89
- end
90
- end
91
-
92
- context 'with invalid input' do
93
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
94
-
95
- it 'is not successful' do
96
- expect(result).to be_failing ['size must be within 2 - 3']
97
- end
98
- end
99
- end
100
-
101
- context 'as macro' do
102
- context 'with required' do
103
- context 'with value' do
104
- subject(:schema) do
105
- Dry::Validation.Params do
106
- required(:foo).value(size?: 2..3)
107
- end
108
- end
109
-
110
- context 'with valid input' do
111
- let(:input) { { 'foo' => %w(1 2 3) } }
112
-
113
- it 'is successful' do
114
- expect(result).to be_successful
115
- end
116
- end
117
-
118
- context 'with missing input' do
119
- let(:input) { {} }
120
-
121
- it 'is not successful' do
122
- expect(result).to be_failing ['is missing', 'size must be within 2 - 3']
123
- end
124
- end
125
-
126
- context 'with nil input' do
127
- let(:input) { { 'foo' => nil } }
128
-
129
- it 'raises error' do
130
- expect { result }.to raise_error(NoMethodError)
131
- end
132
- end
133
-
134
- context 'with blank input' do
135
- let(:input) { { 'foo' => '' } }
136
-
137
- it 'is not successful' do
138
- expect(result).to be_failing ['length must be within 2 - 3']
139
- end
140
- end
141
-
142
- context 'with invalid input' do
143
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
144
-
145
- it 'is not successful' do
146
- expect(result).to be_failing ['size must be within 2 - 3']
147
- end
148
- end
149
- end
150
-
151
- context 'with filled' do
152
- subject(:schema) do
153
- Dry::Validation.Params do
154
- required(:foo).filled(size?: 2..3)
155
- end
156
- end
157
-
158
- context 'with valid input' do
159
- let(:input) { { 'foo' => %w(1 2 3) } }
160
-
161
- it 'is successful' do
162
- expect(result).to be_successful
163
- end
164
- end
165
-
166
- context 'with missing input' do
167
- let(:input) { {} }
168
-
169
- it 'is not successful' do
170
- expect(result).to be_failing ['is missing', 'size must be within 2 - 3']
171
- end
172
- end
173
-
174
- context 'with nil input' do
175
- let(:input) { { 'foo' => nil } }
176
-
177
- it 'is not successful' do
178
- expect(result).to be_failing ['must be filled', 'size must be within 2 - 3']
179
- end
180
- end
181
-
182
- context 'with blank input' do
183
- let(:input) { { 'foo' => '' } }
184
-
185
- it 'is not successful' do
186
- expect(result).to be_failing ['must be filled', 'length must be within 2 - 3']
187
- end
188
- end
189
-
190
- context 'with invalid input' do
191
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
192
-
193
- it 'is not successful' do
194
- expect(result).to be_failing ['size must be within 2 - 3']
195
- end
196
- end
197
- end
198
-
199
- context 'with maybe' do
200
- subject(:schema) do
201
- Dry::Validation.Params do
202
- required(:foo).maybe(size?: 2..3)
203
- end
204
- end
205
-
206
- context 'with valid input' do
207
- let(:input) { { 'foo' => %w(1 2 3) } }
208
-
209
- it 'is successful' do
210
- expect(result).to be_successful
211
- end
212
- end
213
-
214
- context 'with missing input' do
215
- let(:input) { {} }
216
-
217
- it 'is not successful' do
218
- expect(result).to be_failing ['is missing', 'size must be within 2 - 3']
219
- end
220
- end
221
-
222
- context 'with nil input' do
223
- let(:input) { { 'foo' => nil } }
224
-
225
- it 'is successful' do
226
- expect(result).to be_successful
227
- end
228
- end
229
-
230
- context 'with blank input' do
231
- let(:input) { { 'foo' => '' } }
232
-
233
- it 'is successful' do
234
- expect(result).to be_successful
235
- end
236
- end
237
-
238
- context 'with invalid input' do
239
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
240
-
241
- it 'is not successful' do
242
- expect(result).to be_failing ['size must be within 2 - 3']
243
- end
244
- end
245
- end
246
- end
247
-
248
- context 'with optional' do
249
- context 'with value' do
250
- subject(:schema) do
251
- Dry::Validation.Params do
252
- optional(:foo).value(size?: 2..3)
253
- end
254
- end
255
-
256
- context 'with valid input' do
257
- let(:input) { { 'foo' => %w(1 2 3) } }
258
-
259
- it 'is successful' do
260
- expect(result).to be_successful
261
- end
262
- end
263
-
264
- context 'with missing input' do
265
- let(:input) { {} }
266
-
267
- it 'is successful' do
268
- expect(result).to be_successful
269
- end
270
- end
271
-
272
- context 'with nil input' do
273
- let(:input) { { 'foo' => nil } }
274
-
275
- it 'raises error' do
276
- expect { result }.to raise_error(NoMethodError)
277
- end
278
- end
279
-
280
- context 'with blank input' do
281
- let(:input) { { 'foo' => '' } }
282
-
283
- #see: https://github.com/dry-rb/dry-validation/issues/121
284
- it 'is not successful' do
285
- expect(result).to be_failing ['length must be within 2 - 3']
286
- end
287
- end
288
-
289
- context 'with invalid input' do
290
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
291
-
292
- it 'is not successful' do
293
- expect(result).to be_failing ['size must be within 2 - 3']
294
- end
295
- end
296
- end
297
-
298
- context 'with filled' do
299
- subject(:schema) do
300
- Dry::Validation.Params do
301
- optional(:foo).filled(size?: 2..3)
302
- end
303
- end
304
-
305
- context 'with valid input' do
306
- let(:input) { { 'foo' => %w(1 2 3) } }
307
-
308
- it 'is successful' do
309
- expect(result).to be_successful
310
- end
311
- end
312
-
313
- context 'with missing input' do
314
- let(:input) { {} }
315
-
316
- it 'is successful' do
317
- expect(result).to be_successful
318
- end
319
- end
320
-
321
- context 'with nil input' do
322
- let(:input) { { 'foo' => nil } }
323
-
324
- it 'is not successful' do
325
- expect(result).to be_failing ['must be filled', 'size must be within 2 - 3']
326
- end
327
- end
328
-
329
- context 'with blank input' do
330
- let(:input) { { 'foo' => '' } }
331
-
332
- it 'is not successful' do
333
- expect(result).to be_failing ['must be filled', 'length must be within 2 - 3']
334
- end
335
- end
336
-
337
- context 'with invalid input' do
338
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
339
-
340
- it 'is not successful' do
341
- expect(result).to be_failing ['size must be within 2 - 3']
342
- end
343
- end
344
- end
345
-
346
- context 'with maybe' do
347
- subject(:schema) do
348
- Dry::Validation.Params do
349
- optional(:foo).maybe(size?: 2..3)
350
- end
351
- end
352
-
353
- context 'with valid input' do
354
- let(:input) { { 'foo' => %w(1 2 3) } }
355
-
356
- it 'is successful' do
357
- expect(result).to be_successful
358
- end
359
- end
360
-
361
- context 'with missing input' do
362
- let(:input) { {} }
363
-
364
- it 'is successful' do
365
- expect(result).to be_successful
366
- end
367
- end
368
-
369
- context 'with nil input' do
370
- let(:input) { { 'foo' => nil } }
371
-
372
- it 'is successful' do
373
- expect(result).to be_successful
374
- end
375
- end
376
-
377
- context 'with blank input' do
378
- let(:input) { { 'foo' => '' } }
379
-
380
- it 'is successful' do
381
- expect(result).to be_successful
382
- end
383
- end
384
-
385
- context 'with invalid input' do
386
- let(:input) { { 'foo' => { 'a' => '1', 'b' => '2', 'c' => '3', 'd' => '4' } } }
387
-
388
- it 'is not successful' do
389
- expect(result).to be_failing ['size must be within 2 - 3']
390
- end
391
- end
392
- end
393
- end
394
- end
395
- end
396
- end