summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_request.py
blob: 8c868fcf58851486ed06c23858dc5c493e241511 (plain)
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import unittest
from repoze.bfg.testing import cleanUp

class TestMakeRequestASCII(unittest.TestCase):
    def _callFUT(self, event):
        from repoze.bfg.request import make_request_ascii
        return make_request_ascii(event)

    def test_it(self):
        request = DummyRequest()
        event = DummyNewRequestEvent(request)
        self._callFUT(event)
        self.assertEqual(request.charset, None)

class RequestTestBase(object):
    def _makeOne(self, environ):
        request = self._getTargetClass()(environ)
        return request

    def test_params_decoded_from_utf_8_by_default(self):
        environ = {
            'PATH_INFO':'/',
            'QUERY_STRING':'la=La%20Pe%C3%B1a'
            }
        request = self._makeOne(environ)
        self.assertEqual(request.GET['la'], u'La Pe\xf1a')

    def test_params_bystring_when_charset_None(self):
        environ = {
            'PATH_INFO':'/',
            'QUERY_STRING':'la=La%20Pe%C3%B1a'
            }
        request = self._makeOne(environ)
        request.charset = None
        self.assertEqual(request.GET['la'], 'La Pe\xc3\xb1a')

    def test_class_implements(self):
        from repoze.bfg.interfaces import IRequest
        klass = self._getTargetClass()
        self.assertTrue(IRequest.implementedBy(klass))

    def test_instance_provides(self):
        from repoze.bfg.interfaces import IRequest
        inst = self._makeOne({})
        self.assertTrue(IRequest.providedBy(inst))

class TestRequest(unittest.TestCase, RequestTestBase):
        def _getTargetClass(self):
            from repoze.bfg.request import Request
            return Request
    
class TestRouteRequest(unittest.TestCase, RequestTestBase):
        def _getTargetClass(self):
            from repoze.bfg.request import create_route_request_factory
            return create_route_request_factory('abc')

class TestRequestFactory(unittest.TestCase):
    def setUp(self):
        cleanUp()

    def tearDown(self):
        cleanUp()
        
    def _callFUT(self, environ):
        from repoze.bfg.request import request_factory
        return request_factory(environ)

    def test_it_no_route(self):
        from repoze.bfg.interfaces import IRequest
        from repoze.bfg.request import Request
        result = self._callFUT({})
        self.assertEqual(result.__class__, Request)
        self.failUnless(IRequest.providedBy(result))

    def test_it_with_route_found(self):
        from zope.component import getSiteManager
        from repoze.bfg.interfaces import IRouteRequest
        sm = getSiteManager()
        sm.registerUtility(DummyRequest, IRouteRequest, 'routename')
        route = DummyRoute('routename')
        result = self._callFUT({'bfg.routes.route':route,
                                'bfg.routes.matchdict':{'match':'1'}})
        self.assertEqual(result.__class__, DummyRequest)
        self.assertEqual(result.matchdict, {'match':'1'})

    def test_it_with_route_notfound(self):
        from repoze.bfg.request import Request
        route = DummyRoute('routename')
        result = self._callFUT({'bfg.routes.route':route,
                                'bfg.routes.matchdict':{'match':'1'}})
        self.assertEqual(result.__class__, Request)
        self.failIf(getattr(result, 'matchdict', None) is not None)

class Test_create_route_request_factory(unittest.TestCase):
    def _callFUT(self, name):
        from repoze.bfg.request import create_route_request_factory
        return create_route_request_factory(name)

    def test_it(self):
        from repoze.bfg.interfaces import IRouteRequest
        from repoze.bfg.interfaces import IRequest
        factory = self._callFUT('routename')
        self.failUnless(IRouteRequest.implementedBy(factory))
        self.failUnless(IRequest.implementedBy(factory))

class Test_add_global_response_headers(unittest.TestCase):
    def _callFUT(self, request, headerlist):
        from repoze.bfg.request import add_global_response_headers
        return add_global_response_headers(request, headerlist)

    def test_it(self):
        request = DummyRequest()
        headers = [('a', 1), ('b', 2)]
        request.global_response_headers = headers[:]
        self._callFUT(request, [('c', 1)])
        self.assertEqual(request.global_response_headers, headers + [('c', 1)])

class DummyRoute:
    def __init__(self, name):
        self.name = name
class DummyRequest:
    def __init__(self, environ=None):
        if environ is None:
            environ = {}
        self.environ = environ

class DummyNewRequestEvent:
    def __init__(self, request):
        self.request = request