cubicweb/sobjects/test/unittest_register_user.py
author Philippe Pepiot <philippe.pepiot@logilab.fr>
Tue, 17 Mar 2020 13:29:08 +0100
branch3.27
changeset 12914 87c3562b3bae
parent 11370 ec858780b6b7
permissions -rw-r--r--
[pkg] require python >= 3.4 This avoid pip pulling a version that does not run on python2 when using a python2 environment. Since we already released some 3.27 releases in pypi, I think we should release 3.27.3 and remove releases 3.27.2, 3.27.1 and 3.27.0 from pypi.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11370
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
     1
# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     3
#
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     5
#
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
     9
# any later version.
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    10
#
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    14
# details.
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    15
#
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
11370
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    18
"""unittest for cubicweb user registration service"""
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    19
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    20
from cubicweb import ValidationError
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    21
from cubicweb.web import Unauthorized
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    22
from cubicweb.devtools.testlib import CubicWebTC
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    23
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    24
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    25
class RegisterUserTC(CubicWebTC):
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    26
11368
a32209aba682 [test] Clarify user registration service tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    27
    def test_register_user_service_anon(self):
a32209aba682 [test] Clarify user registration service tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    28
        with self.new_access('anon').client_cnx() as cnx:
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    29
            self.assertRaises(Unauthorized, cnx.call_service, 'register_user',
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    30
                              login=u'foo2', password=u'bar2',
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    31
                              email=u'foo2@bar2.com', firstname=u'Foo2', surname=u'Bar2')
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    32
11369
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    33
    def test_register_user_service_unique_login(self):
11368
a32209aba682 [test] Clarify user registration service tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    34
        with self.admin_access.cnx() as cnx:
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    35
            cnx.call_service('register_user', login=u'foo3',
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    36
                             password=u'bar3', email=u'foo3@bar3.com',
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    37
                             firstname=u'Foo3', surname=u'Bar3')
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    38
            # same login
11370
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    39
            with self.assertRaises(ValidationError) as cm:
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    40
                cnx.call_service('register_user', login=u'foo3',
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    41
                                 password=u'bar3')
11370
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    42
            expected_errors = {
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    43
                '': u'some relations violate a unicity constraint',
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    44
                'login': u'%(KEY-rtype)s is part of violated unicity constraint',
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    45
            }
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    46
            self.assertEqual(cm.exception.errors, expected_errors)
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
    47
11369
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    48
    def test_register_user_service_unique_email(self):
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    49
        with self.admin_access.cnx() as cnx:
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    50
            cnx.call_service('register_user', login=u'foo3',
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    51
                             password=u'bar3', email=u'foo3@bar3.com',
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    52
                             firstname=u'Foo3', surname=u'Bar3')
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    53
            with self.assertRaises(ValidationError) as cm:
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    54
                cnx.call_service('register_user', login=u'foo3@bar3.com',
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    55
                                 password=u'bar3')
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    56
            expected_errors = {
11370
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    57
                '': u'some relations violate a unicity constraint',
ec858780b6b7 [sobjects] Drop custom unique constraint checks in user registration service
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11369
diff changeset
    58
                'address': u'%(KEY-rtype)s is part of violated unicity constraint',
11369
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    59
            }
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    60
            self.assertEqual(cm.exception.errors, expected_errors)
3c8d345d0f3a [test] Add a test for user registration unicity constraint on email
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11368
diff changeset
    61
9688
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    62
    def test_register_user_attributes(self):
11368
a32209aba682 [test] Clarify user registration service tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    63
        with self.admin_access.cnx() as cnx:
9688
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    64
            cnx.call_service('register_user', login=u'foo3',
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    65
                             password=u'bar3', email=u'foo3@bar3.com',
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    66
                             firstname=u'Foo3', surname=u'Bar3')
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    67
            cnx.commit()
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    68
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    69
        with self.admin_access.client_cnx() as cnx:
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    70
            user = cnx.find('CWUser', login=u'foo3').one()
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    71
            self.assertEqual(user.firstname, u'Foo3')
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    72
            self.assertEqual(user.use_email[0].address, u'foo3@bar3.com')
1f6ecd90df4f [sobjects/test] check that register_user properly sets user name and email address
Julien Cristau <julien.cristau@logilab.fr>
parents: 9687
diff changeset
    73
9689
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    74
    def test_register_user_groups(self):
11368
a32209aba682 [test] Clarify user registration service tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    75
        with self.admin_access.cnx() as cnx:
9689
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    76
            # default
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    77
            cnx.call_service('register_user', login=u'foo_user',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    78
                             password=u'bar_user', email=u'foo_user@bar_user.com',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    79
                             firstname=u'Foo_user', surname=u'Bar_user')
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    80
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    81
            # group kwarg
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    82
            cnx.call_service('register_user', login=u'foo_admin',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    83
                             password=u'bar_admin', email=u'foo_admin@bar_admin.com',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    84
                             firstname=u'Foo_admin', surname=u'Bar_admin',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    85
                             groups=('managers', 'users'))
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    86
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    87
            # class attribute
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    88
            from cubicweb.sobjects import services
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    89
            services.RegisterUserService.default_groups = ('guests',)
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    90
            cnx.call_service('register_user', login=u'foo_guest',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    91
                             password=u'bar_guest', email=u'foo_guest@bar_guest.com',
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    92
                             firstname=u'Foo_guest', surname=u'Bar_guest')
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    93
            cnx.commit()
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    94
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    95
        with self.admin_access.client_cnx() as cnx:
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    96
            user = cnx.find('CWUser', login=u'foo_user').one()
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    97
            self.assertEqual([g.name for g in user.in_group], ['users'])
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    98
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
    99
            admin = cnx.find('CWUser', login=u'foo_admin').one()
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
   100
            self.assertEqual(sorted(g.name for g in admin.in_group), ['managers', 'users'])
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
   101
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
   102
            guest = cnx.find('CWUser', login=u'foo_guest').one()
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
   103
            self.assertEqual([g.name for g in guest.in_group], ['guests'])
9e4a3c8719a7 [services] don't hardcode 'users' group for register_user
Julien Cristau <julien.cristau@logilab.fr>
parents: 9688
diff changeset
   104
9687
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
   105
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
   106
if __name__ == '__main__':
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
   107
    from logilab.common.testlib import unittest_main
00c2356faba7 [server] Refactor Repository.register_user into a CubicWeb service (closes #3020639)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents:
diff changeset
   108
    unittest_main()