cubicweb/server/test/unittest_repository.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Fri, 10 Mar 2017 18:04:25 +0100
changeset 12044 70bb46dfa87b
parent 12030 72c3af2cde23
child 12567 26744ad37953
child 12726 1a2c7d6397ec
permissions -rw-r--r--
[repo] Drop repo.new_session method we should not go through Session to create Connection anymore. This is unofficial API, no backward compat for now.
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: iso-8859-1 -*-
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11763
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
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: 5213
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5889
014ea69e5200 [test] running transaction while session is closed are now killed, update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5582
diff changeset
    19
"""unit tests for module cubicweb.server.repository"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
import time
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
    22
import logging
11228
3c9537677e73 [test] Skip test_deserialization_base (unittest_repository.SchemaDeserialTC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11225
diff changeset
    23
import unittest
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
    25
from six.moves import range
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
    26
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
from yams.constraints import UniqueConstraint
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
    28
from yams import register_base_type, unregister_base_type
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
    29
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
    30
from logilab.database import get_db_helper
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11763
diff changeset
    32
from cubicweb import (ValidationError,
6385
9f91d09ee5fa [repo transaction] fix rollback behaviour as discussed on the mailing-list: instead of rollbacking automatically on Unauthorized/ValidationError, mark the transaction as uncommitable and disallow commiting
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6364
diff changeset
    33
                      UnknownEid, AuthenticationError, Unauthorized, QueryError)
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7795
diff changeset
    34
from cubicweb.predicates import is_instance
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    35
from cubicweb.schema import RQLConstraint
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
    36
from cubicweb.devtools.testlib import CubicWebTC
1251
af40e615dc89 introduce a 'cw_' prefix on entity table and column names so we don't conflict with sql or DBMS specific keywords
sylvain.thenault@logilab.fr
parents: 17
diff changeset
    37
from cubicweb.devtools.repotest import tuplify
10236
ef3059a692cb Remove the remote repository-access-through-zmq support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10235
diff changeset
    38
from cubicweb.server import hook
1251
af40e615dc89 introduce a 'cw_' prefix on entity table and column names so we don't conflict with sql or DBMS specific keywords
sylvain.thenault@logilab.fr
parents: 17
diff changeset
    39
from cubicweb.server.sqlutils import SQL_PREFIX
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
    40
from cubicweb.server.hook import Hook
4806
4f12f59b1a13 [fti] refactor and fix full text indexation handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
    41
from cubicweb.server.sources import native
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
    44
class RepositoryTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
    """ singleton providing access to a persistent storage for entities
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
    and relation
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
    """
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    48
9130
0f1504a9fb51 [constraint] more robust unicity constraint failures reporting for end-users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9128
diff changeset
    49
    def test_unique_together_constraint(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    50
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    51
            cnx.execute('INSERT Societe S: S nom "Logilab", S type "SSLL", S cp "75013"')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    52
            with self.assertRaises(ValidationError) as wraperr:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    53
                cnx.execute('INSERT Societe S: S nom "Logilab", S type "SSLL", S cp "75013"')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    54
            self.assertEqual(
10280
2cdab5e33542 [i18n] properly translate error messages related to violated unicity constraint.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9965
diff changeset
    55
                {'cp': u'%(KEY-rtype)s is part of violated unicity constraint',
2cdab5e33542 [i18n] properly translate error messages related to violated unicity constraint.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9965
diff changeset
    56
                 'nom': u'%(KEY-rtype)s is part of violated unicity constraint',
2cdab5e33542 [i18n] properly translate error messages related to violated unicity constraint.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9965
diff changeset
    57
                 'type': u'%(KEY-rtype)s is part of violated unicity constraint',
2cdab5e33542 [i18n] properly translate error messages related to violated unicity constraint.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9965
diff changeset
    58
                 '': u'some relations violate a unicity constraint'},
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    59
                wraperr.exception.args[1])
8820
dbffb6959564 server/source/native: fix wrong usage of .lstrip that produce garbled error messages (closes #2777641)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8572
diff changeset
    60
9130
0f1504a9fb51 [constraint] more robust unicity constraint failures reporting for end-users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9128
diff changeset
    61
    def test_unique_together_schema(self):
6208
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6188
diff changeset
    62
        person = self.repo.schema.eschema('Personne')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
    63
        self.assertEqual(len(person._unique_together), 1)
11225
0f8301ea653b [test] assertItemsEqual → assertCountEqual in unittest_repository.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11195
diff changeset
    64
        self.assertCountEqual(person._unique_together[0],
0f8301ea653b [test] assertItemsEqual → assertCountEqual in unittest_repository.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11195
diff changeset
    65
                              ('nom', 'prenom', 'inline2'))
6208
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6188
diff changeset
    66
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    67
    def test_all_entities_have_owner(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    68
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    69
            self.assertFalse(cnx.execute('Any X WHERE NOT X owned_by U'))
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    70
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    71
    def test_all_entities_have_is(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    72
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    73
            self.assertFalse(cnx.execute('Any X WHERE NOT X is ET'))
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    74
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    75
    def test_all_entities_have_cw_source(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    76
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    77
            self.assertFalse(cnx.execute('Any X WHERE NOT X cw_source S'))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    78
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
    def test_connect(self):
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    80
        with self.repo.internal_cnx() as cnx:
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    81
            self.assertTrue(
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    82
                self.repo.authenticate_user(cnx, self.admlogin, password=self.admpassword))
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    83
            self.assertRaises(AuthenticationError, self.repo.authenticate_user,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    84
                              cnx, self.admlogin, password='nimportnawak')
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    85
            self.assertRaises(AuthenticationError, self.repo.authenticate_user,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    86
                              cnx, self.admlogin, password='')
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    87
            self.assertRaises(AuthenticationError, self.repo.authenticate_user,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    88
                              cnx, self.admlogin, password=None)
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    89
            self.assertRaises(AuthenticationError, self.repo.authenticate_user,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    90
                              cnx, None, password=None)
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    91
            self.assertRaises(AuthenticationError, self.repo.authenticate_user,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    92
                              cnx, self.admlogin)
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    93
            self.assertRaises(AuthenticationError, self.repo.authenticate_user,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
    94
                              cnx, None)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    95
10336
9c38f674e36f [dbapi] retire repo.execute, which was used by the dbapi
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10303
diff changeset
    96
    def test_login_upassword_accent(self):
9c38f674e36f [dbapi] retire repo.execute, which was used by the dbapi
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10303
diff changeset
    97
        with self.admin_access.repo_cnx() as cnx:
9c38f674e36f [dbapi] retire repo.execute, which was used by the dbapi
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10303
diff changeset
    98
            cnx.execute('INSERT CWUser X: X login %(login)s, X upassword %(passwd)s, '
9c38f674e36f [dbapi] retire repo.execute, which was used by the dbapi
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10303
diff changeset
    99
                        'X in_group G WHERE G name "users"',
9c38f674e36f [dbapi] retire repo.execute, which was used by the dbapi
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10303
diff changeset
   100
                        {'login': u"barnab�", 'passwd': u"h�h�h�".encode('UTF8')})
9c38f674e36f [dbapi] retire repo.execute, which was used by the dbapi
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10303
diff changeset
   101
            cnx.commit()
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
   102
            repo = self.repo
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12030
diff changeset
   103
            self.assertTrue(repo.authenticate_user(cnx, u"barnab�", password=u"h�h�h�".encode('UTF8')))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   104
6361
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   105
    def test_rollback_on_execute_validation_error(self):
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   106
        class ValidationErrorAfterHook(Hook):
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   107
            __regid__ = 'valerror-after-hook'
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   108
            __select__ = Hook.__select__ & is_instance('CWGroup')
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   109
            events = ('after_update_entity',)
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   110
            def __call__(self):
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   111
                raise ValidationError(self.entity.eid, {})
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   112
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   113
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   114
            with self.temporary_appobjects(ValidationErrorAfterHook):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   115
                self.assertRaises(ValidationError,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   116
                                  cnx.execute, 'SET X name "toto" WHERE X is CWGroup, X name "guests"')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   117
                self.assertTrue(cnx.execute('Any X WHERE X is CWGroup, X name "toto"'))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   118
                with self.assertRaises(QueryError) as cm:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   119
                    cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   120
                self.assertEqual(str(cm.exception), 'transaction must be rolled back')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   121
                cnx.rollback()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   122
                self.assertFalse(cnx.execute('Any X WHERE X is CWGroup, X name "toto"'))
6361
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   123
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   124
    def test_rollback_on_execute_unauthorized(self):
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   125
        class UnauthorizedAfterHook(Hook):
6364
ad9ed9803eb6 cleanup and micro-optimization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6361
diff changeset
   126
            __regid__ = 'unauthorized-after-hook'
6361
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   127
            __select__ = Hook.__select__ & is_instance('CWGroup')
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   128
            events = ('after_update_entity',)
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   129
            def __call__(self):
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   130
                raise Unauthorized()
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   131
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   132
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   133
            with self.temporary_appobjects(UnauthorizedAfterHook):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   134
                self.assertRaises(Unauthorized,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   135
                                  cnx.execute, 'SET X name "toto" WHERE X is CWGroup, X name "guests"')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   136
                self.assertTrue(cnx.execute('Any X WHERE X is CWGroup, X name "toto"'))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   137
                with self.assertRaises(QueryError) as cm:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   138
                    cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   139
                self.assertEqual(str(cm.exception), 'transaction must be rolled back')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   140
                cnx.rollback()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   141
                self.assertFalse(cnx.execute('Any X WHERE X is CWGroup, X name "toto"'))
6361
843684a50e48 [transaction] to avoid potential db corruption, we should rollback systematically in case of ValidationError
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   142
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   143
    def test_initial_schema(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   144
        schema = self.repo.schema
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   145
        # check order of attributes is respected
9128
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   146
        notin = set(('eid', 'is', 'is_instance_of', 'identity',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   147
                     'creation_date', 'modification_date', 'cwuri',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   148
                     'owned_by', 'created_by', 'cw_source',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   149
                     'update_permission', 'read_permission',
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9267
diff changeset
   150
                     'add_permission', 'in_basket'))
9128
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   151
        self.assertListEqual(['relation_type',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   152
                              'from_entity', 'to_entity',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   153
                              'constrained_by',
9965
a8769b752299 [CWEP002] Account for attribute formula in schema bootstrap
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9803
diff changeset
   154
                              'cardinality', 'ordernum', 'formula',
9128
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   155
                              'indexed', 'fulltextindexed', 'internationalizable',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   156
                              'defaultval', 'extra_props',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   157
                              'description', 'description_format'],
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   158
                             [r.type
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   159
                              for r in schema.eschema('CWAttribute').ordered_relations()
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   160
                              if r.type not in notin])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   161
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   162
        self.assertEqual(schema.eschema('CWEType').main_attribute(), 'name')
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   163
        self.assertEqual(schema.eschema('State').main_attribute(), 'name')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   165
        constraints = schema.rschema('name').rdef('CWEType', 'String').constraints
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   166
        self.assertEqual(len(constraints), 2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
        for cstr in constraints[:]:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
            if isinstance(cstr, UniqueConstraint):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   169
                constraints.remove(cstr)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   170
                break
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   171
        else:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   172
            self.fail('unique constraint not found')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   173
        sizeconstraint = constraints[0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   174
        self.assertEqual(sizeconstraint.min, None)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   175
        self.assertEqual(sizeconstraint.max, 64)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   176
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   177
        constraints = schema.rschema('relation_type').rdef('CWAttribute', 'CWRType').constraints
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   178
        self.assertEqual(len(constraints), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   179
        cstr = constraints[0]
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10487
diff changeset
   180
        self.assertIsInstance(cstr, RQLConstraint)
7161
e3f69df8dac7 fix failing tests before 3.12 release
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7148
diff changeset
   181
        self.assertEqual(cstr.expression, 'O final TRUE')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   182
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   183
        ownedby = schema.rschema('owned_by')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   184
        self.assertEqual(ownedby.objects('CWEType'), ('CWUser',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   185
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
    def test_public_api(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   187
        self.assertEqual(self.repo.get_schema(), self.repo.schema)
7563
8e129bb6b571 [tests] update repository tests with new `use_cwuri_as_url` attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7543
diff changeset
   188
        self.assertEqual(self.repo.source_defs(), {'system': {'type': 'native',
8e129bb6b571 [tests] update repository tests with new `use_cwuri_as_url` attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7543
diff changeset
   189
                                                              'uri': 'system',
8e129bb6b571 [tests] update repository tests with new `use_cwuri_as_url` attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7543
diff changeset
   190
                                                              'use-cwuri-as-url': False}
8e129bb6b571 [tests] update repository tests with new `use_cwuri_as_url` attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7543
diff changeset
   191
                                                  })
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   192
        # .properties() return a result set
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   193
        self.assertEqual(self.repo.properties().rql, 'Any K,V WHERE P is CWProperty,P pkey K, P value V, NOT P for_user U')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
2588
3a590ff82e99 [F schema serial] #344876: missing some 'is'/'is_instance_of' relation for newly created instances
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2200
diff changeset
   195
    def test_schema_is_relation(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   196
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   197
            no_is_rset = cnx.execute('Any X WHERE NOT X is ET')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   198
            self.assertFalse(no_is_rset, no_is_rset.description)
2588
3a590ff82e99 [F schema serial] #344876: missing some 'is'/'is_instance_of' relation for newly created instances
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2200
diff changeset
   199
2923
b97a0f8dd4dc fix test schema and update some tests to work again with wf changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   200
    def test_delete_if_singlecard1(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   201
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   202
            note = cnx.create_entity('Affaire')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   203
            p1 = cnx.create_entity('Personne', nom=u'toto')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   204
            cnx.execute('SET A todo_by P WHERE A eid %(x)s, P eid %(p)s',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   205
                        {'x': note.eid, 'p': p1.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   206
            rset = cnx.execute('Any P WHERE A todo_by P, A eid %(x)s',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   207
                               {'x': note.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   208
            self.assertEqual(len(rset), 1)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   209
            p2 = cnx.create_entity('Personne', nom=u'tutu')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   210
            cnx.execute('SET A todo_by P WHERE A eid %(x)s, P eid %(p)s',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   211
                        {'x': note.eid, 'p': p2.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   212
            rset = cnx.execute('Any P WHERE A todo_by P, A eid %(x)s',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   213
                                {'x': note.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   214
            self.assertEqual(len(rset), 1)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   215
            self.assertEqual(rset.rows[0][0], p2.eid)
2923
b97a0f8dd4dc fix test schema and update some tests to work again with wf changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   216
6188
e1c9610b2360 [integrity] fix case where we can get two entities related while the cardinality is single on the object of an inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5890
diff changeset
   217
    def test_delete_if_object_inlined_singlecard(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   218
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   219
            c = cnx.create_entity('Card', title=u'Carte')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   220
            cnx.create_entity('Personne', nom=u'Vincent', fiche=c)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   221
            cnx.create_entity('Personne', nom=u'Florent', fiche=c)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   222
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   223
            self.assertEqual(len(c.reverse_fiche), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   224
10285
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   225
    def test_delete_computed_relation_nonregr(self):
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   226
        with self.admin_access.repo_cnx() as cnx:
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   227
            c = cnx.create_entity('Personne', nom=u'Adam', login_user=cnx.user.eid)
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   228
            cnx.commit()
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   229
            c.cw_delete()
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   230
            cnx.commit()
d14db30b90d6 [repository] don't attempt to delete computed relation, they have no table in the database. Closes #5162935
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10280
diff changeset
   231
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8388
diff changeset
   232
    def test_cw_set_in_before_update(self):
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   233
        # local hook
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   234
        class DummyBeforeHook(Hook):
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   235
            __regid__ = 'dummy-before-hook'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5717
diff changeset
   236
            __select__ = Hook.__select__ & is_instance('EmailAddress')
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   237
            events = ('before_update_entity',)
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   238
            def __call__(self):
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   239
                # safety belt: avoid potential infinite recursion if the test
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   240
                #              fails (i.e. RuntimeError not raised)
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   241
                pendings = self._cw.transaction_data.setdefault('pending', set())
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   242
                if self.entity.eid not in pendings:
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   243
                    pendings.add(self.entity.eid)
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8388
diff changeset
   244
                    self.entity.cw_set(alias=u'foo')
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   245
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   246
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   247
            with self.temporary_appobjects(DummyBeforeHook):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   248
                addr = cnx.create_entity('EmailAddress', address=u'a@b.fr')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   249
                addr.cw_set(address=u'a@b.com')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   250
                rset = cnx.execute('Any A,AA WHERE X eid %(x)s, X address A, X alias AA',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   251
                                   {'x': addr.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   252
                self.assertEqual(rset.rows, [[u'a@b.com', u'foo']])
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   253
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8388
diff changeset
   254
    def test_cw_set_in_before_add(self):
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   255
        # local hook
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   256
        class DummyBeforeHook(Hook):
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   257
            __regid__ = 'dummy-before-hook'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5717
diff changeset
   258
            __select__ = Hook.__select__ & is_instance('EmailAddress')
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   259
            events = ('before_add_entity',)
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   260
            def __call__(self):
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8388
diff changeset
   261
                # cw_set is forbidden within before_add_entity()
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8388
diff changeset
   262
                self.entity.cw_set(alias=u'foo')
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   263
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   264
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   265
            with self.temporary_appobjects(DummyBeforeHook):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   266
                # XXX will fail with python -O
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   267
                self.assertRaises(AssertionError, cnx.create_entity,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   268
                                  'EmailAddress', address=u'a@b.fr')
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   269
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8388
diff changeset
   270
    def test_multiple_edit_cw_set(self):
6142
8bc6eac1fac1 [session] cleanup hook / operation / entity edition api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6030
diff changeset
   271
        """make sure cw_edited doesn't get cluttered
