deas 0.26.0 → 0.27.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/deas/deas_runner.rb +34 -0
- data/lib/deas/redirect_proxy.rb +4 -0
- data/lib/deas/route.rb +16 -6
- data/lib/deas/route_proxy.rb +3 -3
- data/lib/deas/runner.rb +10 -2
- data/lib/deas/sinatra_runner.rb +15 -45
- data/lib/deas/template.rb +3 -3
- data/lib/deas/test_runner.rb +13 -20
- data/lib/deas/version.rb +1 -1
- data/lib/deas/view_handler.rb +0 -2
- data/test/support/fake_sinatra_call.rb +17 -3
- data/test/support/routes.rb +0 -9
- data/test/support/view_handlers.rb +15 -46
- data/test/system/rack_tests.rb +0 -8
- data/test/unit/deas_runner_tests.rb +97 -0
- data/test/unit/redirect_proxy_tests.rb +3 -1
- data/test/unit/route_proxy_tests.rb +12 -8
- data/test/unit/route_tests.rb +92 -8
- data/test/unit/router_tests.rb +9 -9
- data/test/unit/runner_tests.rb +22 -8
- data/test/unit/server_configuration_tests.rb +2 -2
- data/test/unit/sinatra_app_tests.rb +1 -1
- data/test/unit/sinatra_runner_tests.rb +21 -82
- data/test/unit/template_tests.rb +5 -0
- data/test/unit/test_runner_tests.rb +22 -32
- data/test/unit/view_handler_tests.rb +74 -54
- metadata +7 -4
data/test/system/rack_tests.rb
CHANGED
@@ -96,13 +96,6 @@ module Deas
|
|
96
96
|
assert_equal expected_body, last_response.body
|
97
97
|
end
|
98
98
|
|
99
|
-
should "render partial templates" do
|
100
|
-
get '/partial.html'
|
101
|
-
expected_body = "Stuff: some-info\n"
|
102
|
-
assert_equal 200, last_response.status
|
103
|
-
assert_equal expected_body, last_response.body
|
104
|
-
end
|
105
|
-
|
106
99
|
should "return a 302 redirecting to the expected locations" do
|
107
100
|
get '/redirect'
|
108
101
|
expected_location = 'http://google.com'
|
@@ -158,7 +151,6 @@ module Deas
|
|
158
151
|
end
|
159
152
|
|
160
153
|
should "be able to access sinatra call data" do
|
161
|
-
assert_equal 'something', @data['app_settings_a_setting']
|
162
154
|
assert_equal 'Logger', @data['logger_class_name']
|
163
155
|
assert_equal 'GET', @data['request_method']
|
164
156
|
assert_equal 'Content-Type', @data['response_firstheaderval']
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'deas/deas_runner'
|
3
|
+
|
4
|
+
require 'deas/runner'
|
5
|
+
require 'test/support/normalized_params_spy'
|
6
|
+
require 'test/support/view_handlers'
|
7
|
+
|
8
|
+
class Deas::DeasRunner
|
9
|
+
|
10
|
+
class UnitTests < Assert::Context
|
11
|
+
desc "Deas::DeasRunner"
|
12
|
+
setup do
|
13
|
+
@runner_class = Deas::DeasRunner
|
14
|
+
end
|
15
|
+
subject{ @runner_class }
|
16
|
+
|
17
|
+
should "be a `Runner`" do
|
18
|
+
assert subject < Deas::Runner
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
class InitTests < UnitTests
|
24
|
+
desc "when init"
|
25
|
+
setup do
|
26
|
+
@params = { 'value' => '1' }
|
27
|
+
@norm_params_spy = Deas::Runner::NormalizedParamsSpy.new
|
28
|
+
Assert.stub(NormalizedParams, :new){ |p| @norm_params_spy.new(p) }
|
29
|
+
|
30
|
+
@runner = @runner_class.new(DeasRunnerViewHandler, :params => @params)
|
31
|
+
end
|
32
|
+
subject{ @runner }
|
33
|
+
|
34
|
+
should have_imeths :run
|
35
|
+
|
36
|
+
should "super its params arg" do
|
37
|
+
assert_equal @params, subject.params
|
38
|
+
end
|
39
|
+
|
40
|
+
should "call to normalize its params" do
|
41
|
+
assert_equal @params, @norm_params_spy.params
|
42
|
+
assert_true @norm_params_spy.value_called
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
class RunTests < InitTests
|
48
|
+
desc "and run"
|
49
|
+
setup do
|
50
|
+
@return_value = @runner.run
|
51
|
+
@handler = @runner.instance_variable_get("@handler")
|
52
|
+
end
|
53
|
+
subject{ @handler }
|
54
|
+
|
55
|
+
should "run the before and after hooks" do
|
56
|
+
assert_equal true, subject.before_called
|
57
|
+
assert_equal true, subject.after_called
|
58
|
+
end
|
59
|
+
|
60
|
+
should "run the handler's init and run" do
|
61
|
+
assert_equal true, subject.init_bang_called
|
62
|
+
assert_equal true, subject.run_bang_called
|
63
|
+
end
|
64
|
+
|
65
|
+
should "return the handler's run! return value" do
|
66
|
+
assert_equal true, @return_value
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class NormalizedParamsTests < UnitTests
|
72
|
+
desc "NormalizedParams"
|
73
|
+
setup do
|
74
|
+
@norm_params_class = Deas::SinatraRunner::NormalizedParams
|
75
|
+
end
|
76
|
+
|
77
|
+
should "be a normalized params subclass" do
|
78
|
+
assert @norm_params_class < Deas::Runner::NormalizedParams
|
79
|
+
end
|
80
|
+
|
81
|
+
should "not convert Tempfile param values to strings" do
|
82
|
+
tempfile = Class.new(::Tempfile){ def initialize; end }.new
|
83
|
+
params = normalized({
|
84
|
+
'attachment' => { :tempfile => tempfile }
|
85
|
+
})
|
86
|
+
assert_kind_of ::Tempfile, params['attachment']['tempfile']
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def normalized(params)
|
92
|
+
@norm_params_class.new(params).value
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require 'deas/test_helpers'
|
3
2
|
require 'deas/redirect_proxy'
|
4
3
|
|
4
|
+
require 'deas/test_helpers'
|
5
|
+
|
5
6
|
class Deas::RedirectProxy
|
6
7
|
|
7
8
|
class UnitTests < Assert::Context
|
@@ -12,6 +13,7 @@ class Deas::RedirectProxy
|
|
12
13
|
subject{ @proxy }
|
13
14
|
|
14
15
|
should have_readers :handler_class_name, :handler_class
|
16
|
+
should have_imeths :validate!
|
15
17
|
|
16
18
|
should "know its handler class name" do
|
17
19
|
assert_equal subject.handler_class.name, subject.handler_class_name
|
@@ -1,31 +1,35 @@
|
|
1
1
|
require 'assert'
|
2
|
+
require 'deas/route_proxy'
|
3
|
+
|
2
4
|
require 'deas/test_helpers'
|
3
5
|
require 'test/support/view_handlers'
|
4
|
-
require 'deas/route_proxy'
|
5
6
|
|
6
7
|
class Deas::RouteProxy
|
7
8
|
|
8
9
|
class UnitTests < Assert::Context
|
9
10
|
desc "Deas::RouteProxy"
|
10
11
|
setup do
|
11
|
-
@proxy = Deas::RouteProxy.new('
|
12
|
+
@proxy = Deas::RouteProxy.new('EmptyViewHandler')
|
12
13
|
end
|
13
14
|
subject{ @proxy }
|
14
15
|
|
15
|
-
should
|
16
|
-
should have_imeths :
|
16
|
+
should have_readers :handler_class_name, :handler_class
|
17
|
+
should have_imeths :validate!
|
17
18
|
|
18
19
|
should "know its handler class name" do
|
19
|
-
assert_equal '
|
20
|
+
assert_equal 'EmptyViewHandler', subject.handler_class_name
|
20
21
|
end
|
21
22
|
|
22
|
-
should "
|
23
|
-
|
23
|
+
should "set its handler class on `validate!`" do
|
24
|
+
assert_nil subject.handler_class
|
25
|
+
|
26
|
+
assert_nothing_raised{ subject.validate! }
|
27
|
+
assert_equal EmptyViewHandler, subject.handler_class
|
24
28
|
end
|
25
29
|
|
26
30
|
should "complain if there is no handler class with the given name" do
|
27
31
|
assert_raises(Deas::NoHandlerClassError) do
|
28
|
-
Deas::RouteProxy.new('SomethingNotDefined').
|
32
|
+
Deas::RouteProxy.new('SomethingNotDefined').validate!
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
data/test/unit/route_tests.rb
CHANGED
@@ -1,32 +1,35 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require 'test/support/view_handlers'
|
3
|
-
require 'deas/route_proxy'
|
4
2
|
require 'deas/route'
|
5
3
|
|
4
|
+
require 'deas/sinatra_runner'
|
5
|
+
require 'deas/route_proxy'
|
6
|
+
require 'test/support/fake_sinatra_call'
|
7
|
+
require 'test/support/view_handlers'
|
8
|
+
|
6
9
|
class Deas::Route
|
7
10
|
|
8
11
|
class UnitTests < Assert::Context
|
9
12
|
desc "Deas::Route"
|
10
13
|
setup do
|
11
|
-
@
|
12
|
-
@route = Deas::Route.new(:get, '/test', @
|
14
|
+
@route_proxy = Deas::RouteProxy.new('EmptyViewHandler')
|
15
|
+
@route = Deas::Route.new(:get, '/test', @route_proxy)
|
13
16
|
end
|
14
17
|
subject{ @route }
|
15
18
|
|
16
|
-
should have_readers :method, :path, :
|
19
|
+
should have_readers :method, :path, :route_proxy, :handler_class
|
17
20
|
should have_imeths :validate!, :run
|
18
21
|
|
19
|
-
should "know its method
|
22
|
+
should "know its method, path and route proxy" do
|
20
23
|
assert_equal :get, subject.method
|
21
24
|
assert_equal '/test', subject.path
|
22
|
-
assert_equal @
|
25
|
+
assert_equal @route_proxy, subject.route_proxy
|
23
26
|
end
|
24
27
|
|
25
28
|
should "set its handler class on `validate!`" do
|
26
29
|
assert_nil subject.handler_class
|
27
30
|
|
28
31
|
assert_nothing_raised{ subject.validate! }
|
29
|
-
assert_equal
|
32
|
+
assert_equal EmptyViewHandler, subject.handler_class
|
30
33
|
end
|
31
34
|
|
32
35
|
should "complain given an invalid handler class" do
|
@@ -38,4 +41,85 @@ class Deas::Route
|
|
38
41
|
|
39
42
|
end
|
40
43
|
|
44
|
+
class RunTests < UnitTests
|
45
|
+
desc "when run"
|
46
|
+
setup do
|
47
|
+
@fake_sinatra_call = FakeSinatraCall.new
|
48
|
+
@runner_spy = SinatraRunnerSpy.new
|
49
|
+
Assert.stub(Deas::SinatraRunner, :new) do |*args|
|
50
|
+
@runner_spy.build(*args)
|
51
|
+
@runner_spy
|
52
|
+
end
|
53
|
+
|
54
|
+
@route.validate!
|
55
|
+
@route.run(@fake_sinatra_call)
|
56
|
+
end
|
57
|
+
|
58
|
+
should "build and run a sinatra runner" do
|
59
|
+
assert_equal subject.handler_class, @runner_spy.handler_class
|
60
|
+
|
61
|
+
exp_args = {
|
62
|
+
:sinatra_call => @fake_sinatra_call,
|
63
|
+
:request => @fake_sinatra_call.request,
|
64
|
+
:response => @fake_sinatra_call.response,
|
65
|
+
:params => @fake_sinatra_call.params,
|
66
|
+
:logger => @fake_sinatra_call.settings.logger,
|
67
|
+
:router => @fake_sinatra_call.settings.router,
|
68
|
+
:session => @fake_sinatra_call.session
|
69
|
+
}
|
70
|
+
assert_equal exp_args, @runner_spy.args
|
71
|
+
|
72
|
+
assert_true @runner_spy.run_called
|
73
|
+
end
|
74
|
+
|
75
|
+
should "add the runner params to the request env" do
|
76
|
+
exp = @runner_spy.params
|
77
|
+
assert_equal exp, @fake_sinatra_call.request.env['deas.params']
|
78
|
+
end
|
79
|
+
|
80
|
+
should "add the handler class name to the request env" do
|
81
|
+
exp = subject.handler_class.name
|
82
|
+
assert_equal exp, @fake_sinatra_call.request.env['deas.handler_class_name']
|
83
|
+
end
|
84
|
+
|
85
|
+
should "log the handler and params" do
|
86
|
+
exp_msgs = [
|
87
|
+
" Handler: #{subject.handler_class}",
|
88
|
+
" Params: #{@runner_spy.params.inspect}"
|
89
|
+
]
|
90
|
+
assert_equal exp_msgs, @fake_sinatra_call.request.logging_msgs
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
class SinatraRunnerSpy
|
96
|
+
|
97
|
+
attr_reader :run_called
|
98
|
+
attr_reader :handler_class, :args
|
99
|
+
attr_reader :sinatra_call
|
100
|
+
attr_reader :request, :response, :params
|
101
|
+
attr_reader :logger, :router, :session
|
102
|
+
|
103
|
+
def initialize
|
104
|
+
@run_called = false
|
105
|
+
end
|
106
|
+
|
107
|
+
def build(handler_class, args)
|
108
|
+
@handler_class, @args = handler_class, args
|
109
|
+
|
110
|
+
@sinatra_call = args[:sinatra_call]
|
111
|
+
@request = args[:request]
|
112
|
+
@response = args[:response]
|
113
|
+
@params = args[:params]
|
114
|
+
@logger = args[:logger]
|
115
|
+
@router = args[:router]
|
116
|
+
@session = args[:session]
|
117
|
+
end
|
118
|
+
|
119
|
+
def run
|
120
|
+
@run_called = true
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
41
125
|
end
|
data/test/unit/router_tests.rb
CHANGED
@@ -30,7 +30,7 @@ class Deas::Router
|
|
30
30
|
assert_instance_of Deas::Route, route
|
31
31
|
assert_equal :get, route.method
|
32
32
|
assert_equal '/things', route.path
|
33
|
-
assert_equal 'ListThings', route.
|
33
|
+
assert_equal 'ListThings', route.route_proxy.handler_class_name
|
34
34
|
end
|
35
35
|
|
36
36
|
should "add a POST route using #post" do
|
@@ -40,7 +40,7 @@ class Deas::Router
|
|
40
40
|
assert_instance_of Deas::Route, route
|
41
41
|
assert_equal :post, route.method
|
42
42
|
assert_equal '/things', route.path
|
43
|
-
assert_equal 'CreateThing', route.
|
43
|
+
assert_equal 'CreateThing', route.route_proxy.handler_class_name
|
44
44
|
end
|
45
45
|
|
46
46
|
should "add a PUT route using #put" do
|
@@ -50,7 +50,7 @@ class Deas::Router
|
|
50
50
|
assert_instance_of Deas::Route, route
|
51
51
|
assert_equal :put, route.method
|
52
52
|
assert_equal '/things/:id', route.path
|
53
|
-
assert_equal 'UpdateThing', route.
|
53
|
+
assert_equal 'UpdateThing', route.route_proxy.handler_class_name
|
54
54
|
end
|
55
55
|
|
56
56
|
should "add a PATCH route using #patch" do
|
@@ -60,7 +60,7 @@ class Deas::Router
|
|
60
60
|
assert_instance_of Deas::Route, route
|
61
61
|
assert_equal :patch, route.method
|
62
62
|
assert_equal '/things/:id', route.path
|
63
|
-
assert_equal 'UpdateThing', route.
|
63
|
+
assert_equal 'UpdateThing', route.route_proxy.handler_class_name
|
64
64
|
end
|
65
65
|
|
66
66
|
should "add a DELETE route using #delete" do
|
@@ -70,7 +70,7 @@ class Deas::Router
|
|
70
70
|
assert_instance_of Deas::Route, route
|
71
71
|
assert_equal :delete, route.method
|
72
72
|
assert_equal '/things/:id', route.path
|
73
|
-
assert_equal 'DeleteThing', route.
|
73
|
+
assert_equal 'DeleteThing', route.route_proxy.handler_class_name
|
74
74
|
end
|
75
75
|
|
76
76
|
should "allow defining any kind of route using #route" do
|
@@ -80,7 +80,7 @@ class Deas::Router
|
|
80
80
|
assert_instance_of Deas::Route, route
|
81
81
|
assert_equal :options, route.method
|
82
82
|
assert_equal '/get_info', route.path
|
83
|
-
assert_equal 'GetInfo', route.
|
83
|
+
assert_equal 'GetInfo', route.route_proxy.handler_class_name
|
84
84
|
end
|
85
85
|
|
86
86
|
should "set a view handler namespace and use it when defining routes" do
|
@@ -89,11 +89,11 @@ class Deas::Router
|
|
89
89
|
|
90
90
|
# should use the ns
|
91
91
|
route = subject.route(:get, '/ns_test', 'NsTest')
|
92
|
-
assert_equal 'MyStuff::NsTest', route.
|
92
|
+
assert_equal 'MyStuff::NsTest', route.route_proxy.handler_class_name
|
93
93
|
|
94
94
|
# should ignore the ns when the leading colons are present
|
95
95
|
route = subject.route(:post, '/no_ns_test', '::NoNsTest')
|
96
|
-
assert_equal '::NoNsTest', route.
|
96
|
+
assert_equal '::NoNsTest', route.route_proxy.handler_class_name
|
97
97
|
end
|
98
98
|
|
99
99
|
should "set a base url" do
|
@@ -130,7 +130,7 @@ class Deas::Router
|
|
130
130
|
assert_instance_of Deas::Route, route
|
131
131
|
assert_equal :get, route.method
|
132
132
|
assert_equal '/invalid', route.path
|
133
|
-
assert_equal 'Deas::RedirectHandler', route.
|
133
|
+
assert_equal 'Deas::RedirectHandler', route.route_proxy.handler_class_name
|
134
134
|
|
135
135
|
route.validate!
|
136
136
|
assert_not_nil route.handler_class
|
data/test/unit/runner_tests.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'deas/runner'
|
3
3
|
|
4
|
+
require 'deas/router'
|
4
5
|
require 'test/support/view_handlers'
|
5
6
|
|
6
7
|
class Deas::Runner
|
@@ -8,7 +9,16 @@ class Deas::Runner
|
|
8
9
|
class UnitTests < Assert::Context
|
9
10
|
desc "Deas::Runner"
|
10
11
|
setup do
|
11
|
-
@
|
12
|
+
@runner_class = Deas::Runner
|
13
|
+
end
|
14
|
+
subject{ @runner_class }
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class InitTests < UnitTests
|
19
|
+
desc "when init"
|
20
|
+
setup do
|
21
|
+
@runner = @runner_class.new(EmptyViewHandler)
|
12
22
|
end
|
13
23
|
subject{ @runner }
|
14
24
|
|
@@ -16,22 +26,27 @@ class Deas::Runner
|
|
16
26
|
should have_readers :request, :response, :params
|
17
27
|
should have_readers :logger, :router, :session
|
18
28
|
should have_imeths :halt, :redirect, :content_type, :status, :headers
|
19
|
-
should have_imeths :render, :
|
29
|
+
should have_imeths :render, :send_file
|
20
30
|
|
21
31
|
should "know its handler and handler class" do
|
22
|
-
assert_equal
|
32
|
+
assert_equal EmptyViewHandler, subject.handler_class
|
23
33
|
assert_instance_of subject.handler_class, subject.handler
|
24
34
|
end
|
25
35
|
|
26
|
-
should "
|
36
|
+
should "default its settings" do
|
27
37
|
assert_nil subject.request
|
28
38
|
assert_nil subject.response
|
29
|
-
|
30
|
-
|
31
|
-
|
39
|
+
assert_kind_of ::Hash, subject.params
|
40
|
+
assert_kind_of Deas::NullLogger, subject.logger
|
41
|
+
assert_kind_of Deas::Router, subject.router
|
32
42
|
assert_nil subject.session
|
33
43
|
end
|
34
44
|
|
45
|
+
should "default its params" do
|
46
|
+
runner = @runner_class.new(TestRunnerViewHandler)
|
47
|
+
assert_equal ::Hash.new, runner.params
|
48
|
+
end
|
49
|
+
|
35
50
|
should "not implement any actions" do
|
36
51
|
assert_raises(NotImplementedError){ subject.halt }
|
37
52
|
assert_raises(NotImplementedError){ subject.redirect }
|
@@ -39,7 +54,6 @@ class Deas::Runner
|
|
39
54
|
assert_raises(NotImplementedError){ subject.status }
|
40
55
|
assert_raises(NotImplementedError){ subject.headers }
|
41
56
|
assert_raises(NotImplementedError){ subject.render }
|
42
|
-
assert_raises(NotImplementedError){ subject.partial }
|
43
57
|
assert_raises(NotImplementedError){ subject.send_file }
|
44
58
|
end
|
45
59
|
|