jellyfish 1.0.2 → 1.1.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.
@@ -1,217 +0,0 @@
1
-
2
- require 'jellyfish/test'
3
-
4
- # stolen from sinatra
5
- describe 'Sinatra filter_test.rb' do
6
- paste :jellyfish
7
-
8
- def new_app base=Object, &block
9
- Class.new(base){
10
- include Jellyfish
11
- controller_include(Jellyfish::MultiActions)
12
- instance_eval(&block)
13
- }.new
14
- end
15
-
16
- would 'executes filters in the order defined' do
17
- count = 0
18
- app = new_app{
19
- get { count.should.eq 0; count = 1 }
20
- get { count.should.eq 1; count = 2 }
21
- get('/'){ 'Hello World' }
22
- }
23
-
24
- status, _, body = get('/', app)
25
- status.should.eq 200
26
- count .should.eq 2
27
- body .should.eq ['Hello World']
28
- end
29
-
30
- would 'modify env' do
31
- app = new_app{
32
- get{ env['BOO'] = 'MOO' }
33
- get('/foo'){ env['BOO'] }
34
- }
35
-
36
- status, _, body = get('/foo', app)
37
- status.should.eq 200
38
- body .should.eq ['MOO']
39
- end
40
-
41
- would 'modify instance variables available to routes' do
42
- app = new_app{
43
- get{ @foo = 'bar' }
44
- get('/foo') { @foo }
45
- }
46
-
47
- status, _, body = get('/foo', app)
48
- status.should.eq 200
49
- body .should.eq ['bar']
50
- end
51
-
52
- would 'allows redirects' do
53
- app = new_app{
54
- get{ found '/bar' }
55
- get('/foo') do
56
- fail 'before block should have halted processing'
57
- 'ORLY?!'
58
- end
59
- }
60
-
61
- status, headers, body = get('/foo', app)
62
- status .should.eq 302
63
- headers['Location'].should.eq '/bar'
64
- body.join .should =~ %r{<h1>Jellyfish found: /bar</h1>}
65
- end
66
-
67
- would 'not modify the response with its return value' do
68
- app = new_app{
69
- get{ 'Hello World!' }
70
- get '/foo' do
71
- body.should.eq nil
72
- 'cool'
73
- end
74
- }
75
-
76
- status, _, body = get('/foo', app)
77
- status.should.eq 200
78
- body .should.eq ['cool']
79
- end
80
-
81
- would 'modify the response with halt' do
82
- app = new_app{
83
- get('/foo'){ halt [302, {}, ['Hi']] }
84
- get('/foo'){ 'should not happen' }
85
- get('/bar'){ status 402; body 'Ho'; halt }
86
- get('/bar'){ 'should not happen' }
87
- }
88
-
89
- get('/foo', app).should.eq [302, {}, ['Hi']]
90
- get('/bar', app).should.eq [402, {}, ['Ho']]
91
- end
92
-
93
- would 'give you access to params' do
94
- app = new_app{
95
- get{ @foo = Rack::Request.new(env).params['foo'] }
96
- get('/foo'){ @foo.reverse }
97
- }
98
-
99
- status, _, body = get('/foo', app, 'QUERY_STRING' => 'foo=cool')
100
- status.should.eq 200
101
- body .should.eq ['looc']
102
- end
103
-
104
- would 'run filters defined in superclasses' do
105
- sup = new_app{ get{ @foo = 'hello from superclass' } }.class
106
- app = new_app(sup){ get('/foo'){ @foo } }
107
-
108
- _, _, body = get('/foo', app)
109
- body.should.eq ['hello from superclass']
110
-
111
- sup .routes['get'].size.should.eq 1
112
- app.class.routes['get'].size.should.eq 2
113
- end
114
-
115
- would 'take an optional route pattern' do
116
- ran_filter = false
117
- app = new_app{
118
- get(%r{^/b}){ ran_filter = true }
119
- get('/foo') {}
120
- get('/bar') {}
121
- }
122
- get('/foo', app)
123
- ran_filter.should.eq false
124
- get('/bar', app)
125
- ran_filter.should.eq true
126
- end
127
-
128
- would 'generate block arguments from route pattern' do
129
- subpath = nil
130
- app = new_app{
131
- get(%r{^/foo/(\w+)}){ |m| subpath = m[1] }
132
- }
133
- get('/foo/bar', app)
134
- subpath.should.eq 'bar'
135
- end
136
-
137
- would 'execute before and after filters in correct order' do
138
- invoked = 0
139
- app = new_app{
140
- get { invoked = 2 }
141
- get('/'){ invoked += 2; body 'hello' }
142
- get { invoked *= 2 }
143
- }
144
-
145
- status, _, body = get('/', app)
146
- status .should.eq 200
147
- body .should.eq ['hello']
148
- invoked.should.eq 8
149
- end
150
-
151
- would 'execute filters in the order defined' do
152
- count = 0
153
- app = new_app{
154
- get('/'){ body 'Hello World' }
155
- get{
156
- count.should.eq 0
157
- count = 1
158
- }
159
- get{
160
- count.should.eq 1
161
- count = 2
162
- }
163
- }
164
-
165
- status, _, body = get('/', app)
166
- status.should.eq 200
167
- count .should.eq 2
168
- body .should.eq ['Hello World']
169
- end
170
-
171
- would 'allow redirects' do
172
- app = new_app{
173
- get('/foo'){ 'ORLY' }
174
- get { found '/bar' }
175
- }
176
-
177
- status, headers, body = get('/foo', app)
178
- status .should.eq 302
179
- headers['Location'].should.eq '/bar'
180
- body.join .should =~ %r{<h1>Jellyfish found: /bar</h1>}
181
- end
182
-
183
- would 'not modify the response with its return value' do
184
- app = new_app{
185
- get('/foo'){ body 'cool' }
186
- get { 'Hello World!' }
187
- }
188
-
189
- status, _, body = get('/foo', app)
190
- status.should.eq 200
191
- body .should.eq ['cool']
192
- end
193
-
194
- would 'modify the response with halt' do
195
- app = new_app{
196
- get('/foo'){ 'should not be returned' }
197
- get{ halt [302, {}, ['Hi']] }
198
- }
199
-
200
- status, _, body = get('/foo', app)
201
- status.should.eq 302
202
- body .should.eq ['Hi']
203
- end
204
-
205
- would 'take an optional route pattern' do
206
- ran_filter = false
207
- app = new_app{
208
- get('/foo') {}
209
- get('/bar') {}
210
- get(%r{^/b}){ ran_filter = true }
211
- }
212
- get('/foo', app)
213
- ran_filter.should.eq false
214
- get('/bar', app)
215
- ran_filter.should.eq true
216
- end
217
- end
@@ -1,131 +0,0 @@
1
-
2
- require 'jellyfish/test'
3
-
4
- describe Jellyfish do
5
- paste :jellyfish
6
-
7
- app = Rack::Builder.app do
8
- eval File.read("#{File.dirname(__FILE__)}/../config.ru")
9
- end
10
-
11
- def string_keys hash
12
- hash.inject({}){ |r, (k, v)| r[k.to_s] = v; r }
13
- end
14
-
15
- would '/swagger' do
16
- status, headers, body = get('/swagger', app)
17
- status .should.eq 200
18
- headers['Content-Type'].should.eq 'application/json; charset=utf-8'
19
- res = Jellyfish::Json.decode(body.to_a.join)
20
- res['swaggerVersion'].should.eq '1.2'
21
- res['info'] .should.eq string_keys(Jelly.info)
22
- res['apiVersion'] .should.eq Jelly.swagger_apiVersion
23
- res['apis'] .should.eq \
24
- [{'path' => '/users'}, {'path' => '/posts'}]
25
- end
26
-
27
- would '/swagger/users' do
28
- status, _, body = get('/swagger/users', app)
29
- status .should.eq 200
30
- res = Jellyfish::Json.decode(body.to_a.join)
31
- res['basePath'] .should.eq 'https://localhost:8080'
32
- res['resourcePath'].should.eq '/users'
33
- res['apis'] .should.eq \
34
- [{"path"=>"/users",
35
- "operations"=>[{"summary"=>"List users",
36
- "notes"=>"List users<br>Note that we do not really" \
37
- " have users.",
38
- "path"=>"/users",
39
- "method"=>"GET",
40
- "nickname"=>"/users",
41
- "parameters"=>[]},
42
- {"summary"=>"Create a user",
43
- "notes"=>"Create a user<br>Here we demonstrate how" \
44
- " to write the swagger doc.",
45
- "parameters"=>[{"type"=>"string",
46
- "required"=>true,
47
- "description"=>"The name of the user",
48
- "name"=>"name",
49
- "paramType"=>"query"},
50
- {"type"=>"boolean",
51
- "description"=>"If the user is sane",
52
- "name"=>"sane",
53
- "required"=>false,
54
- "paramType"=>"query"},
55
- {"type"=>"string",
56
- "description"=>"What kind of user",
57
- "enum"=>["good", "neutral", "evil"],
58
- "name"=>"type",
59
- "required"=>false,
60
- "paramType"=>"query"}],
61
- "responseMessages"=>[{"code"=>400,
62
- "message"=>"Invalid name"}],
63
- "path"=>"/users",
64
- "method"=>"POST",
65
- "nickname"=>"/users"}]},
66
- {"path"=>"/users/{id}",
67
- "operations"=>[{"summary"=>"Update a user",
68
- "parameters"=>[{"type"=>"integer",
69
- "description"=>"The id of the user",
70
- "name"=>"id",
71
- "required"=>true,
72
- "paramType"=>"path"}],
73
- "path"=>"/users",
74
- "method"=>"PUT",
75
- "nickname"=>"/users/{id}",
76
- "notes"=>"Update a user"},
77
- {"path"=>"/users",
78
- "method"=>"DELETE",
79
- "nickname"=>"/users/{id}",
80
- "summary"=>nil,
81
- "notes"=>nil,
82
- "parameters"=>[{"name"=>"id",
83
- "type"=>"integer",
84
- "required"=>true,
85
- "paramType"=>"path"}]}]}]
86
- end
87
-
88
- swagger = Jellyfish::Swagger.new(Class.new{include Jellyfish})
89
-
90
- would 'swagger_path' do
91
- swagger.send(:swagger_path, '/') .should.eq '/'
92
- swagger.send(:swagger_path, '/users/{id}').should.eq '/users'
93
- end
94
-
95
- would 'nickname' do
96
- swagger.send(:nickname, '/') .should.eq '/'
97
- swagger.send(:nickname, '/users/{id}') .should.eq '/users/{id}'
98
- swagger.send(:nickname, %r{\A/users/(?<id>\d+)}).should.eq '/users/{id}'
99
- swagger.send(:nickname, %r{^/users/(?<id>\d+)$}).should.eq '/users/{id}'
100
- swagger.send(:nickname, %r{/(?<a>\d)/(?<b>\w)$}).should.eq '/{a}/{b}'
101
- end
102
-
103
- would 'notes' do
104
- swagger.send(:notes, :summary => 'summary', :notes => 'notes').
105
- should.eq 'summary<br>notes'
106
- swagger.send(:notes, :summary => 'summary').
107
- should.eq 'summary'
108
- end
109
-
110
- would 'path_parameters' do
111
- swagger.send(:path_parameters, %r{/(?<a>\d)/(?<b>\w)/(?<c>\d)$},
112
- :parameters => {:c => {:type => 'hash'}}).
113
- should.eq([{:name => 'a', :type => 'integer',
114
- :required => true, :paramType => 'path'},
115
- {:name => 'b', :type => 'string',
116
- :required => true, :paramType => 'path'},
117
- {:name => 'c', :type => 'hash',
118
- :required => true, :paramType => 'path'}])
119
- end
120
-
121
- would 'query_parameters' do
122
- swagger.send(:query_parameters,
123
- :parameters => {:c => {:type => 'hash'}}).
124
- should.eq([:name => 'c', :type => 'hash',
125
- :required => false, :paramType => 'query'])
126
- swagger.send(:query_parameters,
127
- :parameters => {:c => {:required => true}}).
128
- should.eq([:name => 'c', :type => 'string',
129
- :required => true, :paramType => 'query'])
130
- end
131
- end