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,315 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::Validations::Validators::PresenceValidator do
4
- subject do
5
- Class.new(Grape::API) do
6
- format :json
7
- end
8
- end
9
-
10
- def app
11
- subject
12
- end
13
-
14
- context 'without validation' do
15
- before do
16
- subject.resource :bacons do
17
- get do
18
- 'All the bacon'
19
- end
20
- end
21
- end
22
-
23
- it 'does not validate for any params' do
24
- get '/bacons'
25
- expect(last_response.status).to eq(200)
26
- expect(last_response.body).to eq('All the bacon'.to_json)
27
- end
28
- end
29
-
30
- context 'with a custom validation message' do
31
- before do
32
- subject.resource :requires do
33
- params do
34
- requires :email, type: String, allow_blank: { value: false, message: 'has no value' }, regexp: { value: /^\S+$/, message: 'format is invalid' }, message: 'is required'
35
- end
36
- get do
37
- 'Hello'
38
- end
39
- end
40
- end
41
-
42
- it 'requires when missing' do
43
- get '/requires'
44
- expect(last_response.status).to eq(400)
45
- expect(last_response.body).to eq('{"error":"email is required, email has no value"}')
46
- end
47
-
48
- it 'requires when empty' do
49
- get '/requires', email: ''
50
- expect(last_response.body).to eq('{"error":"email has no value, email format is invalid"}')
51
- end
52
-
53
- it 'valid when set' do
54
- get '/requires', email: 'bob@example.com'
55
- expect(last_response.status).to eq(200)
56
- expect(last_response.body).to eq('Hello'.to_json)
57
- end
58
- end
59
-
60
- context 'with a required regexp parameter supplied in the POST body' do
61
- before do
62
- subject.format :json
63
- subject.params do
64
- requires :id, regexp: /^[0-9]+$/
65
- end
66
- subject.post do
67
- { ret: params[:id] }
68
- end
69
- end
70
-
71
- it 'validates id' do
72
- post '/'
73
- expect(last_response.status).to eq(400)
74
- expect(last_response.body).to eq('{"error":"id is missing"}')
75
-
76
- io = StringIO.new('{"id" : "a56b"}')
77
- post '/', {}, 'rack.input' => io, 'CONTENT_TYPE' => 'application/json', 'CONTENT_LENGTH' => io.length
78
- expect(last_response.body).to eq('{"error":"id is invalid"}')
79
- expect(last_response.status).to eq(400)
80
-
81
- io = StringIO.new('{"id" : 56}')
82
- post '/', {}, 'rack.input' => io, 'CONTENT_TYPE' => 'application/json', 'CONTENT_LENGTH' => io.length
83
- expect(last_response.body).to eq('{"ret":56}')
84
- expect(last_response.status).to eq(201)
85
- end
86
- end
87
-
88
- context 'with a required non-empty string' do
89
- before do
90
- subject.params do
91
- requires :email, type: String, allow_blank: false, regexp: /^\S+$/
92
- end
93
- subject.get do
94
- 'Hello'
95
- end
96
- end
97
-
98
- it 'requires when missing' do
99
- get '/'
100
- expect(last_response.status).to eq(400)
101
- expect(last_response.body).to eq('{"error":"email is missing, email is empty"}')
102
- end
103
-
104
- it 'requires when empty' do
105
- get '/', email: ''
106
- expect(last_response.status).to eq(400)
107
- expect(last_response.body).to eq('{"error":"email is empty, email is invalid"}')
108
- end
109
-
110
- it 'valid when set' do
111
- get '/', email: 'bob@example.com'
112
- expect(last_response.status).to eq(200)
113
- expect(last_response.body).to eq('Hello'.to_json)
114
- end
115
- end
116
-
117
- context 'with multiple parameters per requires' do
118
- before do
119
- subject.params do
120
- requires :one, :two
121
- end
122
- subject.get '/single-requires' do
123
- 'Hello'
124
- end
125
-
126
- subject.params do
127
- requires :one
128
- requires :two
129
- end
130
- subject.get '/multiple-requires' do
131
- 'Hello'
132
- end
133
- end
134
-
135
- it 'validates for all defined params' do
136
- get '/single-requires'
137
- expect(last_response.status).to eq(400)
138
- single_requires_error = last_response.body
139
-
140
- get '/multiple-requires'
141
- expect(last_response.status).to eq(400)
142
- expect(last_response.body).to eq(single_requires_error)
143
- end
144
- end
145
-
146
- context 'with required parameters and no type' do
147
- before do
148
- subject.params do
149
- requires :name, :company
150
- end
151
- subject.get do
152
- 'Hello'
153
- end
154
- end
155
-
156
- it 'validates name, company' do
157
- get '/'
158
- expect(last_response.status).to eq(400)
159
- expect(last_response.body).to eq('{"error":"name is missing, company is missing"}')
160
-
161
- get '/', name: 'Bob'
162
- expect(last_response.status).to eq(400)
163
- expect(last_response.body).to eq('{"error":"company is missing"}')
164
-
165
- get '/', name: 'Bob', company: 'TestCorp'
166
- expect(last_response.status).to eq(200)
167
- expect(last_response.body).to eq('Hello'.to_json)
168
- end
169
- end
170
-
171
- context 'with nested parameters' do
172
- before do
173
- subject.params do
174
- requires :user, type: Hash do
175
- requires :first_name
176
- requires :last_name
177
- end
178
- end
179
- subject.get '/nested' do
180
- 'Nested'
181
- end
182
- end
183
-
184
- it 'validates nested parameters' do
185
- get '/nested'
186
- expect(last_response.status).to eq(400)
187
- expect(last_response.body).to eq('{"error":"user is missing, user[first_name] is missing, user[last_name] is missing"}')
188
-
189
- get '/nested', user: { first_name: 'Billy' }
190
- expect(last_response.status).to eq(400)
191
- expect(last_response.body).to eq('{"error":"user[last_name] is missing"}')
192
-
193
- get '/nested', user: { first_name: 'Billy', last_name: 'Bob' }
194
- expect(last_response.status).to eq(200)
195
- expect(last_response.body).to eq('Nested'.to_json)
196
- end
197
- end
198
-
199
- context 'with triply nested required parameters' do
200
- before do
201
- subject.params do
202
- requires :admin, type: Hash do
203
- requires :admin_name
204
- requires :super, type: Hash do
205
- requires :user, type: Hash do
206
- requires :first_name
207
- requires :last_name
208
- end
209
- end
210
- end
211
- end
212
- subject.get '/nested_triple' do
213
- 'Nested triple'
214
- end
215
- end
216
-
217
- it 'validates triple nested parameters' do
218
- get '/nested_triple'
219
- expect(last_response.status).to eq(400)
220
- expect(last_response.body).to include '{"error":"admin is missing'
221
-
222
- get '/nested_triple', user: { first_name: 'Billy' }
223
- expect(last_response.status).to eq(400)
224
- expect(last_response.body).to include '{"error":"admin is missing'
225
-
226
- get '/nested_triple', admin: { super: { first_name: 'Billy' } }
227
- expect(last_response.status).to eq(400)
228
- expect(last_response.body).to eq('{"error":"admin[admin_name] is missing, admin[super][user] is missing, admin[super][user][first_name] is missing, admin[super][user][last_name] is missing"}')
229
-
230
- get '/nested_triple', super: { user: { first_name: 'Billy', last_name: 'Bob' } }
231
- expect(last_response.status).to eq(400)
232
- expect(last_response.body).to include '{"error":"admin is missing'
233
-
234
- get '/nested_triple', admin: { super: { user: { first_name: 'Billy' } } }
235
- expect(last_response.status).to eq(400)
236
- expect(last_response.body).to eq('{"error":"admin[admin_name] is missing, admin[super][user][last_name] is missing"}')
237
-
238
- get '/nested_triple', admin: { admin_name: 'admin', super: { user: { first_name: 'Billy' } } }
239
- expect(last_response.status).to eq(400)
240
- expect(last_response.body).to eq('{"error":"admin[super][user][last_name] is missing"}')
241
-
242
- get '/nested_triple', admin: { admin_name: 'admin', super: { user: { first_name: 'Billy', last_name: 'Bob' } } }
243
- expect(last_response.status).to eq(200)
244
- expect(last_response.body).to eq('Nested triple'.to_json)
245
- end
246
- end
247
-
248
- context 'with reused parameter documentation once required and once optional' do
249
- before do
250
- docs = { name: { type: String, desc: 'some name' } }
251
-
252
- subject.params do
253
- requires :all, using: docs
254
- end
255
- subject.get '/required' do
256
- 'Hello required'
257
- end
258
-
259
- subject.params do
260
- optional :all, using: docs
261
- end
262
- subject.get '/optional' do
263
- 'Hello optional'
264
- end
265
- end
266
-
267
- it 'works with required' do
268
- get '/required'
269
- expect(last_response.status).to eq(400)
270
- expect(last_response.body).to eq('{"error":"name is missing"}')
271
-
272
- get '/required', name: 'Bob'
273
- expect(last_response.status).to eq(200)
274
- expect(last_response.body).to eq('Hello required'.to_json)
275
- end
276
-
277
- it 'works with optional' do
278
- get '/optional'
279
- expect(last_response.status).to eq(200)
280
- expect(last_response.body).to eq('Hello optional'.to_json)
281
-
282
- get '/optional', name: 'Bob'
283
- expect(last_response.status).to eq(200)
284
- expect(last_response.body).to eq('Hello optional'.to_json)
285
- end
286
- end
287
-
288
- context 'with a custom type' do
289
- it 'does not validate their type when it is missing' do
290
- class CustomType
291
- def self.parse(value)
292
- return if value.blank?
293
-
294
- new
295
- end
296
- end
297
-
298
- subject.params do
299
- requires :custom, type: CustomType
300
- end
301
- subject.get '/custom' do
302
- 'custom'
303
- end
304
-
305
- get 'custom'
306
-
307
- expect(last_response.status).to eq(400)
308
- expect(last_response.body).to eq('{"error":"custom is missing"}')
309
-
310
- get 'custom', custom: 'filled'
311
-
312
- expect(last_response.status).to eq(200)
313
- end
314
- end
315
- end
@@ -1,161 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::Validations::Validators::RegexpValidator do
4
- let_it_be(:app) do
5
- Class.new(Grape::API) do
6
- default_format :json
7
-
8
- resources :custom_message do
9
- params do
10
- requires :name, regexp: { value: /^[a-z]+$/, message: 'format is invalid' }
11
- end
12
- get do
13
- end
14
-
15
- params do
16
- requires :names, type: { value: Array[String], message: 'can\'t be nil' }, regexp: { value: /^[a-z]+$/, message: 'format is invalid' }
17
- end
18
- get 'regexp_with_array' do
19
- end
20
- end
21
-
22
- params do
23
- requires :name, regexp: /^[a-z]+$/
24
- end
25
- get do
26
- end
27
-
28
- params do
29
- requires :names, type: Array[String], regexp: /^[a-z]+$/
30
- end
31
- get 'regexp_with_array' do
32
- end
33
-
34
- params do
35
- requires :people, type: Hash do
36
- requires :names, type: Array[String], regexp: /^[a-z]+$/
37
- end
38
- end
39
- get 'nested_regexp_with_array' do
40
- end
41
- end
42
- end
43
-
44
- context 'custom validation message' do
45
- context 'with invalid input' do
46
- it 'refuses inapppopriate' do
47
- get '/custom_message', name: 'invalid name'
48
- expect(last_response.status).to eq(400)
49
- expect(last_response.body).to eq('{"error":"name format is invalid"}')
50
- end
51
-
52
- it 'refuses empty' do
53
- get '/custom_message', name: ''
54
- expect(last_response.status).to eq(400)
55
- expect(last_response.body).to eq('{"error":"name format is invalid"}')
56
- end
57
- end
58
-
59
- it 'accepts nil' do
60
- get '/custom_message', name: nil
61
- expect(last_response.status).to eq(200)
62
- end
63
-
64
- it 'accepts valid input' do
65
- get '/custom_message', name: 'bob'
66
- expect(last_response.status).to eq(200)
67
- end
68
-
69
- context 'regexp with array' do
70
- it 'refuses inapppopriate items' do
71
- get '/custom_message/regexp_with_array', names: ['invalid name', 'abc']
72
- expect(last_response.status).to eq(400)
73
- expect(last_response.body).to eq('{"error":"names format is invalid"}')
74
- end
75
-
76
- it 'refuses empty items' do
77
- get '/custom_message/regexp_with_array', names: ['', 'abc']
78
- expect(last_response.status).to eq(400)
79
- expect(last_response.body).to eq('{"error":"names format is invalid"}')
80
- end
81
-
82
- it 'refuses nil items' do
83
- get '/custom_message/regexp_with_array', names: [nil, 'abc']
84
- expect(last_response.status).to eq(400)
85
- expect(last_response.body).to eq('{"error":"names can\'t be nil"}')
86
- end
87
-
88
- it 'accepts valid items' do
89
- get '/custom_message/regexp_with_array', names: ['bob']
90
- expect(last_response.status).to eq(200)
91
- end
92
-
93
- it 'accepts nil instead of array' do
94
- get '/custom_message/regexp_with_array', names: nil
95
- expect(last_response.status).to eq(200)
96
- end
97
- end
98
- end
99
-
100
- context 'invalid input' do
101
- it 'refuses inapppopriate' do
102
- get '/', name: 'invalid name'
103
- expect(last_response.status).to eq(400)
104
- expect(last_response.body).to eq('{"error":"name is invalid"}')
105
- end
106
-
107
- it 'refuses empty' do
108
- get '/', name: ''
109
- expect(last_response.status).to eq(400)
110
- expect(last_response.body).to eq('{"error":"name is invalid"}')
111
- end
112
- end
113
-
114
- it 'accepts nil' do
115
- get '/', name: nil
116
- expect(last_response.status).to eq(200)
117
- end
118
-
119
- it 'accepts valid input' do
120
- get '/', name: 'bob'
121
- expect(last_response.status).to eq(200)
122
- end
123
-
124
- context 'regexp with array' do
125
- it 'refuses inapppopriate items' do
126
- get '/regexp_with_array', names: ['invalid name', 'abc']
127
- expect(last_response.status).to eq(400)
128
- expect(last_response.body).to eq('{"error":"names is invalid"}')
129
- end
130
-
131
- it 'refuses empty items' do
132
- get '/regexp_with_array', names: ['', 'abc']
133
- expect(last_response.status).to eq(400)
134
- expect(last_response.body).to eq('{"error":"names is invalid"}')
135
- end
136
-
137
- it 'refuses nil items' do
138
- get '/regexp_with_array', names: [nil, 'abc']
139
- expect(last_response.status).to eq(400)
140
- expect(last_response.body).to eq('{"error":"names is invalid"}')
141
- end
142
-
143
- it 'accepts valid items' do
144
- get '/regexp_with_array', names: ['bob']
145
- expect(last_response.status).to eq(200)
146
- end
147
-
148
- it 'accepts nil instead of array' do
149
- get '/regexp_with_array', names: nil
150
- expect(last_response.status).to eq(200)
151
- end
152
- end
153
-
154
- context 'nested regexp with array' do
155
- it 'refuses inapppopriate' do
156
- get '/nested_regexp_with_array', people: 'invalid name'
157
- expect(last_response.status).to eq(400)
158
- expect(last_response.body).to eq('{"error":"people is invalid, people[names] is missing, people[names] is invalid"}')
159
- end
160
- end
161
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::Validations::Validators::SameAsValidator do
4
- let_it_be(:app) do
5
- Class.new(Grape::API) do
6
- params do
7
- requires :password
8
- requires :password_confirmation, same_as: :password
9
- end
10
- post do
11
- end
12
-
13
- params do
14
- requires :password
15
- requires :password_confirmation, same_as: { value: :password, message: 'not match' }
16
- end
17
- post '/custom-message' do
18
- end
19
- end
20
- end
21
-
22
- describe '/' do
23
- context 'is the same' do
24
- it do
25
- post '/', password: '987654', password_confirmation: '987654'
26
- expect(last_response.status).to eq(201)
27
- expect(last_response.body).to eq('')
28
- end
29
- end
30
-
31
- context 'is not the same' do
32
- it do
33
- post '/', password: '123456', password_confirmation: 'whatever'
34
- expect(last_response.status).to eq(400)
35
- expect(last_response.body).to eq('password_confirmation is not the same as password')
36
- end
37
- end
38
- end
39
-
40
- describe '/custom-message' do
41
- context 'is the same' do
42
- it do
43
- post '/custom-message', password: '987654', password_confirmation: '987654'
44
- expect(last_response.status).to eq(201)
45
- expect(last_response.body).to eq('')
46
- end
47
- end
48
-
49
- context 'is not the same' do
50
- it do
51
- post '/custom-message', password: '123456', password_confirmation: 'whatever'
52
- expect(last_response.status).to eq(400)
53
- expect(last_response.body).to eq('password_confirmation not match')
54
- end
55
- end
56
- end
57
- end