thumblemonks-chicago 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +7 -1
- data/Rakefile +6 -6
- data/chicago.gemspec +4 -2
- data/lib/chicago/protest/macros.rb +34 -0
- data/lib/chicago/protest.rb +1 -0
- data/test/application_test.rb +14 -16
- data/test/helpers_test.rb +26 -26
- data/test/responders_test.rb +4 -4
- data/test/test_helper.rb +6 -2
- metadata +4 -2
data/README.markdown
CHANGED
@@ -31,7 +31,13 @@ Assuming you have required 'rack/test', like so:
|
|
31
31
|
|
32
32
|
require 'rack/test'
|
33
33
|
|
34
|
-
This is because these macros use last_request defined by the Rack/Test library. If you're using
|
34
|
+
This is because these macros use last_request defined by the Rack/Test library. If you're using [Protest](http://github.com/thumblemonks/protest) in your tests of your Sinatra app, do this:
|
35
|
+
|
36
|
+
require 'chicago/protest'
|
37
|
+
|
38
|
+
... and you'll get a bunch of cool Protest macros for testing specific Sinatra stuff.
|
39
|
+
|
40
|
+
If you're using Shoulda in your tests of your Sinatra app, do this:
|
35
41
|
|
36
42
|
require 'chicago/shoulda'
|
37
43
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
-
require 'rake/testtask'
|
4
3
|
|
5
4
|
desc 'Default task: run all tests'
|
6
5
|
task :default => [:test]
|
@@ -11,11 +10,12 @@ task :environment do
|
|
11
10
|
# Nothing yet
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
desc "Run all tests"
|
14
|
+
task :test => [:set_test_env, :environment] do
|
15
|
+
require 'protest'
|
16
|
+
$:.concat ['./lib', './test']
|
17
|
+
Dir.glob("./test/*_test.rb").each { |test| require test }
|
18
|
+
Protest.run
|
19
19
|
end
|
20
20
|
|
21
21
|
desc "Open an irb session preloaded with this library"
|
data/chicago.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "chicago"
|
3
|
-
s.version = "0.3.
|
4
|
-
s.date = "2009-06-
|
3
|
+
s.version = "0.3.2"
|
4
|
+
s.date = "2009-06-28"
|
5
5
|
s.summary = "Sinatra runtime and testing extensions used commonly by Thumblemonks"
|
6
6
|
s.email = %w[gus@gusg.us gabriel.gironda@gmail.com]
|
7
7
|
s.homepage = "http://github.com/thumblemonks/chicago/tree/master"
|
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
|
|
22
22
|
lib/chicago.rb
|
23
23
|
lib/chicago/application.rb
|
24
24
|
lib/chicago/helpers.rb
|
25
|
+
lib/chicago/protest.rb
|
26
|
+
lib/chicago/protest/macros.rb
|
25
27
|
lib/chicago/responders.rb
|
26
28
|
lib/chicago/shoulda.rb
|
27
29
|
lib/chicago/shoulda/sinatra.rb
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Chicago
|
4
|
+
module Protest
|
5
|
+
module Macros
|
6
|
+
def asserts_response_status(expected)
|
7
|
+
asserts("response status").equals(expected) { last_response.status }
|
8
|
+
end
|
9
|
+
|
10
|
+
def asserts_content_type(expected)
|
11
|
+
asserts("content type").equals(expected) { last_response.headers['Content-type'] }
|
12
|
+
end
|
13
|
+
|
14
|
+
def asserts_response_body(expected)
|
15
|
+
# TODO: implement a matches operator
|
16
|
+
asserts("response body").not do
|
17
|
+
expected = %r[#{expected}] if expected.kind_of?(String)
|
18
|
+
expected.match(last_response.body).nil?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def asserts_json_response(json, &block)
|
23
|
+
asserts_content_type 'application/json'
|
24
|
+
asserts("response body has JSON") do
|
25
|
+
json = json.to_json unless json.instance_of?(String)
|
26
|
+
last_response.body == json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end # Macros
|
31
|
+
end # Protest
|
32
|
+
end # Chicago
|
33
|
+
|
34
|
+
Protest::Context.instance_eval { include Chicago::Protest::Macros }
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'chicago/protest/macros'
|
data/test/application_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
|
3
|
+
context "ApplicationTest:" do
|
4
4
|
|
5
|
-
|
5
|
+
setup do
|
6
6
|
mock_app {
|
7
7
|
register Sinatra::Chicago
|
8
8
|
|
@@ -17,15 +17,16 @@ class ApplicationTest < Test::Unit::TestCase
|
|
17
17
|
}
|
18
18
|
end
|
19
19
|
|
20
|
+
# TODO: change to namespace
|
20
21
|
context "catching all css" do
|
21
22
|
context "with default path" do
|
22
23
|
setup do
|
23
24
|
get '/stylesheets/foo.css'
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
asserts_response_status 200
|
28
|
+
asserts_content_type 'text/css'
|
29
|
+
asserts_response_body %r[.bar \{\s+display: none; \}\s]
|
29
30
|
end
|
30
31
|
|
31
32
|
context "with specified path" do
|
@@ -33,9 +34,9 @@ class ApplicationTest < Test::Unit::TestCase
|
|
33
34
|
get '/css/goo.css'
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
asserts_response_status 200
|
38
|
+
asserts_content_type 'text/css'
|
39
|
+
asserts_response_body %r[.car \{\s+display: some; \}\s]
|
39
40
|
end
|
40
41
|
|
41
42
|
context "with path that's not a defined a sass file" do
|
@@ -43,17 +44,14 @@ class ApplicationTest < Test::Unit::TestCase
|
|
43
44
|
get '/stylesheets/zoo.css'
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
-
|
47
|
+
asserts_response_status 404
|
48
|
+
asserts_content_type 'text/html'
|
48
49
|
end
|
49
50
|
end # catching all css
|
50
51
|
|
51
52
|
context "getting obvious views" do
|
52
|
-
setup
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
should_have_response_body "Whatever man. That's just like, your opinion."
|
57
|
-
end
|
53
|
+
setup { get '/baz' }
|
54
|
+
asserts_response_body "Whatever man. That's just like, your opinion."
|
55
|
+
end # getting obvious views
|
58
56
|
|
59
57
|
end
|
data/test/helpers_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
context "HelpersTest:" do
|
4
|
+
setup do
|
5
5
|
mock_app {
|
6
6
|
helpers Sinatra::Chicago::Helpers
|
7
7
|
}
|
@@ -17,11 +17,11 @@ class HelpersTest < Test::Unit::TestCase
|
|
17
17
|
get '/foo'
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
asserts_response_body %r[^<link( \w+=".+"){4}/>$]
|
21
|
+
asserts_response_body %r[href="/stylesheets/foo\.css"]
|
22
|
+
asserts_response_body %r[media="screen"]
|
23
|
+
asserts_response_body %r[rel="stylesheet"]
|
24
|
+
asserts_response_body %r[type="text/css"]
|
25
25
|
end # for plain old foo
|
26
26
|
|
27
27
|
context "for bar with options" do
|
@@ -33,12 +33,12 @@ class HelpersTest < Test::Unit::TestCase
|
|
33
33
|
get '/foo'
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
asserts_response_body %r[^<link( \w+=".+"){5}/>$]
|
37
|
+
asserts_response_body %r[href="/stylesheets/bar\.css"]
|
38
|
+
asserts_response_body %r[media="print"]
|
39
|
+
asserts_response_body %r[rel="stylesheet"]
|
40
|
+
asserts_response_body %r[type="text/css"]
|
41
|
+
asserts_response_body %r[baz="boo"]
|
42
42
|
end # for bar with options
|
43
43
|
|
44
44
|
context "with a specific href" do
|
@@ -49,7 +49,7 @@ class HelpersTest < Test::Unit::TestCase
|
|
49
49
|
}
|
50
50
|
get '/foo'
|
51
51
|
end
|
52
|
-
|
52
|
+
asserts_response_body %r[href="http://example.com"]
|
53
53
|
end # with a specific href
|
54
54
|
end # including stylesheets
|
55
55
|
|
@@ -63,9 +63,9 @@ class HelpersTest < Test::Unit::TestCase
|
|
63
63
|
get '/foo'
|
64
64
|
end
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
asserts_response_body %r[^<script( \w+=".+"){2}></script>$]
|
67
|
+
asserts_response_body %r[src="/javascripts/foo\.js"]
|
68
|
+
asserts_response_body %r[type="text/javascript"]
|
69
69
|
end # for plain old foo
|
70
70
|
|
71
71
|
context "for foo with options" do
|
@@ -77,10 +77,10 @@ class HelpersTest < Test::Unit::TestCase
|
|
77
77
|
get '/foo'
|
78
78
|
end
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
80
|
+
asserts_response_body %r[^<script( \w+=".+"){3}></script>$]
|
81
|
+
asserts_response_body %r[src="/javascripts/foo\.js"]
|
82
|
+
asserts_response_body %r[type="text/blarg"]
|
83
|
+
asserts_response_body %r[gus="nice"]
|
84
84
|
end # for foo with options
|
85
85
|
|
86
86
|
context "with a specific src" do
|
@@ -91,7 +91,7 @@ class HelpersTest < Test::Unit::TestCase
|
|
91
91
|
}
|
92
92
|
get '/foo'
|
93
93
|
end
|
94
|
-
|
94
|
+
asserts_response_body %r[src="http://example.com"]
|
95
95
|
end # with a specific src
|
96
96
|
end # including javascript
|
97
97
|
|
@@ -105,7 +105,7 @@ class HelpersTest < Test::Unit::TestCase
|
|
105
105
|
get '/foo'
|
106
106
|
end
|
107
107
|
|
108
|
-
|
108
|
+
asserts_response_body %Q[<a href="/bar">foo</a>]
|
109
109
|
end # for plain old foo
|
110
110
|
|
111
111
|
context "with options" do
|
@@ -117,9 +117,9 @@ class HelpersTest < Test::Unit::TestCase
|
|
117
117
|
get '/foo'
|
118
118
|
end
|
119
119
|
|
120
|
-
|
121
|
-
|
122
|
-
|
120
|
+
asserts_response_body %r[^<a( \w+=".+"){2}>foo bear</a>$]
|
121
|
+
asserts_response_body %r[href="/bar/ler"]
|
122
|
+
asserts_response_body %r[title="gus is nice"]
|
123
123
|
end # with options
|
124
124
|
end # using an anchor
|
125
125
|
end
|
data/test/responders_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
|
-
|
3
|
+
context "RespondersTest" do
|
4
4
|
|
5
|
-
|
5
|
+
setup do
|
6
6
|
mock_app {
|
7
7
|
helpers Sinatra::Chicago::Responders
|
8
8
|
get "/json_bait" do
|
@@ -17,8 +17,8 @@ class RespondersTest < Test::Unit::TestCase
|
|
17
17
|
get "/json_bait"
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
asserts_response_status 201
|
21
|
+
asserts_json_response({:foo => :bar})
|
22
22
|
end # json response
|
23
23
|
|
24
24
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
%w[ rubygems haml sass chicago
|
1
|
+
%w[ rubygems protest haml sass chicago rack/test chicago/protest ].each do |lib|
|
2
2
|
require lib
|
3
3
|
end
|
4
4
|
|
@@ -14,8 +14,12 @@ module Rack::Test::Methods
|
|
14
14
|
@_rack_test_session ||= Rack::Test::Session.new(app)
|
15
15
|
@app.instance_eval(&block)
|
16
16
|
end
|
17
|
+
|
18
|
+
def app
|
19
|
+
@app
|
20
|
+
end
|
17
21
|
end
|
18
22
|
|
19
|
-
class
|
23
|
+
class Protest::Context
|
20
24
|
include Rack::Test::Methods
|
21
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thumblemonks-chicago
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Knowlden
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-06-
|
13
|
+
date: 2009-06-28 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -34,6 +34,8 @@ files:
|
|
34
34
|
- lib/chicago.rb
|
35
35
|
- lib/chicago/application.rb
|
36
36
|
- lib/chicago/helpers.rb
|
37
|
+
- lib/chicago/protest.rb
|
38
|
+
- lib/chicago/protest/macros.rb
|
37
39
|
- lib/chicago/responders.rb
|
38
40
|
- lib/chicago/shoulda.rb
|
39
41
|
- lib/chicago/shoulda/sinatra.rb
|