cubicweb/pyramid/test/test_hooks.py
author Philippe Pepiot <philippe.pepiot@logilab.fr>
Tue, 17 Mar 2020 13:34:54 +0100
changeset 12917 db0f56b19583
parent 12603 616d65b2dd8a
permissions -rw-r--r--
[pkg] merge 3.27 Require python >= 3.6 since recent typing notations require >= 3.6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11702
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     1
from cubicweb.pyramid.test import PyramidCWTest
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     2
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     3
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     4
def set_language(request):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     5
    lang = request.POST.get('lang', None)
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     6
    cnx = request.cw_cnx
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     7
    if lang is None:
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     8
        cnx.execute('DELETE CWProperty X WHERE X for_user U, U eid %(u)s',
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     9
                    {'u': cnx.user.eid})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    10
    else:
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11702
diff changeset
    11
        cnx.user.set_property(u'ui.language', lang)
11702
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    12
    cnx.commit()
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    13
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11702
diff changeset
    14
    request.response.text = cnx.user.properties.get('ui.language', '')
11702
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    15
    return request.response
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    16
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    17
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    18
def add_remove_group(request):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    19
    add_remove = request.POST['add_remove']
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    20
    cnx = request.cw_cnx
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    21
    if add_remove == 'add':
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    22
        cnx.execute('SET U in_group G WHERE G name "users", U eid %(u)s',
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    23
                    {'u': cnx.user.eid})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    24
    else:
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    25
        cnx.execute('DELETE U in_group G WHERE G name "users", U eid %(u)s',
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    26
                    {'u': cnx.user.eid})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    27
    cnx.commit()
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    28
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11702
diff changeset
    29
    request.response.text = ','.join(sorted(cnx.user.groups))
11702
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    30
    return request.response
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    31
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    33
class SessionSyncHoooksTC(PyramidCWTest):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    34
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
    def includeme(self, config):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    36
        for view in (set_language, add_remove_group):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
            config.add_route(view.__name__, '/' + view.__name__)
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    38
            config.add_view(view, route_name=view.__name__)
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    39
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    40
    def setUp(self):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    41
        super(SessionSyncHoooksTC, self).setUp()
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    42
        with self.admin_access.repo_cnx() as cnx:
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    43
            self.admin_eid = cnx.user.eid
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    44
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    45
    def test_sync_props(self):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    46
        # initialize a pyramid session using admin credentials
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    47
        res = self.webapp.post('/login', {
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    48
            '__login': self.admlogin, '__password': self.admpassword})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    49
        self.assertEqual(res.status_int, 303)
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    50
        # new property
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    51
        res = self.webapp.post('/set_language', {'lang': 'fr'})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    52
        self.assertEqual(res.text, 'fr')
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    53
        # updated property
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    54
        res = self.webapp.post('/set_language', {'lang': 'en'})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    55
        self.assertEqual(res.text, 'en')
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    56
        # removed property
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    57
        res = self.webapp.post('/set_language')
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    58
        self.assertEqual(res.text, '')
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    59
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    60
    def test_sync_groups(self):
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    61
        # initialize a pyramid session using admin credentials
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    62
        res = self.webapp.post('/login', {
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    63
            '__login': self.admlogin, '__password': self.admpassword})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    64
        self.assertEqual(res.status_int, 303)
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    65
        # XXX how to get pyramid request using this session?
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    66
        res = self.webapp.post('/add_remove_group', {'add_remove': 'add'})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    67
        self.assertEqual(res.text, 'managers,users')
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    68
        res = self.webapp.post('/add_remove_group', {'add_remove': 'remove'})
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    69
        self.assertEqual(res.text, 'managers')
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    70
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    71
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    72
if __name__ == '__main__':
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    73
    from unittest import main
be23c3813bbf [pyramid] Override cubicweb.hooks.syncsession.get_user_sessions() for Pyramid
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    74
    main()