rtomayko-sinatra 0.9.0 → 0.9.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/test/helper.rb ADDED
@@ -0,0 +1,25 @@
1
+ begin
2
+ require 'test/spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'test/spec'
6
+ end
7
+
8
+ $:.unshift File.dirname(File.dirname(__FILE__)) + '/lib'
9
+ require 'sinatra/base'
10
+ require 'sinatra/test'
11
+ require 'sinatra/test/spec'
12
+
13
+ module Sinatra::Test
14
+ # Sets up a Sinatra::Base subclass defined with the block
15
+ # given. Used in setup or individual spec methods to establish
16
+ # the application.
17
+ def mock_app(base=Sinatra::Base, &block)
18
+ @app = Sinatra.new(base, &block)
19
+ end
20
+ end
21
+
22
+ class Sinatra::Base
23
+ # Allow assertions in request context
24
+ include Test::Unit::Assertions
25
+ end
data/test/helpers_test.rb CHANGED
@@ -1,10 +1,4 @@
1
- require 'test/spec'
2
- require 'sinatra/base'
3
- require 'sinatra/test'
4
-
5
- class Test::Unit::TestCase
6
- include Sinatra::Test
7
- end
1
+ require File.dirname(__FILE__) + '/helper'
8
2
 
9
3
  describe 'Sinatra::Helpers' do
10
4
  describe '#status' do
@@ -19,7 +13,7 @@ describe 'Sinatra::Helpers' do
19
13
 
20
14
  it 'sets the response status code' do
21
15
  get '/'
22
- response.status.should.equal 207
16
+ assert_equal 207, response.status
23
17
  end
24
18
  end
25
19
 
@@ -32,7 +26,7 @@ describe 'Sinatra::Helpers' do
32
26
  }
33
27
 
34
28
  get '/'
35
- body.should.equal 'Hello World'
29
+ assert_equal 'Hello World', body
36
30
  end
37
31
 
38
32
  it 'takes a String, Array, or other object responding to #each' do
@@ -43,7 +37,7 @@ describe 'Sinatra::Helpers' do
43
37
  }
44
38
 
45
39
  get '/'
46
- body.should.equal 'Hello World'
40
+ assert_equal 'Hello World', body
47
41
  end
48
42
  end
49
43
 
@@ -57,9 +51,9 @@ describe 'Sinatra::Helpers' do
57
51
  }
58
52
 
59
53
  get '/'
60
- status.should.equal 302
61
- body.should.be.empty
62
- response['Location'].should.equal '/foo'
54
+ assert_equal 302, status
55
+ assert_equal '', body
56
+ assert_equal '/foo', response['Location']
63
57
  end
64
58
 
65
59
  it 'uses the code given when specified' do
@@ -71,9 +65,9 @@ describe 'Sinatra::Helpers' do
71
65
  }
72
66
 
73
67
  get '/'
74
- status.should.equal 301
75
- body.should.be.empty
76
- response['Location'].should.equal '/foo'
68
+ assert_equal 301, status
69
+ assert_equal '', body
70
+ assert_equal '/foo', response['Location']
77
71
  end
78
72
  end
79
73
 
@@ -87,8 +81,8 @@ describe 'Sinatra::Helpers' do
87
81
  }
88
82
 
89
83
  get '/'
90
- status.should.equal 501
91
- body.should.be.empty
84
+ assert_equal 501, status
85
+ assert_equal '', body
92
86
  end
93
87
 
94
88
  it 'takes an optional body' do
@@ -100,8 +94,8 @@ describe 'Sinatra::Helpers' do
100
94
  }
101
95
 
102
96
  get '/'
103
- status.should.equal 501
104
- body.should.equal 'FAIL'
97
+ assert_equal 501, status
98
+ assert_equal 'FAIL', body
105
99
  end
106
100
 
107
101
  it 'uses a 500 status code when first argument is a body' do
@@ -113,8 +107,8 @@ describe 'Sinatra::Helpers' do
113
107
  }
114
108
 
115
109
  get '/'
116
- status.should.equal 500
117
- body.should.equal 'FAIL'
110
+ assert_equal 500, status
111
+ assert_equal 'FAIL', body
118
112
  end
119
113
  end
120
114
 
@@ -128,8 +122,8 @@ describe 'Sinatra::Helpers' do
128
122
  }
129
123
 
130
124
  get '/'
