Added tests for Router's trailing slash handling options

master
Dustin C. Hatch 2012-11-30 22:46:28 -06:00
parent f14b744ef7
commit f5f7e76dae
2 changed files with 44 additions and 15 deletions

View File

@ -24,8 +24,6 @@ import functools
import milla import milla
import re import re
import sys import sys
import urllib
import urlparse
import warnings import warnings
class Router(object): class Router(object):
@ -99,7 +97,7 @@ class Router(object):
for attr in functools.WRAPPER_ASSIGNMENTS: for attr in functools.WRAPPER_ASSIGNMENTS:
try: try:
value = getattr(controller, attr) value = getattr(controller, attr)
except AttributeError: except AttributeError: #pragma: no cover
pass pass
else: else:
setattr(func, attr, value) setattr(func, attr, value)

View File

@ -6,6 +6,7 @@
:Updater: $Author$ :Updater: $Author$
''' '''
import milla.dispatch.routing import milla.dispatch.routing
import nose.tools
def fake_controller(): def fake_controller():
pass pass
@ -44,6 +45,7 @@ def test_urlvars():
assert func.keywords['bar'] == 'abc' assert func.keywords['bar'] == 'abc'
assert func.keywords['baz'] == 'def' assert func.keywords['baz'] == 'def'
@nose.tools.raises(milla.dispatch.UnresolvedPath)
def test_regexp_urlvar(): def test_regexp_urlvar():
'''Ensure the dispatcher can resolve alternate regexps in urlvars '''Ensure the dispatcher can resolve alternate regexps in urlvars
@ -61,13 +63,9 @@ def test_regexp_urlvar():
assert func.func == controller assert func.func == controller
assert func.keywords['arg'] == 'abcde' assert func.keywords['arg'] == 'abcde'
try: router.resolve('/test/1234')
func = router.resolve('/test/1234')
except milla.dispatch.UnresolvedPath:
pass
else:
raise AssertionError
@nose.tools.raises(milla.dispatch.UnresolvedPath)
def test_unresolved(): def test_unresolved():
'''Ensure the resolver raises an exception for unresolved paths '''Ensure the resolver raises an exception for unresolved paths
@ -80,12 +78,7 @@ def test_unresolved():
router = milla.dispatch.routing.Router() router = milla.dispatch.routing.Router()
router.add_route('/test', controller) router.add_route('/test', controller)
try: router.resolve('/tset')
router.resolve('/tset')
except milla.dispatch.UnresolvedPath:
pass
else:
raise AssertionError
def test_unrelated(): def test_unrelated():
'''Ensure the dispatcher is not confused by unrelated paths '''Ensure the dispatcher is not confused by unrelated paths
@ -119,3 +112,41 @@ def test_string_controller():
router.add_route('/test', 'milla.tests.test_routing:fake_controller') router.add_route('/test', 'milla.tests.test_routing:fake_controller')
func = router.resolve('/test') func = router.resolve('/test')
assert func.func == fake_controller assert func.func == fake_controller
@nose.tools.raises(milla.HTTPMovedPermanently)
def test_trailing_slash_redir():
'''Paths that match except the trailing slash return a HTTP redirect
'''
def controller():
pass
router = milla.dispatch.routing.Router()
router.add_route('/test/', controller)
func = router.resolve('/test')
assert func is not controller
func()
@nose.tools.raises(milla.dispatch.routing.UnresolvedPath)
def test_trailing_slash_none():
'''Paths that match except the trailing slash are ignored
'''
def controller():
pass
router = milla.dispatch.routing.Router(None)
router.add_route('/test/', controller)
router.resolve('/test')
def test_trailing_slash_silent():
'''Paths that match except the trailing slash are treated the same
'''
def controller():
pass
router = milla.dispatch.routing.Router(milla.dispatch.routing.Router.SILENT)
router.add_route('/test/', controller)
func = router.resolve('/test')
assert func.func is controller