cubicweb/hooks/test/unittest_hooks.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 23 Jun 2016 11:05:31 +0200
changeset 11367 5379c5dbc2c5
parent 11366 80dec361a5d0
child 12104 3ae16f70add4
permissions -rw-r--r--
[test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
11366
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
     2
# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     3
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     4
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     5
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     6
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     7
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     8
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
     9
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    10
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    11
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    12
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    13
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    14
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    15
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    16
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    17
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5030
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
"""functional tests for core hooks
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6798
diff changeset
    21
Note:
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6798
diff changeset
    22
  syncschema.py hooks are mostly tested in server/test/unittest_migrations.py
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
2454
3648b718a0d3 add simple tests for standard metadata hooks
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2453
diff changeset
    25
from datetime import datetime
3648b718a0d3 add simple tests for standard metadata hooks
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2453
diff changeset
    26
10724
aa3eedba866c [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10336
diff changeset
    27
from six import text_type
aa3eedba866c [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10336
diff changeset
    28
11034
75d752e6daf7 [server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11033
diff changeset
    29
from pytz import utc
11366
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
    30
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
    31
from cubicweb import ValidationError
4689
4eb1f4490538 [test] skipping versions checking during test is enough, no need for monkey patch
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4667
diff changeset
    32
from cubicweb.devtools.testlib import CubicWebTC
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    33
10724
aa3eedba866c [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10336
diff changeset
    34
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
    35
class CoreHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    36
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
    def test_inlined(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    38
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    39
            self.assertEqual(self.repo.schema['sender'].inlined, True)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    40
            cnx.execute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    41
            cnx.execute('INSERT EmailPart X: X content_format "text/plain", X ordernum 1, '
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    42
                        'X content "this is a test"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    43
            eeid = cnx.execute('INSERT Email X: X messageid "<1234>", X subject "test", '
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    44
                               'X sender Y, X recipients Y, X parts P '
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    45
                               'WHERE Y is EmailAddress, P is EmailPart')[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    46
            cnx.execute('SET X sender Y WHERE X is Email, Y is EmailAddress')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    47
            rset = cnx.execute('Any S WHERE X sender S, X eid %s' % eeid)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    48
            self.assertEqual(len(rset), 1)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    49
9361
0542a85fe667 symmetric relations: replace bogus rql2sql translation by a hook
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8694
diff changeset
    50
    def test_symmetric(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    51
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    52
            u1 = self.create_user(cnx, u'1')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    53
            u2 = self.create_user(cnx, u'2')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    54
            u3 = self.create_user(cnx, u'3')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    55
            ga = cnx.create_entity('CWGroup', name=u'A')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    56
            gb = cnx.create_entity('CWGroup', name=u'B')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    57
            u1.cw_set(friend=u2)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    58
            u2.cw_set(friend=u3)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    59
            ga.cw_set(friend=gb)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    60
            ga.cw_set(friend=u1)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    61
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    62
            for l1, l2 in ((u'1', u'2'),
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    63
                           (u'2', u'3')):
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    64
                self.assertTrue(cnx.execute('Any U1,U2 WHERE U1 friend U2, U1 login %(l1)s, U2 login %(l2)s',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    65
                                            {'l1': l1, 'l2': l2}))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    66
                self.assertTrue(cnx.execute('Any U1,U2 WHERE U2 friend U1, U1 login %(l1)s, U2 login %(l2)s',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    67
                                            {'l1': l1, 'l2': l2}))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    68
            self.assertTrue(cnx.execute('Any GA,GB WHERE GA friend GB, GA name "A", GB name "B"'))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    69
            self.assertTrue(cnx.execute('Any GA,GB WHERE GB friend GA, GA name "A", GB name "B"'))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    70
            self.assertTrue(cnx.execute('Any GA,U1 WHERE GA friend U1, GA name "A", U1 login "1"'))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    71
            self.assertTrue(cnx.execute('Any GA,U1 WHERE U1 friend GA, GA name "A", U1 login "1"'))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    72
            self.assertFalse(cnx.execute('Any GA,U WHERE GA friend U, GA name "A", U login "2"'))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    73
            for l1, l2 in ((u'1', u'3'),
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    74
                           (u'3', u'1')):
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    75
                self.assertFalse(cnx.execute('Any U1,U2 WHERE U1 friend U2, U1 login %(l1)s, U2 login %(l2)s',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    76
                                             {'l1': l1, 'l2': l2}))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    77
                self.assertFalse(cnx.execute('Any U1,U2 WHERE U2 friend U1, U1 login %(l1)s, U2 login %(l2)s',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    78
                                             {'l1': l1, 'l2': l2}))
9361
0542a85fe667 symmetric relations: replace bogus rql2sql translation by a hook
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8694
diff changeset
    79
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
    def test_html_tidy_hook(self):
9853
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
    81
        with self.admin_access.client_cnx() as cnx:
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
    82
            entity = cnx.create_entity('Workflow', name=u'wf1',
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    83
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    84
                                       description=u'yo')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    85
            self.assertEqual(u'yo', entity.description)
9853
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
    86
            entity = cnx.create_entity('Workflow', name=u'wf2',
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    87
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    88
                                       description=u'<b>yo')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    89
            self.assertEqual(u'<b>yo</b>', entity.description)
9853
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
    90
            entity = cnx.create_entity('Workflow', name=u'wf3',
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    91
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    92
                                       description=u'<b>yo</b>')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    93
            self.assertEqual(u'<b>yo</b>', entity.description)
9853
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
    94
            entity = cnx.create_entity('Workflow', name=u'wf4',
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    95
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    96
                                       description=u'<b>R&D</b>')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    97
            self.assertEqual(u'<b>R&amp;D</b>', entity.description, )
9853
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
    98
            entity = cnx.create_entity('Workflow', name=u'wf5',
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    99
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   100
                                       description=u"<div>c&apos;est <b>l'ét&eacute;")
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
   101
            self.assertEqual(u"<div>c'est <b>l'été</b></div>", entity.description)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
    def test_nonregr_html_tidy_hook_no_update(self):
9853
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
   104
        with self.admin_access.client_cnx() as cnx:
4ddae5c156f6 [hookstests/base] use connections instead of web requests
Julien Cristau <julien.cristau@logilab.fr>
parents: 9852
diff changeset
   105
            entity = cnx.create_entity('Workflow', name=u'wf1',
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   106
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   107
                                       description=u'yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   108
            entity.cw_set(name=u'wf2')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   109
            self.assertEqual(entity.description, u'yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   110
            entity.cw_set(description=u'R&D<p>yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   111
            self.assertEqual(entity.description, u'R&amp;D<p>yo</p>')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   112
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   113
    def test_metadata_cwuri(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   114
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   115
            entity = cnx.create_entity('Workflow', name=u'wf1')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   116
            self.assertEqual(entity.cwuri, self.repo.config['base-url'] + str(entity.eid))
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   117
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   118
    def test_metadata_creation_modification_date(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   119
        with self.admin_access.repo_cnx() as cnx:
11034
75d752e6daf7 [server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11033
diff changeset
   120
            _now = datetime.now(utc)
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   121
            entity = cnx.create_entity('Workflow', name=u'wf1')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   122
            self.assertEqual((entity.creation_date - _now).seconds, 0)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   123
            self.assertEqual((entity.modification_date - _now).seconds, 0)
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   124
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   125
    def test_metadata_created_by(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   126
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   127
            entity = cnx.create_entity('Bookmark', title=u'wf1', path=u'/view')
11367
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   128
            cnx.commit()  # fire operations
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   129
            self.assertEqual(len(entity.created_by), 1)  # make sure we have only one creator
9935
d1adf549d5cb [test] silence a few more deprecation warnings in unittest_hooks
Julien Cristau <julien.cristau@logilab.fr>
parents: 9853
diff changeset
   130
            self.assertEqual(entity.created_by[0].eid, cnx.user.eid)
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   131
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   132
    def test_metadata_owned_by(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   133
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   134
            entity = cnx.create_entity('Bookmark', title=u'wf1', path=u'/view')
11367
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   135
            cnx.commit()  # fire operations
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   136
            self.assertEqual(len(entity.owned_by), 1)  # make sure we have only one owner
9935
d1adf549d5cb [test] silence a few more deprecation warnings in unittest_hooks
Julien Cristau <julien.cristau@logilab.fr>
parents: 9853
diff changeset
   137
            self.assertEqual(entity.owned_by[0].eid, cnx.user.eid)
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   138
4051
eec34250a645 move hook tests to hooks package tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3536
diff changeset
   139
    def test_user_login_stripped(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   140
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   141
            u = self.create_user(cnx, '  joe  ')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   142
            tname = cnx.execute('Any L WHERE E login L, E eid %(e)s',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   143
                                {'e': u.eid})[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   144
            self.assertEqual(tname, 'joe')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   145
            cnx.execute('SET X login " jijoe " WHERE X eid %(x)s', {'x': u.eid})
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   146
            tname = cnx.execute('Any L WHERE E login L, E eid %(e)s',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   147
                                {'e': u.eid})[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   148
            self.assertEqual(tname, 'jijoe')
4051
eec34250a645 move hook tests to hooks package tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3536
diff changeset
   149
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   150
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
   151
class UserGroupHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   152
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   153
    def test_user_group_synchronization(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   154
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   155
            user = cnx.user
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   156
            self.assertEqual(user.groups, set(('managers',)))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   157
            cnx.execute('SET X in_group G WHERE X eid %s, G name "guests"' % user.eid)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   158
            self.assertEqual(user.groups, set(('managers',)))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   159
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   160
            self.assertEqual(user.groups, set(('managers', 'guests')))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   161
            cnx.execute('DELETE X in_group G WHERE X eid %s, G name "guests"' % user.eid)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   162
            self.assertEqual(user.groups, set(('managers', 'guests')))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   163
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   164
            self.assertEqual(user.groups, set(('managers',)))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   165
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
    def test_user_composite_owner(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   167
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   168
            self.create_user(cnx, 'toto').eid
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   169
            # composite of euser should be owned by the euser regardless of who created it
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   170
            cnx.execute('INSERT EmailAddress X: X address "toto@logilab.fr", U use_email X '
11367
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   171
                        'WHERE U login "toto"')
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   172
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   173
            self.assertEqual(cnx.execute('Any A WHERE X owned_by U, U use_email X,'
11367
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   174
                                         'U login "toto", X address A')[0][0],
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   175
                             'toto@logilab.fr')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   176
10182
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   177
    def test_user_composite_no_owner_on_deleted_entity(self):
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   178
        with self.admin_access.repo_cnx() as cnx:
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   179
            u = self.create_user(cnx, 'toto').eid
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   180
            cnx.commit()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   181
            e = cnx.create_entity('EmailAddress', address=u'toto@logilab.fr', reverse_use_email=u)
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   182
            e.cw_delete()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   183
            cnx.commit()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   184
            self.assertFalse(cnx.system_sql(
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   185
                'SELECT * FROM owned_by_relation '
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   186
                'WHERE eid_from NOT IN (SELECT eid FROM entities)').fetchall())
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   187
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
    def test_no_created_by_on_deleted_entity(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   189
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   190
            eid = cnx.execute('INSERT EmailAddress X: X address "toto@logilab.fr"')[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   191
            cnx.execute('DELETE EmailAddress X WHERE X eid %s' % eid)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   192
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   193
            self.assertFalse(cnx.execute('Any X WHERE X created_by Y, X eid >= %(x)s', {'x': eid}))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   194
2746
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   195
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
   196
class SchemaHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   197
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
    def test_duplicate_etype_error(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   199
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   200
            # check we can't add a CWEType or CWRType entity if it already exists one
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   201
            # with the same name
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   202
            self.assertRaises(ValidationError,
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   203
                              cnx.execute, 'INSERT CWEType X: X name "CWUser"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   204
            cnx.rollback()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   205
            self.assertRaises(ValidationError,
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   206
                              cnx.execute, 'INSERT CWRType X: X name "in_group"')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   207
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   208
    def test_validation_unique_constraint(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   209
        with self.admin_access.repo_cnx() as cnx:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   210
            with self.assertRaises(ValidationError) as cm:
11367
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   211
                cnx.execute('INSERT CWUser X: X login "admin", X upassword "admin"')
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   212
            ex = cm.exception
10724
aa3eedba866c [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10336
diff changeset
   213
            ex.translate(text_type)
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   214
            self.assertIsInstance(ex.entity, int)
11366
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   215
            self.assertEqual(ex.errors,
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   216
                             {'': u'some relations violate a unicity constraint',
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   217
                              'login': u'login is part of violated unicity constraint'})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   218
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   219
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
if __name__ == '__main__':
11367
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   221
    import unittest
5379c5dbc2c5 [test/hooks] pep8 and unittest.main instead in unittest_hooks.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11366
diff changeset
   222
    unittest.main()