-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathhash_spec.rb
112 lines (94 loc) · 2.46 KB
/
hash_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# frozen_string_literal: true
describe Grape::ParamsBuilder::Hash do
subject { app }
let(:app) do
Class.new(Grape::API)
end
describe 'in an endpoint' do
describe '#params' do
before do
subject.params do
build_with :hash
end
subject.get do
params.class
end
end
it 'is of type Hash' do
get '/'
expect(last_response.status).to eq(200)
expect(last_response.body).to eq('Hash')
end
end
end
describe 'in an api' do
before do
subject.build_with :hash
end
describe '#params' do
before do
subject.get do
params.class
end
end
it 'is Hash' do
get '/'
expect(last_response.status).to eq(200)
expect(last_response.body).to eq('Hash')
end
end
it 'symbolizes params keys' do
subject.params do
optional :a, type: Hash do
optional :b, type: Hash do
optional :c, type: String
end
optional :d, type: Array
end
end
subject.get '/foo' do
[params[:a][:b][:c], params[:a][:d]]
end
get '/foo', 'a' => { b: { c: 'bar' }, 'd' => ['foo'] }
expect(last_response.status).to eq(200)
expect(last_response.body).to eq('["bar", ["foo"]]')
end
it 'symbolizes the params' do
subject.params do
build_with :hash
requires :a, type: String
end
subject.get '/foo' do
[params[:a], params['a']]
end
get '/foo', a: 'bar'
expect(last_response.status).to eq(200)
expect(last_response.body).to eq('["bar", nil]')
end
it 'does not overwrite route_param with a regular param if they have same name' do
subject.namespace :route_param do
route_param :foo do
get { params.to_json }
end
end
get '/route_param/bar', foo: 'baz'
expect(last_response.status).to eq(200)
expect(last_response.body).to eq('{"foo":"bar"}')
end
it 'does not overwrite route_param with a defined regular param if they have same name' do
subject.namespace :route_param do
params do
requires :foo, type: String
end
route_param :foo do
get do
params[:foo]
end
end
end
get '/route_param/bar', foo: 'baz'
expect(last_response.status).to eq(200)
expect(last_response.body).to eq('bar')
end
end
end