restrack 0.0.1
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/Gemfile +4 -0
- data/README.rdoc +71 -0
- data/Rakefile +32 -0
- data/bin/restrack +23 -0
- data/config/constants.yaml +8 -0
- data/lib/restrack/generator/constants.yaml.erb +24 -0
- data/lib/restrack/generator/controller.rb.erb +35 -0
- data/lib/restrack/generator/loader.rb.erb +21 -0
- data/lib/restrack/generator.rb +93 -0
- data/lib/restrack/http_status.rb +10 -0
- data/lib/restrack/resource_controller.rb +192 -0
- data/lib/restrack/resource_request.rb +135 -0
- data/lib/restrack/support.rb +56 -0
- data/lib/restrack/version.rb +3 -0
- data/lib/restrack/web_service.rb +66 -0
- data/lib/restrack.rb +24 -0
- data/restrack.gemspec +28 -0
- data/test/sample_app_1/config/constants.yaml +25 -0
- data/test/sample_app_1/controllers/bat_controller.rb +9 -0
- data/test/sample_app_1/controllers/baz_controller.rb +9 -0
- data/test/sample_app_1/controllers/baza_controller.rb +11 -0
- data/test/sample_app_1/controllers/bazu_controller.rb +16 -0
- data/test/sample_app_1/controllers/foo_bar_controller.rb +62 -0
- data/test/sample_app_1/loader.rb +31 -0
- data/test/sample_app_1/test/test_controller_actions.rb +122 -0
- data/test/sample_app_1/test/test_controller_modifiers.rb +153 -0
- data/test/sample_app_1/test/test_formats.rb +119 -0
- data/test/sample_app_1/test/test_resource_request.rb +160 -0
- data/test/sample_app_1/test/test_web_service.rb +27 -0
- data/test/sample_app_1/views/foo_bar/show.xml.builder +4 -0
- data/test/sample_app_2/config/constants.yaml +24 -0
- data/test/sample_app_2/controllers/bat_controller.rb +9 -0
- data/test/sample_app_2/controllers/baz_controller.rb +9 -0
- data/test/sample_app_2/controllers/baza_controller.rb +11 -0
- data/test/sample_app_2/controllers/bazu_controller.rb +8 -0
- data/test/sample_app_2/controllers/foo_bar_controller.rb +59 -0
- data/test/sample_app_2/loader.rb +31 -0
- data/test/sample_app_2/test/test_controller_modifiers.rb +121 -0
- data/test/sample_app_2/test/test_resource_request.rb +71 -0
- data/test/sample_app_2/views/foo_bar/show.xml.builder +4 -0
- data/test/sample_app_3/config/constants.yaml +24 -0
- data/test/sample_app_3/controllers/bat_controller.rb +9 -0
- data/test/sample_app_3/controllers/baz_controller.rb +9 -0
- data/test/sample_app_3/controllers/baza_controller.rb +11 -0
- data/test/sample_app_3/controllers/bazu_controller.rb +8 -0
- data/test/sample_app_3/controllers/foo_bar_controller.rb +59 -0
- data/test/sample_app_3/loader.rb +31 -0
- data/test/sample_app_3/test/test_resource_request.rb +42 -0
- data/test/sample_app_3/views/foo_bar/show.xml.builder +4 -0
- data/test/sample_app_4/config/constants.yaml +24 -0
- data/test/sample_app_4/controllers/bar_controller.rb +11 -0
- data/test/sample_app_4/controllers/baz_controller.rb +15 -0
- data/test/sample_app_4/controllers/foo_controller.rb +21 -0
- data/test/sample_app_4/loader.rb +31 -0
- data/test/sample_app_4/test/test_controller_modifiers.rb +28 -0
- data/test/sample_app_4/test/test_formats.rb +49 -0
- data/test/sample_app_4/views/alphatest.png +0 -0
- data/test/test_support.rb +20 -0
- data/test/test_web_service.rb +31 -0
- metadata +238 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','loader'))
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
class SampleApp::TestFormats < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@ws = SampleApp::WebService.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_show_builder_xml
|
14
|
+
env = Rack::MockRequest.env_for('/foo_bar/144.xml', {
|
15
|
+
:method => 'GET'
|
16
|
+
})
|
17
|
+
output = ''
|
18
|
+
assert_nothing_raised do
|
19
|
+
output = @ws.call(env)
|
20
|
+
end
|
21
|
+
test_val = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><data><foo>bar</foo><baz>123</baz></data>"
|
22
|
+
assert_equal test_val, output[2]
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_show_default_xml
|
26
|
+
env = Rack::MockRequest.env_for('/foo_bar/index.xml', {
|
27
|
+
:method => 'GET'
|
28
|
+
})
|
29
|
+
output = ''
|
30
|
+
assert_nothing_raised do
|
31
|
+
output = @ws.call(env)
|
32
|
+
end
|
33
|
+
test_val = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><data><foo>bar</foo><baz>123</baz></data>"
|
34
|
+
assert_equal test_val, output[2]
|
35
|
+
|
36
|
+
env = Rack::MockRequest.env_for('/foo_bar.xml', {
|
37
|
+
:method => 'GET'
|
38
|
+
})
|
39
|
+
output = ''
|
40
|
+
assert_nothing_raised do
|
41
|
+
output = @ws.call(env)
|
42
|
+
end
|
43
|
+
test_val = XmlSimple.xml_out([1,2,3,4,5,6,7])
|
44
|
+
assert_equal test_val, output[2]
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_show_json
|
48
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
49
|
+
:method => 'GET'
|
50
|
+
})
|
51
|
+
output = ''
|
52
|
+
assert_nothing_raised do
|
53
|
+
output = @ws.call(env)
|
54
|
+
end
|
55
|
+
test_val = { :foo => 'bar', :baz => 123 }.to_json
|
56
|
+
assert_equal test_val, output[2]
|
57
|
+
end
|
58
|
+
#
|
59
|
+
#def test_complex_data_structure
|
60
|
+
# env = Rack::MockRequest.env_for('/foo_bar/1234567890', {
|
61
|
+
# :method => 'GET'
|
62
|
+
# })
|
63
|
+
# output = ''
|
64
|
+
# assert_nothing_raised do
|
65
|
+
# output = @ws.call(env)
|
66
|
+
# end
|
67
|
+
# test_val = "{\"foo\":\"abc\",\"baz\":456,\"bar\":\"123\",\"more\":{\"two\":[1,2],\"three\":\"deep_fu\",\"one\":1}}"
|
68
|
+
# assert_equal test_val, output[2]
|
69
|
+
#
|
70
|
+
# env = Rack::MockRequest.env_for('/foo_bar/1234567890.xml', {
|
71
|
+
# :method => 'GET'
|
72
|
+
# })
|
73
|
+
# output = ''
|
74
|
+
# assert_nothing_raised do
|
75
|
+
# output = @ws.call(env)
|
76
|
+
# end
|
77
|
+
# test_val = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><data><foo>abc</foo><baz>456</baz><bar>123</bar><more><two></data>"
|
78
|
+
# assert_equal test_val, output[2]
|
79
|
+
#
|
80
|
+
# #env = Rack::MockRequest.env_for('/foo_bar/42', {
|
81
|
+
# # :method => 'GET'
|
82
|
+
# #})
|
83
|
+
# #output = ''
|
84
|
+
# #assert_nothing_raised do
|
85
|
+
# # output = @ws.call(env)
|
86
|
+
# #end
|
87
|
+
# ##test_val = {
|
88
|
+
# ## :foo => 'abc',
|
89
|
+
# ## :bar => 123,
|
90
|
+
# ## :baz => {
|
91
|
+
# ## 'one' => [1],
|
92
|
+
# ## 'two' => ['1','2'],
|
93
|
+
# ## 'three' => ['1', 2, {:three => 3}],
|
94
|
+
# ## 4 => :four
|
95
|
+
# ## }
|
96
|
+
# ##}.to_json
|
97
|
+
# #assert_equal test_val, output[2]
|
98
|
+
# #
|
99
|
+
# #env = Rack::MockRequest.env_for('/foo_bar/42.xml', {
|
100
|
+
# # :method => 'GET'
|
101
|
+
# #})
|
102
|
+
# #output = ''
|
103
|
+
# #assert_nothing_raised do
|
104
|
+
# # output = @ws.call(env)
|
105
|
+
# #end
|
106
|
+
# ##test_val = {
|
107
|
+
# ## :foo => 'abc',
|
108
|
+
# ## :bar => 123,
|
109
|
+
# ## :baz => {
|
110
|
+
# ## 'one' => [1],
|
111
|
+
# ## 'two' => ['1','2'],
|
112
|
+
# ## 'three' => ['1', 2, {:three => 3}],
|
113
|
+
# ## 4 => :four
|
114
|
+
# ## }
|
115
|
+
# ##}
|
116
|
+
# #assert_equal test_val, output[2]
|
117
|
+
#end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','loader'))
|
5
|
+
|
6
|
+
class SampleApp::TestResourceRequest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@ws = SampleApp::WebService.new # init logs
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_locate
|
13
|
+
env = Rack::MockRequest.env_for('/foo_bar', {
|
14
|
+
:method => 'POST',
|
15
|
+
:params => %Q|[
|
16
|
+
{
|
17
|
+
"bar": ""
|
18
|
+
}
|
19
|
+
]|
|
20
|
+
})
|
21
|
+
request = Rack::Request.new(env)
|
22
|
+
assert_nothing_raised do
|
23
|
+
resource_request = RESTRack::ResourceRequest.new(:request => request)
|
24
|
+
resource_request.locate
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_initialize
|
29
|
+
env = Rack::MockRequest.env_for('/foo_bar', {
|
30
|
+
:method => 'POST',
|
31
|
+
:params => %Q|[
|
32
|
+
{
|
33
|
+
"bar": "baz"
|
34
|
+
}
|
35
|
+
]|
|
36
|
+
})
|
37
|
+
request = Rack::Request.new(env)
|
38
|
+
assert_nothing_raised do
|
39
|
+
resource_request = RESTRack::ResourceRequest.new(:request => request)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_root_resource_accept
|
44
|
+
# These are the resources which can be accessed from the root of your web service. If left empty, all resources are available at the root.
|
45
|
+
#:ROOT_RESOURCE_ACCEPT: [ 'foo_bar' ]
|
46
|
+
|
47
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_ACCEPT] = [ 'foo_bar' ]
|
48
|
+
# This should not be allowed because it is not in ROOT_RESOURCE_ACCEPT
|
49
|
+
env = Rack::MockRequest.env_for('/bat/144', {
|
50
|
+
:method => 'GET'
|
51
|
+
})
|
52
|
+
output = ''
|
53
|
+
assert_nothing_raised do
|
54
|
+
output = @ws.call(env)
|
55
|
+
end
|
56
|
+
#test_val = [403, {"Content-Type"=>"text/plain"}, "HTTPStatus::HTTP403Forbidden\nYou are forbidden to access that resource."]
|
57
|
+
assert_equal 403, output[0]
|
58
|
+
|
59
|
+
# This should be allowed
|
60
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
61
|
+
:method => 'GET'
|
62
|
+
})
|
63
|
+
output = ''
|
64
|
+
assert_nothing_raised do
|
65
|
+
output = @ws.call(env)
|
66
|
+
end
|
67
|
+
assert_equal 200, output[0]
|
68
|
+
|
69
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_ACCEPT] = []
|
70
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
71
|
+
:method => 'GET'
|
72
|
+
})
|
73
|
+
output = ''
|
74
|
+
assert_nothing_raised do
|
75
|
+
output = @ws.call(env)
|
76
|
+
end
|
77
|
+
assert_equal 200, output[0]
|
78
|
+
|
79
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_ACCEPT] = nil
|
80
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
81
|
+
:method => 'GET'
|
82
|
+
})
|
83
|
+
output = ''
|
84
|
+
assert_nothing_raised do
|
85
|
+
output = @ws.call(env)
|
86
|
+
end
|
87
|
+
assert_equal 200, output[0]
|
88
|
+
|
89
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_ACCEPT] = [ 'foo_bar' ]
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def test_root_resource_denied
|
94
|
+
## These are the resources which cannot be accessed from the root of your web service. Use either this or ROOT_RESOURCE_ACCEPT as a blacklist or whitelist to establish routing (relationships defined in resource controllers define further routing).
|
95
|
+
#:ROOT_RESOURCE_DENY: [ 'baz' ]
|
96
|
+
env = Rack::MockRequest.env_for('/baz/144', {
|
97
|
+
:method => 'GET'
|
98
|
+
})
|
99
|
+
output = ''
|
100
|
+
assert_nothing_raised do
|
101
|
+
output = @ws.call(env)
|
102
|
+
end
|
103
|
+
#test_val = [403, {"Content-Type"=>"text/plain"}, "HTTPStatus::HTTP403Forbidden\nYou are forbidden to access that resource."]
|
104
|
+
assert_equal 403, output[0]
|
105
|
+
|
106
|
+
env = Rack::MockRequest.env_for('/bat/144', {
|
107
|
+
:method => 'GET'
|
108
|
+
})
|
109
|
+
assert_nothing_raised do
|
110
|
+
output = @ws.call(env)
|
111
|
+
end
|
112
|
+
assert_not_equal 200, output[0]
|
113
|
+
|
114
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_DENY] = []
|
115
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
116
|
+
:method => 'GET'
|
117
|
+
})
|
118
|
+
output = ''
|
119
|
+
assert_nothing_raised do
|
120
|
+
output = @ws.call(env)
|
121
|
+
end
|
122
|
+
assert_equal 200, output[0]
|
123
|
+
|
124
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_DENY] = nil
|
125
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
126
|
+
:method => 'GET'
|
127
|
+
})
|
128
|
+
output = ''
|
129
|
+
assert_nothing_raised do
|
130
|
+
output = @ws.call(env)
|
131
|
+
end
|
132
|
+
assert_equal 200, output[0]
|
133
|
+
|
134
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_DENY] = ['']
|
135
|
+
# it should handle this, although it is incorrect
|
136
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
137
|
+
:method => 'GET'
|
138
|
+
})
|
139
|
+
output = ''
|
140
|
+
assert_nothing_raised do
|
141
|
+
output = @ws.call(env)
|
142
|
+
end
|
143
|
+
assert_equal 200, output[0]
|
144
|
+
|
145
|
+
RESTRack::CONFIG[:ROOT_RESOURCE_DENY] = [ 'baz' ]
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_default_resource
|
149
|
+
# This should be handled by bazu_controller
|
150
|
+
env = Rack::MockRequest.env_for('/', {
|
151
|
+
:method => 'GET'
|
152
|
+
})
|
153
|
+
output = ''
|
154
|
+
assert_nothing_raised do
|
155
|
+
output = @ws.call(env)
|
156
|
+
end
|
157
|
+
assert_equal 403, output[0]
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','loader'))
|
5
|
+
|
6
|
+
class SampleApp::TestWebService < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@ws = SampleApp::WebService.new # init logs
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_service_name
|
13
|
+
env = Rack::MockRequest.env_for('/foo_bar', {
|
14
|
+
:method => 'POST',
|
15
|
+
:params => %Q|[
|
16
|
+
{
|
17
|
+
"bar": "baz"
|
18
|
+
}
|
19
|
+
]|
|
20
|
+
})
|
21
|
+
output = ''
|
22
|
+
output = @ws.call(env)
|
23
|
+
assert_nothing_raised do
|
24
|
+
RESTRack::CONFIG[:SERVICE_NAME].to_sym.to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#GENERATOR-CONST# -DO NOT REMOVE OR CHANGE THIS LINE- Application-Namespace => SampleApp
|
2
|
+
#
|
3
|
+
# = constants.yaml
|
4
|
+
# This is where RESTRack applications define the constants relevant to their particular
|
5
|
+
# application that are used by the RESTRack base classes.
|
6
|
+
|
7
|
+
# Application log path definition
|
8
|
+
:LOG: '/var/log/restrack/sample_app.log'
|
9
|
+
# Request log path definition
|
10
|
+
:REQUEST_LOG: '/var/log/restrack/sample_app.request.log'
|
11
|
+
|
12
|
+
# Logger object levels
|
13
|
+
:LOG_LEVEL: :WARN # Logger object level
|
14
|
+
:REQUEST_LOG_LEVEL: :WARN # Logger object level
|
15
|
+
|
16
|
+
# Supported formats are :JSON, :XML, :YAML, :BIN, :TEXT
|
17
|
+
:DEFAULT_FORMAT: :JSON
|
18
|
+
# The resource which will handle root level requests where the name is not specified. Best for users of this not to implement method_missing in their default controller, unless they are checking for bad URI.
|
19
|
+
:DEFAULT_RESOURCE: 'bazu'
|
20
|
+
|
21
|
+
# These are the resources which can be accessed from the root of your web service. If left empty, all resources are available at the root.
|
22
|
+
#:ROOT_RESOURCE_ACCEPT: []
|
23
|
+
# These are the resources which cannot be accessed from the root of your web service. Use either this or ROOT_RESOURCE_ACCEPT as a blacklist or whitelist to establish routing (relationships defined in resource controllers define further routing).
|
24
|
+
:ROOT_RESOURCE_DENY: [ 'baz' ]
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class SampleApp::FooBarController < RESTRack::ResourceController
|
2
|
+
|
3
|
+
has_direct_relationship_to( :baz ) do |id|
|
4
|
+
if id =='144'
|
5
|
+
output = '777'
|
6
|
+
else
|
7
|
+
output = '666'
|
8
|
+
end
|
9
|
+
output # You can't "return" from a Proc! It will do a "return" in the outer method. Remember a "Proc" is not a Method.
|
10
|
+
end
|
11
|
+
|
12
|
+
has_direct_relationship_to( :bat, :as => :slugger ) do |id|
|
13
|
+
if id =='144'
|
14
|
+
output = '777'
|
15
|
+
else
|
16
|
+
output = '666'
|
17
|
+
end
|
18
|
+
output # You can't "return" from a Proc! It will do a "return" in the outer method. Remember a "Proc" is not a Method.
|
19
|
+
end
|
20
|
+
|
21
|
+
has_direct_relationships_to( :baza, :as => :children ) do |id|
|
22
|
+
[1,2,3,4,5,6,7,8,9]
|
23
|
+
end
|
24
|
+
|
25
|
+
has_mapped_relationships_to( :bazu, :as => :maps ) do |id|
|
26
|
+
{
|
27
|
+
:first => 1,
|
28
|
+
:second => 2,
|
29
|
+
:third => 3
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def index
|
34
|
+
[1,2,3,4,5,6,7]
|
35
|
+
end
|
36
|
+
def create
|
37
|
+
{ :success => true }
|
38
|
+
end
|
39
|
+
def replace
|
40
|
+
{ :success => true }
|
41
|
+
end
|
42
|
+
def drop
|
43
|
+
{ :success => true }
|
44
|
+
end
|
45
|
+
|
46
|
+
def show(id)
|
47
|
+
{ :foo => 'bar', :baz => 123 }
|
48
|
+
end
|
49
|
+
def update(id)
|
50
|
+
{ :success => true }
|
51
|
+
end
|
52
|
+
def destroy(id)
|
53
|
+
{ :success => true }
|
54
|
+
end
|
55
|
+
def add(id)
|
56
|
+
{ :success => true }
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# for development only
|
2
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__),'../../lib'))
|
3
|
+
#####
|
4
|
+
require 'restrack'
|
5
|
+
|
6
|
+
module SampleApp; end
|
7
|
+
class SampleApp::WebService < RESTRack::WebService; end
|
8
|
+
|
9
|
+
RESTRack::CONFIG = RESTRack::load_config(File.join(File.dirname(__FILE__), 'config/constants.yaml'))
|
10
|
+
RESTRack::CONFIG[:ROOT] = File.dirname(__FILE__)
|
11
|
+
|
12
|
+
# Dynamically load all controllers
|
13
|
+
Find.find( File.join(File.dirname(__FILE__), 'controllers') ) do |file|
|
14
|
+
next if File.extname(file) != '.rb'
|
15
|
+
require file
|
16
|
+
end
|
17
|
+
|
18
|
+
if File.directory?( File.join(File.dirname(__FILE__), 'models') )
|
19
|
+
# Dynamically load all models
|
20
|
+
Find.find( File.join(File.dirname(__FILE__), 'models') ) do |file|
|
21
|
+
next if File.extname(file) != '.rb'
|
22
|
+
require file
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
puts "sample_app_2 RESTRack::CONFIG:\n"
|
27
|
+
config = RESTRack::CONFIG.keys.map {|c| c.to_s }.sort
|
28
|
+
config.each do |key|
|
29
|
+
puts "\t" + key + ' => ' + RESTRack::CONFIG[key.to_sym].to_s
|
30
|
+
end
|
31
|
+
puts "\n"
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','loader'))
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@ws = SampleApp::WebService.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_has_direct_relationship_to
|
14
|
+
env = Rack::MockRequest.env_for('/foo_bar/144/baz', {
|
15
|
+
:method => 'GET'
|
16
|
+
})
|
17
|
+
output = ''
|
18
|
+
assert_nothing_raised do
|
19
|
+
output = @ws.call(env)
|
20
|
+
end
|
21
|
+
test_val = { :BAZ => 'HOLA!' }.to_json
|
22
|
+
assert_equal test_val, output[2]
|
23
|
+
|
24
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/baz', {
|
25
|
+
:method => 'GET'
|
26
|
+
})
|
27
|
+
output = ''
|
28
|
+
assert_nothing_raised do
|
29
|
+
output = @ws.call(env)
|
30
|
+
end
|
31
|
+
test_val = { :OTHER => 'YUP' }.to_json
|
32
|
+
assert_equal test_val, output[2]
|
33
|
+
|
34
|
+
env = Rack::MockRequest.env_for('/foo_bar/144/baz/', {
|
35
|
+
:method => 'GET'
|
36
|
+
})
|
37
|
+
output = ''
|
38
|
+
assert_nothing_raised do
|
39
|
+
output = @ws.call(env)
|
40
|
+
end
|
41
|
+
test_val = { :BAZ => 'HOLA!' }.to_json
|
42
|
+
assert_equal test_val, output[2]
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_has_direct_relationships_to
|
46
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/children/1', {
|
47
|
+
:method => 'GET'
|
48
|
+
})
|
49
|
+
output = ''
|
50
|
+
assert_nothing_raised do
|
51
|
+
output = @ws.call(env)
|
52
|
+
end
|
53
|
+
test_val = { :BAZA => 'YESSIR' }.to_json
|
54
|
+
assert_equal test_val, output[2]
|
55
|
+
|
56
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/children/8', {
|
57
|
+
:method => 'GET'
|
58
|
+
})
|
59
|
+
output = ''
|
60
|
+
assert_nothing_raised do
|
61
|
+
output = @ws.call(env)
|
62
|
+
end
|
63
|
+
test_val = { :NOWAY => 'JOSE' }.to_json
|
64
|
+
assert_equal test_val, output[2]
|
65
|
+
|
66
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/children/11', {
|
67
|
+
:method => 'GET'
|
68
|
+
})
|
69
|
+
output = ''
|
70
|
+
assert_nothing_raised do
|
71
|
+
output = @ws.call(env)
|
72
|
+
end
|
73
|
+
assert_equal 404, output[0]
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_has_mapped_relationships_to
|
77
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/maps/first', {
|
78
|
+
:method => 'GET'
|
79
|
+
})
|
80
|
+
output = ''
|
81
|
+
assert_nothing_raised do
|
82
|
+
output = @ws.call(env)
|
83
|
+
end
|
84
|
+
test_val = '1'
|
85
|
+
assert_equal test_val, output[2]
|
86
|
+
|
87
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/maps/second', {
|
88
|
+
:method => 'GET'
|
89
|
+
})
|
90
|
+
output = ''
|
91
|
+
assert_nothing_raised do
|
92
|
+
output = @ws.call(env)
|
93
|
+
end
|
94
|
+
test_val = '0'
|
95
|
+
assert_equal test_val, output[2]
|
96
|
+
|
97
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/maps/third', {
|
98
|
+
:method => 'GET'
|
99
|
+
})
|
100
|
+
output = ''
|
101
|
+
assert_nothing_raised do
|
102
|
+
output = @ws.call(env)
|
103
|
+
end
|
104
|
+
test_val = '0'
|
105
|
+
assert_equal test_val, output[2]
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_keyed_with_type
|
109
|
+
# baza controller exercises this option
|
110
|
+
env = Rack::MockRequest.env_for('/foo_bar/133/children/1', {
|
111
|
+
:method => 'GET'
|
112
|
+
})
|
113
|
+
output = ''
|
114
|
+
assert_nothing_raised do
|
115
|
+
output = @ws.call(env)
|
116
|
+
end
|
117
|
+
test_val = { :BAZA => 'YESSIR' }.to_json
|
118
|
+
assert_equal test_val, output[2]
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','loader'))
|
5
|
+
|
6
|
+
class SampleApp::TestResourceRequest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@ws = SampleApp::WebService.new # init logs
|
10
|
+
end
|
11
|
+
|
12
|
+
## These are the resources which can be accessed from the root of your web service. If left empty, all resources are available at the root.
|
13
|
+
##:ROOT_RESOURCE_ACCEPT: []
|
14
|
+
## These are the resources which cannot be accessed from the root of your web service. Use either this or ROOT_RESOURCE_ACCEPT as a blacklist or whitelist to establish routing (relationships defined in resource controllers define further routing).
|
15
|
+
#:ROOT_RESOURCE_DENY: [ 'baz' ]
|
16
|
+
def test_root_resource_denied
|
17
|
+
env = Rack::MockRequest.env_for('/baz/144', {
|
18
|
+
:method => 'GET'
|
19
|
+
})
|
20
|
+
output = ''
|
21
|
+
assert_nothing_raised do
|
22
|
+
output = @ws.call(env)
|
23
|
+
end
|
24
|
+
#test_val = [403, {"Content-Type"=>"text/plain"}, "HTTPStatus::HTTP403Forbidden\nYou are forbidden to access that resource."]
|
25
|
+
assert_equal 403, output[0]
|
26
|
+
|
27
|
+
env = Rack::MockRequest.env_for('/bat/144', {
|
28
|
+
:method => 'GET'
|
29
|
+
})
|
30
|
+
assert_nothing_raised do
|
31
|
+
output = @ws.call(env)
|
32
|
+
end
|
33
|
+
#test_val = [403, {"Content-Type"=>"text/plain"}, "HTTPStatus::HTTP403Forbidden\nYou are forbidden to access that resource."]
|
34
|
+
assert_not_equal 403, output[0]
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_root_resource_accept
|
38
|
+
env = Rack::MockRequest.env_for('/foo_bar/144', {
|
39
|
+
:method => 'GET'
|
40
|
+
})
|
41
|
+
output = ''
|
42
|
+
assert_nothing_raised do
|
43
|
+
output = @ws.call(env)
|
44
|
+
end
|
45
|
+
#test_val = [403, {"Content-Type"=>"text/plain"}, "HTTPStatus::HTTP403Forbidden\nYou are forbidden to access that resource."]
|
46
|
+
assert_not_equal 403, output[0]
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_default_resource
|
50
|
+
# This should be handled by bazu_controller
|
51
|
+
env = Rack::MockRequest.env_for('/', {
|
52
|
+
:method => 'GET'
|
53
|
+
})
|
54
|
+
output = ''
|
55
|
+
assert_nothing_raised do
|
56
|
+
output = @ws.call(env)
|
57
|
+
end
|
58
|
+
# no index method defined/allowed
|
59
|
+
assert_equal 405, output[0]
|
60
|
+
|
61
|
+
# This should be handled by bazu_controller
|
62
|
+
env = Rack::MockRequest.env_for('/123', {
|
63
|
+
:method => 'GET'
|
64
|
+
})
|
65
|
+
output = ''
|
66
|
+
assert_nothing_raised do
|
67
|
+
output = @ws.call(env)
|
68
|
+
end
|
69
|
+
assert_equal 200, output[0]
|
70
|
+
end
|
71
|
+
end
|