sinatra-param 1.2.2 → 1.3.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +16 -0
- data/coverage/index.html +213 -153
- data/lib/sinatra/param.rb +22 -12
- data/lib/sinatra/param/version.rb +1 -1
- data/spec/dummy/app.rb +19 -2
- data/spec/{parameter_sets_spec.rb → parameter_exclusivity_spec.rb} +14 -5
- data/spec/parameter_raise_spec.rb +8 -1
- data/spec/parameter_spec.rb +5 -5
- data/spec/parameter_transformations_spec.rb +15 -8
- data/spec/parameter_type_coercion_spec.rb +44 -44
- data/spec/parameter_validations_spec.rb +39 -39
- metadata +4 -9
- data/sinatra-param-1.1.0.gem +0 -0
- data/sinatra-param-1.1.1.gem +0 -0
- data/sinatra-param-1.1.2.gem +0 -0
- data/sinatra-param-1.2.0.gem +0 -0
- data/sinatra-param-1.2.1.gem +0 -0
data/lib/sinatra/param.rb
CHANGED
@@ -14,7 +14,7 @@ module Sinatra
|
|
14
14
|
def param(name, type, options = {})
|
15
15
|
name = name.to_s
|
16
16
|
|
17
|
-
return unless params.member?(name) or
|
17
|
+
return unless params.member?(name) or options[:default] or options[:required]
|
18
18
|
|
19
19
|
begin
|
20
20
|
params[name] = coerce(params[name], type, options)
|
@@ -36,20 +36,26 @@ module Sinatra
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def one_of(*
|
40
|
-
|
41
|
-
names
|
42
|
-
if params[name] and present?(params[name])
|
43
|
-
count += 1
|
44
|
-
next unless count > 1
|
39
|
+
def one_of(*args)
|
40
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
41
|
+
names = args.collect(&:to_s)
|
45
42
|
|
46
|
-
|
47
|
-
if content_type and content_type.match(mime_type(:json))
|
48
|
-
error = {message: error}.to_json
|
49
|
-
end
|
43
|
+
return unless names.length > 2
|
50
44
|
|
51
|
-
|
45
|
+
begin
|
46
|
+
validate_one_of!(params, names, options)
|
47
|
+
rescue InvalidParameterError => exception
|
48
|
+
if options[:raise] or (settings.raise_sinatra_param_exceptions rescue false)
|
49
|
+
exception.param, exception.options = names, options
|
50
|
+
raise exception
|
52
51
|
end
|
52
|
+
|
53
|
+
error = "Parameters #{names.join(', ')} are mutually exclusive"
|
54
|
+
if content_type and content_type.match(mime_type(:json))
|
55
|
+
error = {message: error, errors: {names => exception.message}}.to_json
|
56
|
+
end
|
57
|
+
|
58
|
+
halt 400, error
|
53
59
|
end
|
54
60
|
end
|
55
61
|
|
@@ -112,6 +118,10 @@ module Sinatra
|
|
112
118
|
end
|
113
119
|
end
|
114
120
|
|
121
|
+
def validate_one_of!(params, names, options)
|
122
|
+
raise InvalidParameterError, "Parameters #{names.join(', ')} are mutually exclusive" if names.count{|name| present?(params[name])} > 1
|
123
|
+
end
|
124
|
+
|
115
125
|
# ActiveSupport #present? and #blank? without patching Object
|
116
126
|
def present?(object)
|
117
127
|
!blank?(object)
|
data/spec/dummy/app.rb
CHANGED
@@ -80,6 +80,11 @@ class App < Sinatra::Base
|
|
80
80
|
params.to_json
|
81
81
|
end
|
82
82
|
|
83
|
+
get '/default/hash' do
|
84
|
+
param :attributes, Hash, default: {}
|
85
|
+
params.to_json
|
86
|
+
end
|
87
|
+
|
83
88
|
get '/default/proc' do
|
84
89
|
param :year, Integer, default: proc { 2014 }
|
85
90
|
params.to_json
|
@@ -185,15 +190,27 @@ class App < Sinatra::Base
|
|
185
190
|
param :b, String
|
186
191
|
param :c, String
|
187
192
|
|
188
|
-
one_of
|
193
|
+
one_of :a, :b, :c
|
189
194
|
|
190
195
|
{
|
191
196
|
message: 'OK'
|
192
197
|
}.to_json
|
193
198
|
end
|
194
199
|
|
195
|
-
get '/raise' do
|
200
|
+
get '/raise/validation/required' do
|
196
201
|
param :arg, String, required: true, raise: true
|
197
202
|
params.to_json
|
198
203
|
end
|
204
|
+
|
205
|
+
get '/raise/choice' do
|
206
|
+
param :a, String
|
207
|
+
param :b, String
|
208
|
+
param :c, String
|
209
|
+
|
210
|
+
one_of :a, :b, :c, raise: true
|
211
|
+
|
212
|
+
{
|
213
|
+
message: 'OK'
|
214
|
+
}.to_json
|
215
|
+
end
|
199
216
|
end
|
@@ -8,26 +8,35 @@ describe 'Parameter Sets' do
|
|
8
8
|
{b: 2, c: 3},
|
9
9
|
{a: 1, b: 2, c: 3}
|
10
10
|
]
|
11
|
+
|
11
12
|
params.each do |param|
|
12
13
|
get('/choice', param) do |response|
|
13
|
-
response.status.
|
14
|
-
JSON.parse(response.body)['message'].
|
14
|
+
expect(response.status).to eql 400
|
15
|
+
expect(JSON.parse(response.body)['message']).to match(/mutually exclusive/)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
it 'returns successfully for requests that
|
20
|
+
it 'returns successfully for requests that have one parameter' do
|
20
21
|
params = [
|
21
22
|
{a: 1},
|
22
23
|
{b: 2},
|
23
24
|
{c: 3}
|
24
25
|
]
|
26
|
+
|
25
27
|
params.each do |param|
|
26
28
|
get('/choice', param) do |response|
|
27
|
-
response.status.
|
28
|
-
JSON.parse(response.body)['message'].
|
29
|
+
expect(response.status).to eql 200
|
30
|
+
expect(JSON.parse(response.body)['message']).to match(/OK/)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
34
|
+
|
35
|
+
it 'returns successfully for requests that have no parameter' do
|
36
|
+
get('/choice') do |response|
|
37
|
+
expect(response.status).to eql 200
|
38
|
+
expect(JSON.parse(response.body)['message']).to match(/OK/)
|
39
|
+
end
|
40
|
+
end
|
32
41
|
end
|
33
42
|
end
|
@@ -4,8 +4,15 @@ describe 'Exception' do
|
|
4
4
|
describe 'raise' do
|
5
5
|
it 'should raise error when option is specified' do
|
6
6
|
expect {
|
7
|
-
get('/raise')
|
7
|
+
get('/raise/validation/required')
|
8
8
|
}.to raise_error
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
it 'should raise error when more than one parameter is specified' do
|
13
|
+
params = {a: 1, b: 2, c: 3}
|
14
|
+
expect {
|
15
|
+
get('/raise/choice', params)
|
16
|
+
}.to raise_error
|
17
|
+
end
|
11
18
|
end
|
data/spec/parameter_spec.rb
CHANGED
@@ -4,16 +4,16 @@ describe 'Parameter' do
|
|
4
4
|
it 'only sets parameters present in request or with a default value' do
|
5
5
|
get('/', a: 'a', b: 'b') do |response|
|
6
6
|
response_body = JSON.parse(response.body)
|
7
|
-
response_body.
|
8
|
-
response_body.
|
9
|
-
response_body.
|
10
|
-
response_body.
|
7
|
+
expect(response_body).to be_member('a')
|
8
|
+
expect(response_body).to be_member('b')
|
9
|
+
expect(response_body).to be_member('c')
|
10
|
+
expect(response_body).to_not be_member('d')
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'stringifies parameters' do
|
15
15
|
get('/keys/stringify', q: 'test') do |response|
|
16
|
-
response.body.
|
16
|
+
expect(response.body).to eq 'TEST'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -4,15 +4,22 @@ describe 'Parameter Transformations' do
|
|
4
4
|
describe 'default' do
|
5
5
|
it 'sets a default value when none is given' do
|
6
6
|
get('/default') do |response|
|
7
|
-
response.status.
|
8
|
-
JSON.parse(response.body)['sort'].
|
7
|
+
expect(response.status).to eql 200
|
8
|
+
expect(JSON.parse(response.body)['sort']).to eql 'title'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'sets a default value from an empty hash' do
|
13
|
+
get('/default/hash') do |response|
|
14
|
+
expect(response.status).to eql 200
|
15
|
+
expect(JSON.parse(response.body)['attributes']).to eql Hash.new
|
9
16
|
end
|
10
17
|
end
|
11
18
|
|
12
19
|
it 'sets a default value from a proc' do
|
13
20
|
get('/default/proc') do |response|
|
14
|
-
response.status.
|
15
|
-
JSON.parse(response.body)['year'].
|
21
|
+
expect(response.status).to eql 200
|
22
|
+
expect(JSON.parse(response.body)['year']).to eql 2014
|
16
23
|
end
|
17
24
|
end
|
18
25
|
end
|
@@ -20,15 +27,15 @@ describe 'Parameter Transformations' do
|
|
20
27
|
describe 'transform' do
|
21
28
|
it 'transforms the input using to_proc' do
|
22
29
|
get('/transform', order: 'asc') do |response|
|
23
|
-
response.status.
|
24
|
-
JSON.parse(response.body)['order'].
|
30
|
+
expect(response.status).to eql 200
|
31
|
+
expect(JSON.parse(response.body)['order']).to eql 'ASC'
|
25
32
|
end
|
26
33
|
end
|
27
34
|
|
28
35
|
it 'skips transformations when the value is nil' do
|
29
36
|
get('/transform/required') do |response|
|
30
|
-
response.status.
|
31
|
-
JSON.parse(response.body)['message'].
|
37
|
+
expect(response.status).to eql 400
|
38
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: order')
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
@@ -4,8 +4,8 @@ describe 'Parameter Types' do
|
|
4
4
|
describe 'String' do
|
5
5
|
it 'coerces strings' do
|
6
6
|
get('/coerce/string', arg: '1234') do |response|
|
7
|
-
response.status.
|
8
|
-
JSON.parse(response.body)['arg'].
|
7
|
+
expect(response.status).to eql 200
|
8
|
+
expect(JSON.parse(response.body)['arg']).to eq('1234')
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -13,15 +13,15 @@ describe 'Parameter Types' do
|
|
13
13
|
describe 'Integer' do
|
14
14
|
it 'coerces integers' do
|
15
15
|
get('/coerce/integer', arg: '1234') do |response|
|
16
|
-
response.status.
|
17
|
-
JSON.parse(response.body)['arg'].
|
16
|
+
expect(response.status).to eql 200
|
17
|
+
expect(JSON.parse(response.body)['arg']).to eq(1234)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'returns 400 on requests when integer is invalid' do
|
22
22
|
get('/coerce/integer', arg: '123abc') do |response|
|
23
|
-
response.status.
|
24
|
-
JSON.parse(response.body)['message'].
|
23
|
+
expect(response.status).to eql 400
|
24
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -29,15 +29,15 @@ describe 'Parameter Types' do
|
|
29
29
|
describe 'Float' do
|
30
30
|
it 'coerces floats' do
|
31
31
|
get('/coerce/float', arg: '1234') do |response|
|
32
|
-
response.status.
|
33
|
-
JSON.parse(response.body)['arg'].
|
32
|
+
expect(response.status).to eql 200
|
33
|
+
expect(JSON.parse(response.body)['arg']).to eq(1234.0)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'returns 400 on requests when float is invalid' do
|
38
38
|
get('/coerce/float', arg: '123abc') do |response|
|
39
|
-
response.status.
|
40
|
-
JSON.parse(response.body)['message'].
|
39
|
+
expect(response.status).to eql 400
|
40
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -45,15 +45,15 @@ describe 'Parameter Types' do
|
|
45
45
|
describe 'Time' do
|
46
46
|
it 'coerces time' do
|
47
47
|
get('/coerce/time', arg: '20130117') do |response|
|
48
|
-
response.status.
|
49
|
-
JSON.parse(response.body)['arg'].
|
48
|
+
expect(response.status).to eql 200
|
49
|
+
expect(JSON.parse(response.body)['arg']).to match(/2013-01-17 00:00:00/)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'returns 400 on requests when time is invalid' do
|
54
54
|
get('/coerce/time', arg: '123abc') do |response|
|
55
|
-
response.status.
|
56
|
-
JSON.parse(response.body)['message'].
|
55
|
+
expect(response.status).to eql 400
|
56
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -61,15 +61,15 @@ describe 'Parameter Types' do
|
|
61
61
|
describe 'Date' do
|
62
62
|
it 'coerces date' do
|
63
63
|
get('/coerce/date', arg: '20130117') do |response|
|
64
|
-
response.status.
|
65
|
-
JSON.parse(response.body)['arg'].
|
64
|
+
expect(response.status).to eql 200
|
65
|
+
expect(JSON.parse(response.body)['arg']).to eq('2013-01-17')
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'returns 400 on requests when date is invalid' do
|
70
70
|
get('/coerce/date', arg: 'abc') do |response|
|
71
|
-
response.status.
|
72
|
-
JSON.parse(response.body)['message'].
|
71
|
+
expect(response.status).to eql 400
|
72
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -77,15 +77,15 @@ describe 'Parameter Types' do
|
|
77
77
|
describe 'DateTime' do
|
78
78
|
it 'coerces datetimes' do
|
79
79
|
get('/coerce/datetime', arg: '20130117') do |response|
|
80
|
-
response.status.
|
81
|
-
JSON.parse(response.body)['arg'].
|
80
|
+
expect(response.status).to eql 200
|
81
|
+
expect(JSON.parse(response.body)['arg']).to eq('2013-01-17T00:00:00+00:00')
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'returns 400 on requests when datetime is invalid' do
|
86
86
|
get('/coerce/datetime', arg: 'abc') do |response|
|
87
|
-
response.status.
|
88
|
-
JSON.parse(response.body)['message'].
|
87
|
+
expect(response.status).to eql 400
|
88
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
@@ -93,28 +93,28 @@ describe 'Parameter Types' do
|
|
93
93
|
describe 'Array' do
|
94
94
|
it 'coerces arrays' do
|
95
95
|
get('/coerce/array', arg: '1,2,3,4,5') do |response|
|
96
|
-
response.status.
|
96
|
+
expect(response.status).to eql 200
|
97
97
|
parsed_body = JSON.parse(response.body)
|
98
|
-
parsed_body['arg'].
|
99
|
-
parsed_body['arg'].
|
98
|
+
expect(parsed_body['arg']).to be_an(Array)
|
99
|
+
expect(parsed_body['arg']).to eq(%w(1 2 3 4 5))
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'coerces arrays of size 1' do
|
104
104
|
get('/coerce/array', arg: '1') do |response|
|
105
|
-
response.status.
|
105
|
+
expect(response.status).to eql 200
|
106
106
|
parsed_body = JSON.parse(response.body)
|
107
|
-
parsed_body['arg'].
|
108
|
-
parsed_body['arg'].
|
107
|
+
expect(parsed_body['arg']).to be_an(Array)
|
108
|
+
expect(parsed_body['arg']).to eq(%w(1))
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'coerces arrays with arg[] style' do
|
113
113
|
get('/coerce/array', 'arg[]' => ['1','2','3','4','5']) do |response|
|
114
|
-
response.status.
|
114
|
+
expect(response.status).to eql 200
|
115
115
|
parsed_body = JSON.parse(response.body)
|
116
|
-
parsed_body['arg'].
|
117
|
-
parsed_body['arg'].
|
116
|
+
expect(parsed_body['arg']).to be_an(Array)
|
117
|
+
expect(parsed_body['arg']).to eq(%w(1 2 3 4 5))
|
118
118
|
end
|
119
119
|
end
|
120
120
|
end
|
@@ -122,10 +122,10 @@ describe 'Parameter Types' do
|
|
122
122
|
describe 'Hash' do
|
123
123
|
it 'coerces hashes' do
|
124
124
|
get('/coerce/hash', arg: 'a:b,c:d') do |response|
|
125
|
-
response.status.
|
125
|
+
expect(response.status).to eql 200
|
126
126
|
parsed_body = JSON.parse(response.body)
|
127
|
-
parsed_body['arg'].
|
128
|
-
parsed_body['arg'].
|
127
|
+
expect(parsed_body['arg']).to be_an(Hash)
|
128
|
+
expect(parsed_body['arg']).to eq({ 'a' => 'b', 'c' => 'd'})
|
129
129
|
end
|
130
130
|
end
|
131
131
|
end
|
@@ -134,8 +134,8 @@ describe 'Parameter Types' do
|
|
134
134
|
it 'coerces truthy booleans to true' do
|
135
135
|
%w(1 true t yes y).each do |bool|
|
136
136
|
get('/coerce/boolean', arg: bool) do |response|
|
137
|
-
response.status.
|
138
|
-
JSON.parse(response.body)['arg'].
|
137
|
+
expect(response.status).to eql 200
|
138
|
+
expect(JSON.parse(response.body)['arg']).to be true
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end
|
@@ -143,9 +143,9 @@ describe 'Parameter Types' do
|
|
143
143
|
it 'coerces falsey booleans to false' do
|
144
144
|
%w(0 false f no n).each do |bool|
|
145
145
|
get('/coerce/boolean', arg: bool) do |response|
|
146
|
-
response.status.
|
147
|
-
JSON.parse(response.body)['arg'].
|
148
|
-
JSON.parse(response.body)['arg'].
|
146
|
+
expect(response.status).to eql 200
|
147
|
+
expect(JSON.parse(response.body)['arg']).to be false
|
148
|
+
expect(JSON.parse(response.body)['arg']).to_not be_nil
|
149
149
|
end
|
150
150
|
end
|
151
151
|
end
|
@@ -153,8 +153,8 @@ describe 'Parameter Types' do
|
|
153
153
|
it 'coerces truthy booleans to true when default is false' do
|
154
154
|
%w(1 true t yes y).each do |bool|
|
155
155
|
get('/default/boolean/false', arg: bool) do |response|
|
156
|
-
response.status.
|
157
|
-
JSON.parse(response.body)['arg'].
|
156
|
+
expect(response.status).to eql 200
|
157
|
+
expect(JSON.parse(response.body)['arg']).to be true
|
158
158
|
end
|
159
159
|
end
|
160
160
|
end
|
@@ -162,9 +162,9 @@ describe 'Parameter Types' do
|
|
162
162
|
it 'coerces falsey booleans to false when default is true' do
|
163
163
|
%w(0 false f no n).each do |bool|
|
164
164
|
get('/default/boolean/true', arg: bool) do |response|
|
165
|
-
response.status.
|
166
|
-
JSON.parse(response.body)['arg'].
|
167
|
-
JSON.parse(response.body)['arg'].
|
165
|
+
expect(response.status).to eql 200
|
166
|
+
expect(JSON.parse(response.body)['arg']).to be false
|
167
|
+
expect(JSON.parse(response.body)['arg']).to_not be_nil
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|
@@ -4,14 +4,14 @@ describe 'Parameter Validations' do
|
|
4
4
|
describe 'required' do
|
5
5
|
it 'returns 400 on requests without required fields' do
|
6
6
|
get('/validation/required') do |response|
|
7
|
-
response.status.
|
8
|
-
JSON.parse(response.body)['message'].
|
7
|
+
expect(response.status).to eq(400)
|
8
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'returns 200 on requests when required field present' do
|
13
13
|
get('/validation/required', arg: 'foo') do |response|
|
14
|
-
response.status.
|
14
|
+
expect(response.status).to eq(200)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -19,35 +19,35 @@ describe 'Parameter Validations' do
|
|
19
19
|
describe 'blank' do
|
20
20
|
it 'returns 400 on requests when string is blank' do
|
21
21
|
get('/validation/blank/string', arg: '') do |response|
|
22
|
-
response.status.
|
23
|
-
JSON.parse(response.body)['message'].
|
22
|
+
expect(response.status).to eq(400)
|
23
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'returns 400 on requests when array is blank' do
|
28
28
|
get('/validation/blank/array', arg: '') do |response|
|
29
|
-
response.status.
|
30
|
-
JSON.parse(response.body)['message'].
|
29
|
+
expect(response.status).to eq(400)
|
30
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'returns 400 on requests when hash is blank' do
|
35
35
|
get('/validation/blank/hash', arg: '') do |response|
|
36
|
-
response.status.
|
37
|
-
JSON.parse(response.body)['message'].
|
36
|
+
expect(response.status).to eq(400)
|
37
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'returns 400 on requests when hash is blank' do
|
42
42
|
get('/validation/blank/other', arg: '') do |response|
|
43
|
-
response.status.
|
44
|
-
JSON.parse(response.body)['message'].
|
43
|
+
expect(response.status).to eq(400)
|
44
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'returns 200 on request when blank is true' do
|
49
49
|
get('/validation/nonblank/string', arg: '') do |response|
|
50
|
-
response.status.
|
50
|
+
expect(response.status).to eq(200)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -55,19 +55,19 @@ describe 'Parameter Validations' do
|
|
55
55
|
describe 'format' do
|
56
56
|
it 'returns 200 on requests when value matches the param regex' do
|
57
57
|
get('/validation/format/hello', arg: 'hello world') do |response|
|
58
|
-
response.status.
|
58
|
+
expect(response.status).to eq(200)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'returns 400 on requests when value does not match the param regex' do
|
63
63
|
get('/validation/format/hello', arg: 'world') do |response|
|
64
|
-
response.status.
|
64
|
+
expect(response.status).to eq(400)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'returns 400 on requests when value is not a string' do
|
69
69
|
get('/validation/format/9000', arg: 9000) do |response|
|
70
|
-
response.status.
|
70
|
+
expect(response.status).to eq(400)
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -75,14 +75,14 @@ describe 'Parameter Validations' do
|
|
75
75
|
describe 'is' do
|
76
76
|
it 'returns 400 on requests when value is other than defined' do
|
77
77
|
get('/validation/is', arg: 'bar') do |response|
|
78
|
-
response.status.
|
79
|
-
JSON.parse(response.body)['message'].
|
78
|
+
expect(response.status).to eq(400)
|
79
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'returns 200 on requests with a value is other than defined' do
|
84
84
|
get('/validation/is', arg: 'foo') do |response|
|
85
|
-
response.status.
|
85
|
+
expect(response.status).to eq(200)
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -90,14 +90,14 @@ describe 'Parameter Validations' do
|
|
90
90
|
describe 'in' do
|
91
91
|
it 'returns 400 on requests with a value not in the set' do
|
92
92
|
get('/validation/in', arg: 'MISC') do |response|
|
93
|
-
response.status.
|
94
|
-
JSON.parse(response.body)['message'].
|
93
|
+
expect(response.status).to eq(400)
|
94
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'returns 200 on requests with a value in the set' do
|
99
99
|
get('/validation/in', arg: 'ASC') do |response|
|
100
|
-
response.status.
|
100
|
+
expect(response.status).to eq(200)
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -105,14 +105,14 @@ describe 'Parameter Validations' do
|
|
105
105
|
describe 'within' do
|
106
106
|
it 'returns 400 on requests with a value outside the range' do
|
107
107
|
get('/validation/within', arg: 20) do |response|
|
108
|
-
response.status.
|
109
|
-
JSON.parse(response.body)['message'].
|
108
|
+
expect(response.status).to eq(400)
|
109
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
113
|
it 'returns 200 on requests with a value within the range' do
|
114
114
|
get('/validation/within', arg: 5) do |response|
|
115
|
-
response.status.
|
115
|
+
expect(response.status).to eq(200)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
@@ -120,14 +120,14 @@ describe 'Parameter Validations' do
|
|
120
120
|
describe 'range' do
|
121
121
|
it 'returns 400 on requests with a value outside the range' do
|
122
122
|
get('/validation/range', arg: 20) do |response|
|
123
|
-
response.status.
|
124
|
-
JSON.parse(response.body)['message'].
|
123
|
+
expect(response.status).to eq(400)
|
124
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
128
|
it 'returns 200 on requests within the range' do
|
129
129
|
get('/validation/range', arg: 10) do |response|
|
130
|
-
response.status.
|
130
|
+
expect(response.status).to eq(200)
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
@@ -135,14 +135,14 @@ describe 'Parameter Validations' do
|
|
135
135
|
describe 'min' do
|
136
136
|
it 'returns 400 on requests with a value smaller than min' do
|
137
137
|
get('/validation/min', arg: 5) do |response|
|
138
|
-
response.status.
|
139
|
-
JSON.parse(response.body)['message'].
|
138
|
+
expect(response.status).to eq(400)
|
139
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
143
|
it 'returns 200 on requests with a value larger than min' do
|
144
144
|
get('/validation/min', arg: 200) do |response|
|
145
|
-
response.status.
|
145
|
+
expect(response.status).to eq(200)
|
146
146
|
end
|
147
147
|
end
|
148
148
|
end
|
@@ -150,14 +150,14 @@ describe 'Parameter Validations' do
|
|
150
150
|
describe 'max' do
|
151
151
|
it 'returns 400 on requests with a value larger than max' do
|
152
152
|
get('/validation/max', arg: 100) do |response|
|
153
|
-
response.status.
|
154
|
-
JSON.parse(response.body)['message'].
|
153
|
+
expect(response.status).to eq(400)
|
154
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
158
|
it 'returns 200 on requests with a value smaller than max' do
|
159
159
|
get('/validation/max', arg: 2) do |response|
|
160
|
-
response.status.
|
160
|
+
expect(response.status).to eq(200)
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
@@ -165,14 +165,14 @@ describe 'Parameter Validations' do
|
|
165
165
|
describe 'min_length' do
|
166
166
|
it 'returns 400 on requests with a string shorter than min_length' do
|
167
167
|
get('/validation/min_length', arg: 'hi') do |response|
|
168
|
-
response.status.
|
169
|
-
JSON.parse(response.body)['message'].
|
168
|
+
expect(response.status).to eq(400)
|
169
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
173
173
|
it 'returns 200 on requests with a string longer than min_length' do
|
174
174
|
get('/validation/max_length', arg: 'longer') do |response|
|
175
|
-
response.status.
|
175
|
+
expect(response.status).to eq(200)
|
176
176
|
end
|
177
177
|
end
|
178
178
|
end
|
@@ -180,14 +180,14 @@ describe 'Parameter Validations' do
|
|
180
180
|
describe 'max_length' do
|
181
181
|
it 'returns 400 on requests with a string longer than max_length' do
|
182
182
|
get('/validation/max_length', arg: 'reallylongstringlongerthanmax') do |response|
|
183
|
-
response.status.
|
184
|
-
JSON.parse(response.body)['message'].
|
183
|
+
expect(response.status).to eq(400)
|
184
|
+
expect(JSON.parse(response.body)['message']).to eq('Invalid Parameter: arg')
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
188
188
|
it 'returns 200 on requests with a string shorter than max_length' do
|
189
189
|
get('/validation/max_length', arg: 'short') do |response|
|
190
|
-
response.status.
|
190
|
+
expect(response.status).to eq(200)
|
191
191
|
end
|
192
192
|
end
|
193
193
|
end
|