131
- status.should.equal 404
132
- body.should.be.empty
125
+ assert_equal 404, status
126
+ assert_equal '', body
133
127
  end
134
128
  end
135
129
 
@@ -142,20 +136,20 @@ describe 'Sinatra::Helpers' do
142
136
  }
143
137
 
144
138
  get '/', :env => { 'rack.session' => { :foo => 'bar' } }
145
- body.should.equal 'bar'
139
+ assert_equal 'bar', body
146
140
  end
147
141
 
148
142
  it 'creates a new session when none provided' do
149
143
  mock_app {
150
144
  get '/' do
151
- session.should.be.empty
145
+ assert session.empty?
152
146
  session[:foo] = 'bar'
153
147
  'Hi'
154
148
  end
155
149
  }
156
150
 
157
151
  get '/'
158
- body.should.equal 'Hi'
152
+ assert_equal 'Hi', body
159
153
  end
160
154
  end
161
155
 
@@ -163,18 +157,18 @@ describe 'Sinatra::Helpers' do
163
157
  include Sinatra::Helpers
164
158
  it "looks up media types in Rack's MIME registry" do
165
159
  Rack::Mime::MIME_TYPES['.foo'] = 'application/foo'
166
- media_type('foo').should.equal 'application/foo'
167
- media_type('.foo').should.equal 'application/foo'
168
- media_type(:foo).should.equal 'application/foo'
160
+ assert_equal 'application/foo', media_type('foo')
161
+ assert_equal 'application/foo', media_type('.foo')
162
+ assert_equal 'application/foo', media_type(:foo)
169
163
  end
170
164
  it 'returns nil when given nil' do
171
- media_type(nil).should.be.nil
165
+ assert media_type(nil).nil?
172
166
  end
173
167
  it 'returns nil when media type not registered' do
174
- media_type(:bizzle).should.be.nil
168
+ assert media_type(:bizzle).nil?
175
169
  end
176
170
  it 'returns the argument when given a media type string' do
177
- media_type('text/plain').should.equal 'text/plain'
171
+ assert_equal 'text/plain', media_type('text/plain')
178
172
  end
179
173
  end
180
174
 
@@ -188,8 +182,8 @@ describe 'Sinatra::Helpers' do
188
182
  }
189
183
 
190
184
  get '/'
191
- response['Content-Type'].should.equal 'text/plain'
192
- body.should.equal 'Hello World'
185
+ assert_equal 'text/plain', response['Content-Type']
186
+ assert_equal 'Hello World', body
193
187
  end
194
188
 
195
189
  it 'takes media type parameters (like charset=)' do
@@ -201,9 +195,9 @@ describe 'Sinatra::Helpers' do
201
195
  }
202
196
 
203
197
  get '/'
204
- should.be.ok
205
- response['Content-Type'].should.equal 'text/html;charset=utf-8'
206
- body.should.equal "<h1>Hello, World</h1>"
198
+ assert ok?
199
+ assert_equal 'text/html;charset=utf-8', response['Content-Type']
200
+ assert_equal "<h1>Hello, World</h1>", body
207
201
  end
208
202
 
209
203
  it "looks up symbols in Rack's mime types dictionary" do
@@ -216,9 +210,9 @@ describe 'Sinatra::Helpers' do
216
210
  }
217
211
 
218
212
  get '/foo.xml'
219
- should.be.ok
220
- response['Content-Type'].should.equal 'application/foo'
221
- body.should.equal 'I AM FOO'
213
+ assert ok?
214
+ assert_equal 'application/foo', response['Content-Type']
215
+ assert_equal 'I AM FOO', body
222
216
  end
223
217
 
224
218
  it 'fails when no mime type is registered for the argument provided' do
@@ -228,8 +222,7 @@ describe 'Sinatra::Helpers' do
228
222
  "I AM FOO"
229
223
  end
230
224
  }
231
-
232
- lambda { get '/foo.xml' }.should.raise RuntimeError
225
+ assert_raise(RuntimeError) { get '/foo.xml' }
233
226
  end
234
227
  end
235
228
 
@@ -255,26 +248,26 @@ describe 'Sinatra::Helpers' do
255
248
  it "sends the contents of the file" do
256
249
  send_file_app
257
250
  get '/file.txt'
258
- should.be.ok
259
- body.should.equal 'Hello World'
251
+ assert ok?
252
+ assert_equal 'Hello World', body
260
253
  end
261
254
 
