deas 0.26.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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