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.
@@ -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('TestViewHandler')
12
+ @proxy = Deas::RouteProxy.new('EmptyViewHandler')
12
13
  end
13
14
  subject{ @proxy }
14
15
 
15
- should have_reader :handler_class_name
16
- should have_imeths :handler_class
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 'TestViewHandler', subject.handler_class_name
20
+ assert_equal 'EmptyViewHandler', subject.handler_class_name
20
21
  end
21
22
 
22
- should "know its handler class" do
23
- assert_equal TestViewHandler, subject.handler_class
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').handler_class
32
+ Deas::RouteProxy.new('SomethingNotDefined').validate!
29
33
  end
30
34
  end
31
35
 
@@ -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
- @handler_proxy = Deas::RouteProxy.new('TestViewHandler')
12
- @route = Deas::Route.new(:get, '/test', @handler_proxy)
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, :handler_proxy, :handler_class
19
+ should have_readers :method, :path, :route_proxy, :handler_class
17
20
  should have_imeths :validate!, :run
18
21
 
19
- should "know its method and path and handler_proxy" do
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 @handler_proxy, subject.handler_proxy
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 TestViewHandler, subject.handler_class
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
@@ -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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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.handler_proxy.handler_class_name
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
@@ -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
- @runner = Deas::Runner.new(TestViewHandler)
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, :partial, :send_file
29
+ should have_imeths :render, :send_file
20
30
 
21
31
  should "know its handler and handler class" do
22
- assert_equal TestViewHandler, subject.handler_class
32
+ assert_equal EmptyViewHandler, subject.handler_class
23
33
  assert_instance_of subject.handler_class, subject.handler
24
34
  end
25
35
 
26
- should "not set any settings" do
36
+ should "default its settings" do
27
37
  assert_nil subject.request
28
38
  assert_nil subject.response
29
- assert_nil subject.params
30
- assert_nil subject.logger
31
- assert_nil subject.router
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