hooks/test/unittest_hooks.py
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 05 Oct 2015 16:54:12 +0200
changeset 10772 2ff5afce3216
parent 10724 aa3eedba866c
child 11033 63d860a14a17
permissions -rw-r--r--
[web/test] unicode → cubicweb._
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 -*-
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
     2
# copyright 2003-2014 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
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
    29
from cubicweb import ValidationError, AuthenticationError, BadConnectionId
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
    30
from cubicweb.devtools.testlib import CubicWebTC
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    31
10724
aa3eedba866c [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10336
diff changeset
    32
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
    33
class CoreHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    34
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
    def test_inlined(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    36
        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
    37
            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
    38
            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
    39
            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
    40
                        'X content "this is a test"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    41
            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
    42
                               '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
    43
                               '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
    44
            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
    45
            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
    46
            self.assertEqual(len(rset), 1)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    47
9361
0542a85fe667 symmetric relations: replace bogus rql2sql translation by a hook
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8694
diff changeset
    48
    def test_symmetric(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    49
        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
    50
            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
    51
            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
    52
            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
    53
            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
    54
            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
    55
            u1.cw_set(friend=u2)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    56
            u2.cw_set(friend=u3)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    57
            ga.cw_set(friend=gb)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    58
            ga.cw_set(friend=u1)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    59
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    60
            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
    61
                           (u'2', u'3')):
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    62
                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
    63
                                            {'l1': l1, 'l2': l2}))
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 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
    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 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
    67
            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
    68
            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
    69
            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
    70
            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
    71
            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
    72
                           (u'3', u'1')):
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    73
                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
    74
                                             {'l1': l1, 'l2': l2}))
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 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
    76
                                             {'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
    77
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
    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
    79
        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
    80
            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
    81
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    82
                                       description=u'yo')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    83
            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
    84
            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
    85
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    86
                                       description=u'<b>yo')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    87
            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
    88
            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
    89
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    90
                                       description=u'<b>yo</b>')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    91
            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
    92
            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
    93
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    94
                                       description=u'<b>R&D</b>')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    95
            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
    96
            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
    97
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    98
                                       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
    99
            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
   100
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
    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
   102
        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
   103
            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
   104
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   105
                                       description=u'yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   106
            entity.cw_set(name=u'wf2')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   107
            self.assertEqual(entity.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(description=u'R&D<p>yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   109
            self.assertEqual(entity.description, u'R&amp;D<p>yo</p>')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   110
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   111
    def test_metadata_cwuri(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   112
        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
   113
            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
   114
            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
   115
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   116
    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
   117
        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
   118
            _now = datetime.now()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   119
            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
   120
            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
   121
            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
   122
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   123
    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
   124
        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
   125
            entity = cnx.create_entity('Bookmark', title=u'wf1', path=u'/view')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   126
            cnx.commit() # fire operations
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   127
            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
   128
            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
   129
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   130
    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
   131
        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
   132
            entity = cnx.create_entity('Bookmark', title=u'wf1', path=u'/view')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   133
            cnx.commit() # fire operations
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   134
            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
   135
            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
   136
4051
eec34250a645 move hook tests to hooks package tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3536
diff changeset
   137
    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
   138
        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
   139
            u = self.create_user(cnx, '  joe  ')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   140
            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
   141
                                {'e': u.eid})[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   142
            self.assertEqual(tname, 'joe')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   143
            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
   144
            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
   145
                                {'e': u.eid})[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   146
            self.assertEqual(tname, 'jijoe')
4051
eec34250a645 move hook tests to hooks package tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3536
diff changeset
   147
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   148
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   149
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
   150
class UserGroupHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   151
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   152
    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
   153
        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
   154
            user = cnx.user
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   155
            self.assertEqual(user.groups, set(('managers',)))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   156
            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
   157
            self.assertEqual(user.groups, set(('managers',)))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   158
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   159
            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
   160
            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
   161
            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
   162
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   163
            self.assertEqual(user.groups, set(('managers',)))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   165
    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
   166
        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
   167
            self.create_user(cnx, 'toto').eid
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   168
            # 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
   169
            cnx.execute('INSERT EmailAddress X: X address "toto@logilab.fr", U use_email X '
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   170
                         'WHERE U login "toto"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   171
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   172
            self.assertEqual(cnx.execute('Any A WHERE X owned_by U, U use_email X,'
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   173
                                           'U login "toto", X address A')[0][0],
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   174
                              'toto@logilab.fr')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   175
10182
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   176
    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
   177
        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
   178
            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
   179
            cnx.commit()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   180
            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
   181
            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
   182
            cnx.commit()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   183
            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
   184
                '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
   185
                '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
   186
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
    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
   188
        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
   189
            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
   190
            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
   191
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   192
            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
   193
2746
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   194
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
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:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   211
                cnx.execute('INSERT CWUser X: X login "admin"')
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)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   215
            self.assertEqual(ex.errors, {'login-subject': 'the value "admin" is already used, use another one'})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   216
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   217
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   218
if __name__ == '__main__':
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6798
diff changeset
   219
    from logilab.common.testlib import unittest_main
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
    unittest_main()