5213
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   272
        by previous entities on multiple set
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   273
        """
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   274
        # local hook
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   275
        class DummyBeforeHook(Hook):
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   276
            _test = self # keep reference to test instance
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   277
            __regid__ = 'dummy-before-hook'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5717
diff changeset
   278
            __select__ = Hook.__select__ & is_instance('Affaire')
5213
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   279
            events = ('before_update_entity',)
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   280
            def __call__(self):
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   281
                # invoiced attribute shouldn't be considered "edited" before the hook
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7723
diff changeset
   282
                self._test.assertFalse('invoiced' in self.entity.cw_edited,
6142
8bc6eac1fac1 [session] cleanup hook / operation / entity edition api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6030
diff changeset
   283
                                  'cw_edited cluttered by previous update')
8bc6eac1fac1 [session] cleanup hook / operation / entity edition api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6030
diff changeset
   284
                self.entity.cw_edited['invoiced'] = 10
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   285
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   286
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   287
            with self.temporary_appobjects(DummyBeforeHook):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   288
                cnx.create_entity('Affaire', ref=u'AFF01')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   289
                cnx.create_entity('Affaire', ref=u'AFF02')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   290
                cnx.execute('SET A duration 10 WHERE A is Affaire')
5213
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   291
9226
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   292
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   293
    def test_user_friendly_error(self):
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   294
        from cubicweb.entities.adapters import IUserFriendlyUniqueTogether
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   295
        class MyIUserFriendlyUniqueTogether(IUserFriendlyUniqueTogether):
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   296
            __select__ = IUserFriendlyUniqueTogether.__select__ & is_instance('Societe')
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   297
            def raise_user_exception(self):
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   298
                raise ValidationError(self.entity.eid, {'hip': 'hop'})
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   299
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   300
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   301
            with self.temporary_appobjects(MyIUserFriendlyUniqueTogether):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   302
                s = cnx.create_entity('Societe', nom=u'Logilab', type=u'ssll', cp=u'75013')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   303
                cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   304
                with self.assertRaises(ValidationError) as cm:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   305
                    cnx.create_entity('Societe', nom=u'Logilab', type=u'ssll', cp=u'75013')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   306
                self.assertEqual(cm.exception.errors, {'hip': 'hop'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   307
                cnx.rollback()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   308
                cnx.create_entity('Societe', nom=u'Logilab', type=u'ssll', cp=u'31400')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   309
                with self.assertRaises(ValidationError) as cm:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   310
                    s.cw_set(cp=u'31400')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   311
                self.assertEqual(cm.exception.entity, s.eid)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   312
                self.assertEqual(cm.exception.errors, {'hip': 'hop'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   313
                cnx.rollback()
9226
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   314
10998
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   315
    def test_attribute_cache(self):
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   316
        with self.admin_access.repo_cnx() as cnx:
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   317
            bk = cnx.create_entity('Bookmark', title=u'index', path=u'/')
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   318
            cnx.commit()
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   319
            self.assertEqual(bk.title, 'index')
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   320
            bk.cw_set(title=u'root')
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   321
            self.assertEqual(bk.title, 'root')
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   322
            cnx.commit()
5b646ab6821b [server] add test demonstrating cache update pb since cw > 3.21
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10609
diff changeset
   323
            self.assertEqual(bk.title, 'root')
9226
653f1d4a1101 [repository] properly use IUserFriendlyError when UniqueTogetherError is raised during entity update. Closes #3096638
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9130
diff changeset
   324
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   325
class SchemaDeserialTC(CubicWebTC):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   326
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   327
    appid = 'data-schemaserial'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   328
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   329
    @classmethod
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   330
    def setUpClass(cls):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   331
        register_base_type('BabarTestType', ('jungle_speed',))
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   332
        helper = get_db_helper('sqlite')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   333
        helper.TYPE_MAPPING['BabarTestType'] = 'TEXT'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   334
        helper.TYPE_CONVERTERS['BabarTestType'] = lambda x: '"%s"' % x
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   335
        super(SchemaDeserialTC, cls).setUpClass()
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   336
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   337
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   338
    @classmethod
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   339
    def tearDownClass(cls):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   340
        unregister_base_type('BabarTestType')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   341
        helper = get_db_helper('sqlite')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   342
        helper.TYPE_MAPPING.pop('BabarTestType', None)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   343
        helper.TYPE_CONVERTERS.pop('BabarTestType', None)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   344
        super(SchemaDeserialTC, cls).tearDownClass()
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   345
8947
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   346
    def test_deserialization_base(self):
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   347
        """Check the following deserialization
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   348
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   349
        * all CWEtype has name
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   350
        * Final type
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   351
        * CWUniqueTogetherConstraint
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   352
        * _unique_together__ content"""
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   353
        origshema = self.repo.schema
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   354
        try:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   355
            self.repo.config.repairing = True # avoid versions checking
8947
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   356
            self.repo.set_schema(self.repo.deserialize_schema())
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   357
            table = SQL_PREFIX + 'CWEType'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   358
            namecol = SQL_PREFIX + 'name'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   359
            finalcol = SQL_PREFIX + 'final'
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   360
            with self.admin_access.repo_cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   361
                cu = cnx.system_sql('SELECT %s FROM %s WHERE %s is NULL'
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   362
                                    % (namecol, table, finalcol))
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   363
                self.assertEqual(cu.fetchall(), [])
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   364
                cu = cnx.system_sql('SELECT %s FROM %s '
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   365
                                    'WHERE %s=%%(final)s ORDER BY %s'
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   366
                                    % (namecol, table, finalcol, namecol),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   367
                                    {'final': True})
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   368
                self.assertEqual(cu.fetchall(),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   369
                                 [(u'BabarTestType',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   370
                                  (u'BigInt',), (u'Boolean',), (u'Bytes',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   371
                                  (u'Date',), (u'Datetime',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   372
                                  (u'Decimal',),(u'Float',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   373
                                  (u'Int',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   374
                                  (u'Interval',), (u'Password',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   375
                                  (u'String',),
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   376
                                  (u'TZDatetime',), (u'TZTime',), (u'Time',)])
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   377
                sql = ("SELECT etype.cw_eid, etype.cw_name, cstr.cw_eid, rel.eid_to "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   378
                       "FROM cw_CWUniqueTogetherConstraint as cstr, "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   379
                       "     relations_relation as rel, "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   380
                       "     cw_CWEType as etype "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   381
                       "WHERE cstr.cw_eid = rel.eid_from "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   382
                       "  AND cstr.cw_constraint_of = etype.cw_eid "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   383
                       "  AND etype.cw_name = 'Personne' "
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   384
                       ";")
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   385
                cu = cnx.system_sql(sql)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   386
                rows = cu.fetchall()
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   387
                self.assertEqual(len(rows), 3)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   388
                person = self.repo.schema.eschema('Personne')
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   389
                self.assertEqual(len(person._unique_together), 1)
11225
0f8301ea653b [test] assertItemsEqual → assertCountEqual in unittest_repository.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11195
diff changeset
   390
                self.assertCountEqual(person._unique_together[0],
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   391
                                      ('nom', 'prenom', 'inline2'))
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   392
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   393
        finally:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   394
            self.repo.set_schema(origshema)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   395
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   396
    def test_custom_attribute_param(self):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   397
        origshema = self.repo.schema
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   398
        try:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   399
            self.repo.config.repairing = True # avoid versions checking
8947
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   400
            self.repo.set_schema(self.repo.deserialize_schema())
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   401
            pes = self.repo.schema['Personne']
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   402
            attr = pes.rdef('custom_field_of_jungle')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   403
            self.assertIn('jungle_speed', vars(attr))
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   404
            self.assertEqual(42, attr.jungle_speed)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   405
        finally:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   406
            self.repo.set_schema(origshema)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   407
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   408
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   409
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   410
class DataHelpersTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   411
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   412
    def test_type_from_eid(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   413
        with self.admin_access.repo_cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   414
            self.assertEqual(self.repo.type_from_eid(2, cnx), 'CWGroup')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   415
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   416
    def test_type_from_eid_raise(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   417
        with self.admin_access.repo_cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   418
            self.assertRaises(UnknownEid, self.repo.type_from_eid, -2, cnx)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   419
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   420
    def test_add_delete_info(self):
9802
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   421
        with self.admin_access.repo_cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   422
            entity = self.repo.vreg['etypes'].etype_class('Personne')(cnx)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   423
            entity.eid = -1
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   424
            entity.complete = lambda x: None
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   425
            self.repo.add_info(cnx, entity, self.repo.system_source)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   426
            cu = cnx.system_sql('SELECT * FROM entities WHERE eid = -1')
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   427
            data = cu.fetchall()
11774
51c160677afe [repository] Drop the entities.extid column and associated cache
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11773
diff changeset
   428
            self.assertEqual(tuplify(data), [(-1, 'Personne')])
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   429
            self.repo._delete_cascade_multi(cnx, [entity])
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   430
            self.repo.system_source.delete_info_multi(cnx, [entity])
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   431
            cu = cnx.system_sql('SELECT * FROM entities WHERE eid = -1')
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   432
            data = cu.fetchall()
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10346
diff changeset
   433
            self.assertEqual(data, [])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   434
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   435
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   436
class FTITC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   437
4806
4f12f59b1a13 [fti] refactor and fix full text indexation handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   438
    def test_fulltext_container_entity(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   439
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   440
            assert self.schema.rschema('use_email').fulltext_container == 'subject'
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   441
            toto = cnx.create_entity('EmailAddress', address=u'toto@logilab.fr')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   442
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   443
            rset = cnx.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   444
            self.assertEqual(rset.rows, [])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   445
            cnx.user.cw_set(use_email=toto)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   446
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   447
            rset = cnx.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   448
            self.assertEqual(rset.rows, [[cnx.user.eid]])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   449
            cnx.execute('DELETE X use_email Y WHERE X login "admin", Y eid %(y)s',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   450
                        {'y': toto.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   451
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   452
            rset = cnx.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   453
            self.assertEqual(rset.rows, [])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   454
            tutu = cnx.create_entity('EmailAddress', address=u'tutu@logilab.fr')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   455
            cnx.user.cw_set(use_email=tutu)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   456
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   457
            rset = cnx.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   458
            self.assertEqual(rset.rows, [[cnx.user.eid]])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   459
            tutu.cw_set(address=u'hip@logilab.fr')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   460
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   461
            rset = cnx.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   462
            self.assertEqual(rset.rows, [])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   463
            rset = cnx.execute('Any X WHERE X has_text %(t)s', {'t': 'hip'})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   464
            self.assertEqual(rset.rows, [[cnx.user.eid]])
4806
4f12f59b1a13 [fti] refactor and fix full text indexation handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   465
4f12f59b1a13 [fti] refactor and fix full text indexation handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   466
    def test_no_uncessary_ftiindex_op(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   467
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   468
            cnx.create_entity('Workflow',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   469
                              name=u'dummy workflow',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   470
                              description=u'huuuuu')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   471
            self.assertFalse(any(x for x in cnx.pending_operations
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   472
                                 if isinstance(x, native.FTIndexEntityOp)))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   473
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   474
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   475
class DBInitTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   476
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   477
    def test_versions_inserted(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   478
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   479
            inserted = [r[0]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   480
                        for r in cnx.execute('Any K ORDERBY K '
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   481
                                             'WHERE P pkey K, P pkey ~= "system.version.%"')]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   482
            self.assertEqual(inserted,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   483
                             [u'system.version.basket',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   484
                              u'system.version.card',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   485
                              u'system.version.comment',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   486
                              u'system.version.cubicweb',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   487
                              u'system.version.file',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   488
                              u'system.version.localperms',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   489
                              u'system.version.tag'])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   490
3445
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   491
CALLED = []
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   492
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   493
class InlineRelHooksTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   494
    """test relation hooks are called for inlined relations
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   495
    """
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   496
    def setUp(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   497
        CubicWebTC.setUp(self)
3445
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   498
        CALLED[:] = ()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   499
3445
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   500
    def test_inline_relation(self):
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   501
        """make sure <event>_relation hooks are called for inlined relation"""
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   502
4766
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   503
        class EcritParHook(hook.Hook):
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   504
            __regid__ = 'inlinedrelhook'
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   505
            __select__ = hook.Hook.__select__ & hook.match_rtype('ecrit_par')
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   506
            events = ('before_add_relation', 'after_add_relation',
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   507
                      'before_delete_relation', 'after_delete_relation')
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   508
            def __call__(self):
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   509
                CALLED.append((self.event, self.eidfrom, self.rtype, self.eidto))
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   510
5105
57e0fc953676 [test] use new temporary_appobjects context manager
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5103
diff changeset
   511
        with self.temporary_appobjects(EcritParHook):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   512
            with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   513
                eidp = cnx.execute('INSERT Personne X: X nom "toto"')[0][0]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   514
                eidn = cnx.execute('INSERT Note X: X type "T"')[0][0]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   515
                cnx.execute('SET N ecrit_par Y WHERE N type "T", Y nom "toto"')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   516
                self.assertEqual(CALLED, [('before_add_relation', eidn, 'ecrit_par', eidp),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   517
                                          ('after_add_relation', eidn, 'ecrit_par', eidp)])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   518
                CALLED[:] = ()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   519
                cnx.execute('DELETE N ecrit_par Y WHERE N type "T", Y nom "toto"')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   520
                self.assertEqual(CALLED, [('before_delete_relation', eidn, 'ecrit_par', eidp),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   521
                                          ('after_delete_relation', eidn, 'ecrit_par', eidp)])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   522
                CALLED[:] = ()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   523
                eidn = cnx.execute('INSERT Note N: N ecrit_par P WHERE P nom "toto"')[0][0]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   524
                self.assertEqual(CALLED, [('before_add_relation', eidn, 'ecrit_par', eidp),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   525
                                          ('after_add_relation', eidn, 'ecrit_par', eidp)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   526
6236
9138f23ee263 [repo tests] add test case for RQLUniqueConstraint
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   527
    def test_unique_contraint(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   528
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   529
            toto = cnx.create_entity('Personne', nom=u'toto')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   530
            a01 = cnx.create_entity('Affaire', ref=u'A01', todo_by=toto)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   531
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   532
            cnx.create_entity('Note', type=u'todo', inline1=a01)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   533
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   534
            cnx.create_entity('Note', type=u'todo', inline1=a01)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   535
            with self.assertRaises(ValidationError) as cm:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   536
                cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   537
            self.assertEqual(cm.exception.errors,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   538
                             {'inline1-subject': u'RQLUniqueConstraint S type T, S inline1 A1, '
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   539
                              'A1 todo_by C, Y type T, Y inline1 A2, A2 todo_by C failed'})
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   540
7238
576abb8c4626 fix implementation of repository.glob_add_relations (closes ##1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7237
diff changeset
   541
    def test_add_relations_at_creation_with_del_existing_rel(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   542
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   543
            person = cnx.create_entity('Personne',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   544
                                       nom=u'Toto',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   545
                                       prenom=u'Lanturlu',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   546
                                       sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   547
            users_rql = 'Any U WHERE U is CWGroup, U name "users"'
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   548
            users = cnx.execute(users_rql).get_entity(0, 0)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   549
            cnx.create_entity('CWUser',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   550
                              login=u'Toto',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   551
                              upassword=u'firstname',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   552
                              firstname=u'firstname',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   553
                              surname=u'surname',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   554
                              reverse_login_user=person,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   555
                              in_group=users)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   556
            cnx.commit()
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   557
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   558
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   559
class PerformanceTest(CubicWebTC):
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   560
    def setUp(self):
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   561
        super(PerformanceTest, self).setUp()
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   562
        logger = logging.getLogger('cubicweb.session')
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   563
        #logger.handlers = [logging.StreamHandler(sys.stdout)]
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   564
        logger.setLevel(logging.INFO)
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   565
        self.info = logger.info
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   566
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   567
    def tearDown(self):
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   568
        super(PerformanceTest, self).tearDown()
7382
91061a22755d fix name error introduced in previous changeset
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7381
diff changeset
   569
        logger = logging.getLogger('cubicweb.session')
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   570
        logger.setLevel(logging.CRITICAL)
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   571
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   572
    def test_composite_deletion(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   573
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   574
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   575
            t0 = time.time()
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   576
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   577
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   578
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   579
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   580
            for j in range(0, 2000, 100):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   581
                abraham.cw_set(personne_composite=personnes[j:j+100])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   582
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   583
            self.info('creation: %.2gs', (t1 - t0))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   584
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   585
            t2 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   586
            self.info('commit creation: %.2gs', (t2 - t1))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   587
            cnx.execute('DELETE Personne P WHERE P eid %(eid)s', {'eid': abraham.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   588
            t3 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   589
            self.info('deletion: %.2gs', (t3 - t2))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   590
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   591
            t4 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   592
            self.info("commit deletion: %2gs", (t4 - t3))
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   593
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   594
    def test_add_relation_non_inlined(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   595
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   596
            personnes = []
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   597
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   598
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   599
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   600
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   601
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   602
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   603
                                        personne_composite=personnes[:100])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   604
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   605
            self.info('creation: %.2gs', (t1 - t0))
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   606
            for j in range(100, 2000, 100):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   607
                abraham.cw_set(personne_composite=personnes[j:j+100])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   608
            t2 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   609
            self.info('more relations: %.2gs', (t2-t1))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   610
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   611
            t3 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   612
            self.info('commit creation: %.2gs', (t3 - t2))
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   613
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   614
    def test_add_relation_inlined(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   615
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   616
            personnes = []
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   617
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   618
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   619
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   620
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   621
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   622
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   623
                                        personne_inlined=personnes[:100])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   624
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   625
            self.info('creation: %.2gs', (t1 - t0))
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   626
            for j in range(100, 2000, 100):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   627
                abraham.cw_set(personne_inlined=personnes[j:j+100])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   628
            t2 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   629
            self.info('more relations: %.2gs', (t2-t1))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   630
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   631
            t3 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   632
            self.info('commit creation: %.2gs', (t3 - t2))
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   633
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   634
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   635
    def test_session_add_relation(self):
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   636
        """ to be compared with test_session_add_relations"""
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   637
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   638
            personnes = []
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   639
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   640
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   641
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   642
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   643
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   644
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   645
            add_relation = cnx.add_relation
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   646
            for p in personnes:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   647
                add_relation(abraham.eid, 'personne_composite', p.eid)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   648
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   649
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   650
            self.info('add relation: %.2gs', t1-t0)
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   651
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   652
    def test_session_add_relations (self):
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   653
        """ to be compared with test_session_add_relation"""
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   654
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   655
            personnes = []
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   656
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   657
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   658
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   659
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   660
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   661
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   662
            add_relations = cnx.add_relations
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   663
            relations = [('personne_composite', [(abraham.eid, p.eid) for p in personnes])]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   664
            add_relations(relations)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   665
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   666
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   667
            self.info('add relations: %.2gs', t1-t0)
7543
570522300e22 [ms, entity metas] add 'actual source' to entities table / base entity metadata cache. Closes #1767090
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7539
diff changeset
   668
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   669
    def test_session_add_relation_inlined(self):
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   670
        """ to be compared with test_session_add_relations"""
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   671
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   672
            personnes = []
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   673
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   674
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   675
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   676
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   677
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   678
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   679
            add_relation = cnx.add_relation
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   680
            for p in personnes:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   681
                add_relation(abraham.eid, 'personne_inlined', p.eid)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   682
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   683
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   684
            self.info('add relation (inlined): %.2gs', t1-t0)
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   685
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   686
    def test_session_add_relations_inlined (self):
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   687
        """ to be compared with test_session_add_relation"""
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   688
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   689
            personnes = []
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
   690
            for i in range(2000):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   691
                p = cnx.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   692
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   693
            abraham = cnx.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   694
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   695
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   696
            add_relations = cnx.add_relations
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   697
            relations = [('personne_inlined', [(abraham.eid, p.eid) for p in personnes])]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   698
            add_relations(relations)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   699
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   700
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   701
            self.info('add relations (inlined): %.2gs', t1-t0)
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   702
7513
8f4422391e5a [repo integrity] test and fix glob add relation where several entities are added at once for a relation of 1? cardinality
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   703
    def test_optional_relation_reset_1(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   704
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   705
            p1 = cnx.create_entity('Personne', nom=u'Vincent')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   706
            p2 = cnx.create_entity('Personne', nom=u'Florent')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   707
            w = cnx.create_entity('Affaire', ref=u'wc')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   708
            w.cw_set(todo_by=[p1,p2])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   709
            w.cw_clear_all_caches()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   710
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   711
            self.assertEqual(len(w.todo_by), 1)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   712
            self.assertEqual(w.todo_by[0].eid, p2.eid)
7513
8f4422391e5a [repo integrity] test and fix glob add relation where several entities are added at once for a relation of 1? cardinality
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   713
8f4422391e5a [repo integrity] test and fix glob add relation where several entities are added at once for a relation of 1? cardinality
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   714
    def test_optional_relation_reset_2(self):
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   715
        with self.admin_access.repo_cnx() as cnx:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   716
            p1 = cnx.create_entity('Personne', nom=u'Vincent')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   717
            p2 = cnx.create_entity('Personne', nom=u'Florent')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   718
            w = cnx.create_entity('Affaire', ref=u'wc')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   719
            w.cw_set(todo_by=p1)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   720
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   721
            w.cw_set(todo_by=p2)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   722
            w.cw_clear_all_caches()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   723
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   724
            self.assertEqual(len(w.todo_by), 1)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   725
            self.assertEqual(w.todo_by[0].eid, p2.eid)
7238
576abb8c4626 fix implementation of repository.glob_add_relations (closes ##1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7237
diff changeset
   726
576abb8c4626 fix implementation of repository.glob_add_relations (closes ##1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7237
diff changeset
   727
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   728
if __name__ == '__main__':
11228
3c9537677e73 [test] Skip test_deserialization_base (unittest_repository.SchemaDeserialTC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11225
diff changeset
   729
    unittest.main()