262
255
  it 'sets the Content-Type response header if a mime-type can be located' do
263
256
  send_file_app
264
257
  get '/file.txt'
265
- response['Content-Type'].should.equal 'text/plain'
258
+ assert_equal 'text/plain', response['Content-Type']
266
259
  end
267
260
 
268
261
  it 'sets the Content-Length response header' do
269
262
  send_file_app
270
263
  get '/file.txt'
271
- response['Content-Length'].should.equal 'Hello World'.length.to_s
264
+ assert_equal 'Hello World'.length.to_s, response['Content-Length']
272
265
  end
273
266
 
274
267
  it 'sets the Last-Modified response header' do
275
268
  send_file_app
276
269
  get '/file.txt'
277
- response['Last-Modified'].should.equal File.mtime(@file).httpdate
270
+ assert_equal File.mtime(@file).httpdate, response['Last-Modified']
278
271
  end
279
272
 
280
273
  it "returns a 404 when not found" do
@@ -284,7 +277,7 @@ describe 'Sinatra::Helpers' do
284
277
  end
285
278
  }
286
279
  get '/'
287
- should.be.not_found
280
+ assert not_found?
288
281
  end
289
282
  end
290
283
 
@@ -303,19 +296,19 @@ describe 'Sinatra::Helpers' do
303
296
 
304
297
  it 'sets the Last-Modified header to a valid RFC 2616 date value' do
305
298
  get '/'
306
- response['Last-Modified'].should.equal @now.httpdate
299
+ assert_equal @now.httpdate, response['Last-Modified']
307
300
  end
308
301
 
309
302
  it 'returns a body when conditional get misses' do
310
303
  get '/'
311
- status.should.be 200
312
- body.should.equal 'Boo!'
304
+ assert_equal 200, status
305
+ assert_equal 'Boo!', body
313
306
  end
314
307
 
315
308
  it 'halts when a conditional GET matches' do
316
309
  get '/', :env => { 'HTTP_IF_MODIFIED_SINCE' => @now.httpdate }
317
- status.should.be 304
318
- body.should.be.empty
310
+ assert_equal 304, status
311
+ assert_equal '', body
319
312
  end
320
313
  end
321
314
 
@@ -332,25 +325,25 @@ describe 'Sinatra::Helpers' do
332
325
 
333
326
  it 'sets the ETag header' do
334
327
  get '/'
335
- response['ETag'].should.equal '"FOO"'
328
+ assert_equal '"FOO"', response['ETag']
336
329
  end
337
330
 
338
331
  it 'returns a body when conditional get misses' do
339
332
  get '/'
340
- status.should.be 200
341
- body.should.equal 'Boo!'
333
+ assert_equal 200, status
334
+ assert_equal 'Boo!', body
342
335
  end
343
336
 
344
337
  it 'halts when a conditional GET matches' do
345
338
  get '/', :env => { 'HTTP_IF_NONE_MATCH' => '"FOO"' }
346
- status.should.be 304
347
- body.should.be.empty
339
+ assert_equal 304, status
340
+ assert_equal '', body
348
341
  end
349
342
 
350
343
  it 'should handle multiple ETag values in If-None-Match header' do
351
344
  get '/', :env => { 'HTTP_IF_NONE_MATCH' => '"BAR", *' }
352
- status.should.be 304
353
- body.should.be.empty
345
+ assert_equal 304, status
346
+ assert_equal '', body
354
347
  end
355
348
 
356
349
  it 'uses a weak etag with the :weak option' do
@@ -361,7 +354,7 @@ describe 'Sinatra::Helpers' do
361
354
  end
362
355
  }
363
356
  get '/'
364
- response['ETag'].should.equal 'W/"FOO"'
357
+ assert_equal 'W/"FOO"', response['ETag']
365
358
  end
366
359
 
367
360
  end
@@ -1,10 +1,6 @@
1
- require 'test/spec'
2
- require 'sinatra/base'
3
- require 'sinatra/test'
1
+ require File.dirname(__FILE__) + '/helper'
4
2
 
5
3
  describe 'Exception Mappings' do
6
- include Sinatra::Test
7
-
8
4
  class FooError < RuntimeError
9
5
  end
10
6
 
@@ -17,8 +13,8 @@ describe 'Exception Mappings' do
17
13
  end
18
14
  }
19
15
  get '/'
20
- status.should.equal 500
21
- body.should.equal 'Foo!'
16
+ assert_equal 500, status
17
+ assert_equal 'Foo!', body
22
18
  end
