thumblemonks-chicago 0.3.1 → 0.3.2
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.
- 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
|