cubicweb/pyramid/test/test_core.py
author Philippe Pepiot <philippe.pepiot@logilab.fr>
Wed, 22 Mar 2017 14:18:54 +0100
branch3.25
changeset 12088 477a59a45786
parent 11631 faf279e33298
permissions -rw-r--r--
[pyramid] disable bwcompat by default in PyramidCWTest To avoid cubicweb exceptions handling.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11630
diff changeset
     1
from cubicweb.pyramid.test import PyramidCWTest
11556
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     2
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     3
from cubicweb.view import View
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     4
from cubicweb.web import Redirect
11568
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
     5
from cubicweb import ValidationError
11556
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     6
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     7
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     8
class Redirector(View):
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
     9
    __regid__ = 'redirector'
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    10
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    11
    def call(self, rset=None):
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    12
        self._cw.set_header('Cache-Control', 'no-cache')
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    13
        raise Redirect('http://example.org')
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    14
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    15
11568
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    16
def put_in_uncommitable_state(request):
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    17
    try:
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    18
        request.cw_cnx.execute('SET U login NULL WHERE U login "anon"')
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    19
    except ValidationError:
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    20
        pass
11630
1400aee10df4 Port to Python3 (closes #14159555)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11611
diff changeset
    21
    request.response.body = b'OK'
11568
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    22
    return request.response
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    23
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    24
11556
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    25
class CoreTest(PyramidCWTest):
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    26
    anonymous_allowed = True
12088
477a59a45786 [pyramid] disable bwcompat by default in PyramidCWTest
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11631
diff changeset
    27
    settings = {'cubicweb.bwcompat': True}
11556
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    28
11568
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    29
    def includeme(self, config):
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    30
        config.add_route('uncommitable', '/uncommitable')
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    31
        config.add_view(put_in_uncommitable_state, route_name='uncommitable')
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    32
11556
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    33
    def test_cw_to_pyramid_copy_headers_on_redirect(self):
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    34
        self.vreg.register(Redirector)
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    35
        try:
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    36
            res = self.webapp.get('/?vid=redirector', expect_errors=True)
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    37
            self.assertEqual(res.status_int, 303)
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    38
            self.assertEqual(res.headers['Cache-Control'], 'no-cache')
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    39
        finally:
1eeba41a2e95 On exceptions from CW, copy headers
Christophe de Vienne <christophe@unlish.com>
parents:
diff changeset
    40
            self.vreg.unregister(Redirector)
11568
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    41
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    42
    def test_uncommitable_cnx(self):
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    43
        res = self.webapp.get('/uncommitable')
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    44
        self.assertEqual(res.text, 'OK')
a9940c6cd693 Rollback 'uncommitable' cnx
Christophe de Vienne <christophe@unlish.com>
parents: 11556
diff changeset
    45
        self.assertEqual(res.status_int, 200)
11611
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11568
diff changeset
    46
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11568
diff changeset
    47
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11568
diff changeset
    48
if __name__ == '__main__':
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11568
diff changeset
    49
    from unittest import main
9d2bb6bdb5c8 [tests] add a __main__ handler
David Douard <david.douard@logilab.fr>
parents: 11568
diff changeset
    50
    main()