23
19
 
24
20
  it 'uses the Exception handler if no matching handler found' do
@@ -30,16 +26,16 @@ describe 'Exception Mappings' do
30
26
  end
31
27
  }
32
28
  get '/'
33
- status.should.equal 500
34
- body.should.equal 'Exception!'
29
+ assert_equal 500, status
30
+ assert_equal 'Exception!', body
35
31
  end
36
32
 
37
33
  it "sets env['sinatra.error'] to the rescued exception" do
38
34
  mock_app {
39
35
  set :raise_errors, false
40
36
  error(FooError) {
41
- env.should.include 'sinatra.error'
42
- env['sinatra.error'].should.be.kind_of FooError
37
+ assert env.include?('sinatra.error')
38
+ assert env['sinatra.error'].kind_of?(FooError)
43
39
  'looks good'
44
40
  }
45
41
  get '/' do
@@ -47,7 +43,19 @@ describe 'Exception Mappings' do
47
43
  end
48
44
  }
49
45
  get '/'
50
- body.should.equal 'looks good'
46
+ assert_equal 'looks good', body
47
+ end
48
+
49
+ it 'dumps errors to rack.errors when dump_errors is enabled' do
50
+ mock_app {
51
+ set :raise_errors, false
52
+ set :dump_errors, true
53
+ get('/') { raise FooError, 'BOOM!' }
54
+ }
55
+
56
+ get '/'
57
+ assert_equal 500, status
58
+ assert @response.errors =~ /FooError - BOOM!:/
51
59
  end
52
60
 
53
61
  it "raises without calling the handler when the raise_errors options is set" do
@@ -58,7 +66,7 @@ describe 'Exception Mappings' do
58
66
  raise FooError
59
67
  end
60
68
  }
61
- lambda { get '/' }.should.raise FooError
69
+ assert_raise(FooError) { get '/' }
62
70
  end
63
71
 
64
72
  it "never raises Sinatra::NotFound beyond the application" do
@@ -68,8 +76,8 @@ describe 'Exception Mappings' do
68
76
  raise Sinatra::NotFound
69
77
  end
70
78
  }
71
- lambda { get '/' }.should.not.raise Sinatra::NotFound
72
- status.should.equal 404
79
+ assert_nothing_raised { get '/' }
80
+ assert_equal 404, status
73
81
  end
74
82
 
75
83
  class FooNotFound < Sinatra::NotFound
@@ -83,11 +91,22 @@ describe 'Exception Mappings' do
83
91
  raise FooNotFound
84
92
  end
85
93
  }
86
- lambda { get '/' }.should.not.raise FooNotFound
87
- status.should.equal 404
88
- body.should.equal 'foo! not found.'
94
+ assert_nothing_raised { get '/' }
95
+ assert_equal 404, status
96
+ assert_equal 'foo! not found.', body
89
97
  end
90
98
 
99
+ it 'has a not_found method for backwards compatibility' do
100
+ mock_app {
101
+ not_found do
102
+ "Lost, are we?"
103
+ end
104
+ }
105
+
106
+ get '/test'
107
+ assert_equal 404, status
108
+ assert_equal "Lost, are we?", body
109
+ end
91
110
  end
92
111
 
93
112
  describe 'Custom Error Pages' do
@@ -100,8 +119,8 @@ describe 'Custom Error Pages' do
100
119
  end
101
120
  }
102
121
  get '/'
103
- status.should.equal 500
104
- body.should.equal 'Foo!'
122
+ assert_equal 500, status
123
+ assert_equal 'Foo!', body
105
124
  end
106
125
 
107
126
  it 'allows ranges of status code mappings to be registered with :error' do
@@ -113,8 +132,8 @@ describe 'Custom Error Pages' do
113
132
  end
114
133
  }
115
134
  get '/'
116
- status.should.equal 507
117
- body.should.equal 'Error: 507'
135
+ assert_equal 507, status
136
+ assert_equal 'Error: 507', body
118
137
  end
119
138
 
120
139
  class FooError < RuntimeError
@@ -135,7 +154,7 @@ describe 'Custom Error Pages' do
135
154
  end
136
155
  }
137
156
  get '/'
138
- status.should.equal 502
139
- body.should.equal 'from custom error page'
157
+ assert_equal 502, status
158
+ assert_equal 'from custom error page', body
140
159
  end
141
160
  end