1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
import unittest
class RoutesMapperTests(unittest.TestCase):
def _getEnviron(self, **kw):
environ = {'SERVER_NAME':'localhost',
'wsgi.url_scheme':'http'}
environ.update(kw)
return environ
def _getTargetClass(self):
from repoze.bfg.urldispatch import RoutesMapper
return RoutesMapper
def _makeOne(self, get_root):
klass = self._getTargetClass()
return klass(get_root)
def test_routes_mapper_no_route_matches(self):
marker = ()
get_root = make_get_root(marker)
mapper = self._makeOne(get_root)
environ = self._getEnviron(PATH_INFO='/')
result = mapper(environ)
self.assertEqual(result, marker)
self.assertEqual(mapper.mapper.environ, environ)
def test_routes_mapper_route_matches(self):
marker = ()
get_root = make_get_root(marker)
mapper = self._makeOne(get_root)
mapper.connect('archives/:action/:article', controller='foo')
environ = self._getEnviron(PATH_INFO='/archives/action1/article1')
result = mapper(environ)
from repoze.bfg.interfaces import IRoutesContext
self.failUnless(IRoutesContext.providedBy(result))
self.assertEqual(result.controller, 'foo')
self.assertEqual(result.action, 'action1')
self.assertEqual(result.article, 'article1')
def test_routes_mapper_custom_context_factory(self):
marker = ()
get_root = make_get_root(marker)
mapper = self._makeOne(get_root)
from zope.interface import implements, Interface
class IDummy(Interface):
pass
class Dummy(object):
implements(IDummy)
def __init__(self, **kw):
self.__dict__.update(kw)
mapper.connect('archives/:action/:article', controller='foo',
context_factory=Dummy)
environ = self._getEnviron(PATH_INFO='/archives/action1/article1')
result = mapper(environ)
self.assertEqual(result.controller, 'foo')
self.assertEqual(result.action, 'action1')
self.assertEqual(result.article, 'article1')
from repoze.bfg.interfaces import IRoutesContext
self.failUnless(IRoutesContext.providedBy(result))
self.failUnless(isinstance(result, Dummy))
self.failUnless(IDummy.providedBy(result))
self.failIf(hasattr(result, 'context_factory'))
def test_url_for(self):
marker = ()
get_root = make_get_root(marker)
mapper = self._makeOne(get_root)
mapper.connect('archives/:action/:article', controller='foo')
environ = self._getEnviron(PATH_INFO='/archives/action1/article1')
result = mapper(environ)
from routes import url_for
result = url_for(controller='foo', action='action2', article='article2')
self.assertEqual(result, '/archives/action2/article2')
class TestRoutesModelTraverser(unittest.TestCase):
def _getTargetClass(self):
from repoze.bfg.urldispatch import RoutesModelTraverser
return RoutesModelTraverser
def _makeOne(self, model):
klass = self._getTargetClass()
return klass(model)
def test_class_conforms_to_ITraverser(self):
from zope.interface.verify import verifyClass
from repoze.bfg.interfaces import ITraverser
verifyClass(ITraverser, self._getTargetClass())
def test_instance_conforms_to_ITraverser(self):
from zope.interface.verify import verifyObject
from repoze.bfg.interfaces import ITraverser
verifyObject(ITraverser, self._makeOne(None))
def test_call(self):
model = DummyModel()
traverser = self._makeOne(model)
result = traverser({})
self.assertEqual(result[0], model)
self.assertEqual(result[1], 'controller')
self.assertEqual(result[2], '')
class DummyModel:
controller = 'controller'
def make_get_root(result):
def dummy_get_root(environ):
return result
return dummy_get_root
|