deas 0.26.0 → 0.27.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.
- 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
|
|