# NOTE: these tests need to be executed from the root
# directory of an svn checkout using py.test
from botoweb.appserver.url_mapper import URLMapper
from botoweb.appserver.handlers import RequestHandler
from botoweb.request import Request
from botoweb.response import Response
from botoweb.environment import Environment
class XMLString(object):
"""
String that can be turned into xml
"""
def __init__(self, val):
self.val = val
def to_xml(self):
return "%s" % self.val
class SimpleHandler(RequestHandler):
"""
Simple test handler
"""
def _get(self, request, response, id=None):
val = None
if id == None:
val = XMLString("GET")
else:
val = XMLString("GET: %s" % id)
response.write(val.to_xml())
return response
def _post(self, request, response, id=None):
val = None
if id == None:
val = XMLString("POST")
else:
val = XMLString("POST: %s" % id)
response.write(val.to_xml())
return response
class TestURLMapper:
"""
Test the URL Mapper for different configs
"""
def setup_class(cls):
"""
Setup this class
"""
cls.env = Environment("example")
cls.url_mapper = URLMapper(cls.env)
cls.env.config['botoweb']['handlers'] = [ {"url": "/foo", "handler": "%s.SimpleHandler" % cls.__module__} ]
def teardown_class(cls):
"""
Cleanup
"""
del(cls.url_mapper)
del(cls.env)
def test_path_no_object(self):
(handler, obj_id) = self.url_mapper.parse_path(Request.blank("/foo"))
assert(handler.__class__.__name__ == "SimpleHandler")
assert(obj_id == None)
def test_path_with_object_id(self):
my_obj_id = "2934823-423423432-asdf34AA-5498574298.avi"
(handler, obj_id) = self.url_mapper.parse_path(Request.blank("/foo/%s" % my_obj_id))
assert(handler.__class__.__name__ == "SimpleHandler")
assert(obj_id == my_obj_id)
def test_path_with_trailing_slash(self):
(handler, obj_id) = self.url_mapper.parse_path(Request.blank("/foo/"))
assert(handler.__class__.__name__ == "SimpleHandler")
assert(obj_id == None)
def test_path_with_object_id_with_slash(self):
my_obj_id = "bucket_name/key_name/foo.avi"
(handler, obj_id) = self.url_mapper.parse_path(Request.blank("/foo/%s" % my_obj_id))
assert(handler.__class__.__name__ == "SimpleHandler")
assert(obj_id == my_obj_id)
def test_handle_get_noargs(self):
"""
Test handing a GET request
"""
r = Request.blank("/foo")
r.method = "GET"
content = self.url_mapper.handle(r, Response())
assert(content.body == "GET")
def test_handle_get_with_args(self):
"""
Test handing a GET request
"""
r = Request.blank("/foo?bar=biz&diz=dazzle")
r.method = "GET"
content = self.url_mapper.handle(r, Response())
assert(content.body == "GET")
def test_handle_get_with_args_and_id(self):
"""
Test handing a GET request
"""
r = Request.blank("/foo/my_object_id?bar=biz&diz=dazzle")
r.method = "GET"
content = self.url_mapper.handle(r, Response())
assert(content.body == "GET: my_object_id")
def test_handle_post_with_args_and_id(self):
r = Request.blank("/foo/my_object_id?bar=biz&diz=dazzle")
r.method = "POST"
content = self.url_mapper.handle(r, Response())
assert(content.body == "POST: my_object_id")