hooks/test/unittest_hooks.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 25 Feb 2015 17:13:46 +0100
changeset 10219 eacb8ea38bf5
parent 10187 0df931eb08de
child 10336 9c38f674e36f
permissions -rw-r--r--
[devtools] add a method on CubicWebTC to fake data posted by standard cw forms. Closes #4985805
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
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
    27
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
    28
from cubicweb.devtools.testlib import CubicWebTC
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    29
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
    30
class CoreHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    31
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
    def test_inlined(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    33
        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
    34
            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
    35
            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
    36
            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
    37
                        'X content "this is a test"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    38
            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
    39
                               '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
    40
                               '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
    41
            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
    42
            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
    43
            self.assertEqual(len(rset), 1)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    44
9361
0542a85fe667 symmetric relations: replace bogus rql2sql translation by a hook
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8694
diff changeset
    45
    def test_symmetric(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    46
        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
    47
            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
    48
            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
    49
            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
    50
            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
    51
            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
    52
            u1.cw_set(friend=u2)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    53
            u2.cw_set(friend=u3)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    54
            ga.cw_set(friend=gb)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    55
            ga.cw_set(friend=u1)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    56
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    57
            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
    58
                           (u'2', u'3')):
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    59
                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
    60
                                            {'l1': l1, 'l2': l2}))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    61
                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
    62
                                            {'l1': l1, 'l2': l2}))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    63
            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
    64
            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
    65
            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
    66
            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
    67
            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
    68
            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
    69
                           (u'3', u'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 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
    71
                                             {'l1': l1, 'l2': l2}))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    72
                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
    73
                                             {'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
    74
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
    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
    76
        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
    77
            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
    78
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    79
                                       description=u'yo')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    80
            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
    81
            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
    82
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    83
                                       description=u'<b>yo')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    84
            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
    85
            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
    86
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    87
                                       description=u'<b>yo</b>')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    88
            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
    89
            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
    90
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    91
                                       description=u'<b>R&D</b>')
10085
dc315002a2d4 [hookstests] change got/expected order
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9935
diff changeset
    92
            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
    93
            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
    94
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
    95
                                       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
    96
            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
    97
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
    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
    99
        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
   100
            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
   101
                                       description_format=u'text/html',
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   102
                                       description=u'yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   103
            entity.cw_set(name=u'wf2')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   104
            self.assertEqual(entity.description, u'yo')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   105
            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
   106
            self.assertEqual(entity.description, u'R&amp;D<p>yo</p>')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   107
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   108
    def test_metadata_cwuri(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   109
        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
   110
            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
   111
            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
   112
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   113
    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
   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
            _now = datetime.now()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   116
            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
   117
            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
   118
            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
   119
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   120
    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
   121
        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
   122
            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
   123
            cnx.commit() # fire operations
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   124
            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
   125
            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
   126
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   127
    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
   128
        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
   129
            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
   130
            cnx.commit() # fire operations
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   131
            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
   132
            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
   133
4051
eec34250a645 move hook tests to hooks package tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3536
diff changeset
   134
    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
   135
        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
   136
            u = self.create_user(cnx, '  joe  ')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   137
            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
   138
                                {'e': u.eid})[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   139
            self.assertEqual(tname, 'joe')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   140
            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
   141
            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
   142
                                {'e': u.eid})[0][0]
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   143
            self.assertEqual(tname, 'jijoe')
4051
eec34250a645 move hook tests to hooks package tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3536
diff changeset
   144
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   145
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   146
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
   147
class UserGroupHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   148
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   149
    def test_user_synchronization(self):
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   150
        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
   151
            self.create_user(cnx, 'toto', password='hop', commit=False)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   152
            self.assertRaises(AuthenticationError,
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   153
                              self.repo.connect, u'toto', password='hop')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   154
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   155
            cnxid = self.repo.connect(u'toto', password='hop')
9935
d1adf549d5cb [test] silence a few more deprecation warnings in unittest_hooks
Julien Cristau <julien.cristau@logilab.fr>
parents: 9853
diff changeset
   156
            self.assertNotEqual(cnxid, cnx.sessionid)
9852
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   157
            cnx.execute('DELETE CWUser X WHERE X login "toto"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   158
            self.repo.execute(cnxid, 'State X')
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.assertRaises(BadConnectionId,
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   161
                              self.repo.execute, cnxid, 'State X')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   162
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   163
    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
   164
        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
   165
            user = cnx.user
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   166
            self.assertEqual(user.groups, set(('managers',)))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   167
            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
   168
            self.assertEqual(user.groups, set(('managers',)))
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   169
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   170
            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
   171
            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
   172
            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
   173
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   174
            self.assertEqual(user.groups, set(('managers',)))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   175
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   176
    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
   177
        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
   178
            self.create_user(cnx, 'toto').eid
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   179
            # 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
   180
            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
   181
                         'WHERE U login "toto"')
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   182
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   183
            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
   184
                                           '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
   185
                              'toto@logilab.fr')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
10182
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   187
    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
   188
        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
   189
            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
   190
            cnx.commit()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   191
            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
   192
            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
   193
            cnx.commit()
116b24efad0e [hooks] don't insert an owned_by relation for deleted entities
Julien Cristau <julien.cristau@logilab.fr>
parents: 9935
diff changeset
   194
            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
   195
                '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
   196
                '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
   197
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
    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
   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
            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
   201
            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
   202
            cnx.commit()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   203
            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
   204
2746
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   205
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   206
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2746
diff changeset
   207
class SchemaHooksTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   208
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
    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
   210
        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
   211
            # 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
   212
            # with the same name
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   213
            self.assertRaises(ValidationError,
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   214
                              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
   215
            cnx.rollback()
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   216
            self.assertRaises(ValidationError,
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   217
                              cnx.execute, 'INSERT CWRType X: X name "in_group"')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   218
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   219
    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
   220
        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
   221
            with self.assertRaises(ValidationError) as cm:
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   222
                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
   223
            ex = cm.exception
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   224
            ex.translate(unicode)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   225
            self.assertIsInstance(ex.entity, int)
4c1969c173fa [hookstests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9361
diff changeset
   226
            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
   227
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   228
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   229
if __name__ == '__main__':
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6798
diff changeset
   230
    from logilab.common.testlib import unittest_main
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   231
    unittest_main()