server/test/unittest_repository.py
author Rémi Cardona <remi.cardona@logilab.fr>
Wed, 22 Apr 2015 10:08:14 +0200
changeset 10301 729f36a1bcfa
parent 10236 ef3059a692cb
parent 10285 d14db30b90d6
child 10303 593e63a68429
permissions -rw-r--r--
merge 3.20.6 into 3.21
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 -*-
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
     2
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 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 threading
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
import time
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
    23
import logging
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
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
    26
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
    27
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
    28
from logilab.database import get_db_helper
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
    30
from cubicweb import (BadConnectionId, 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
    31
                      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
    32
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
    33
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
    34
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
    35
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
    36
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
    37
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
    38
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
    39
from cubicweb.server.sources import native
8999
81a5d57d9230 [session] upgrade session closed error from Exception to SessionClosedError
pierre-yves
parents: 8947
diff changeset
    40
from cubicweb.server.session import SessionClosedError
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
    43
class RepositoryTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
    """ singleton providing access to a persistent storage for entities
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
    and relation
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
    """
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    47
9130
0f1504a9fb51 [constraint] more robust unicity constraint failures reporting for end-users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9128
diff changeset
    48
    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
    49
        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
    50
            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
    51
            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
    52
                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
    53
            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
    54
                {'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
    55
                 '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
    56
                 '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
    57
                 '': 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
    58
                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
    59
9130
0f1504a9fb51 [constraint] more robust unicity constraint failures reporting for end-users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9128
diff changeset
    60
    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
    61
        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
    62
        self.assertEqual(len(person._unique_together), 1)
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.assertItemsEqual(person._unique_together[0],
6208
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6188
diff changeset
    64
                                           ('nom', 'prenom', 'inline2'))
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6188
diff changeset
    65
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    66
    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
    67
        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
    68
            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
    69
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    70
    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
    71
        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
    72
            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
    73
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
    74
    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
    75
        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
    76
            self.assertFalse(cnx.execute('Any X WHERE NOT X cw_source S'))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    77
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
    def test_connect(self):
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
    79
        cnxid = self.repo.connect(self.admlogin, password=self.admpassword)
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
    80
        self.assert_(cnxid)
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
    81
        self.repo.close(cnxid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
        self.assertRaises(AuthenticationError,
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    83
                          self.repo.connect, self.admlogin, password='nimportnawak')
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    84
        self.assertRaises(AuthenticationError,
8520
fcd048fa6e6d [source/native] only system source users should be authenticated by the native source (closes #2465883)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8388
diff changeset
    85
                          self.repo.connect, self.admlogin, password='')
fcd048fa6e6d [source/native] only system source users should be authenticated by the native source (closes #2465883)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8388
diff changeset
    86
        self.assertRaises(AuthenticationError,
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    87
                          self.repo.connect, self.admlogin, password=None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
        self.assertRaises(AuthenticationError,
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    89
                          self.repo.connect, None, password=None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
        self.assertRaises(AuthenticationError,
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    91
                          self.repo.connect, self.admlogin)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
        self.assertRaises(AuthenticationError,
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    93
                          self.repo.connect, None)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    94
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
    def test_execute(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    97
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
        repo.execute(cnxid, 'Any X')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
        repo.execute(cnxid, 'Any X where X is Personne')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
        repo.execute(cnxid, 'Any X where X is Personne, X nom ~= "to"')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
        repo.execute(cnxid, 'Any X WHERE X has_text %(text)s', {'text': u'\xe7a'})
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
        repo.close(cnxid)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   103
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   104
    def test_login_upassword_accent(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   106
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   107
        repo.execute(cnxid, 'INSERT CWUser X: X login %(login)s, X upassword %(passwd)s, X in_group G WHERE G name "users"',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   108
                     {'login': u"barnab�", 'passwd': u"h�h�h�".encode('UTF8')})
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   109
        repo.commit(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
        repo.close(cnxid)
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   111
        cnxid = repo.connect(u"barnab�", password=u"h�h�h�".encode('UTF8'))
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   112
        self.assert_(cnxid)
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   113
        repo.close(cnxid)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   114
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
   115
    def test_rollback_on_commit_error(self):
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   116
        cnxid = self.repo.connect(self.admlogin, password=self.admpassword)
3771
234b003f0fe0 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2923
diff changeset
   117
        self.repo.execute(cnxid,
234b003f0fe0 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2923
diff changeset
   118
                          'INSERT CWUser X: X login %(login)s, X upassword %(passwd)s',
234b003f0fe0 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2923
diff changeset
   119
                          {'login': u"tutetute", 'passwd': 'tutetute'})
234b003f0fe0 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2923
diff changeset
   120
        self.assertRaises(ValidationError, self.repo.commit, cnxid)
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7723
diff changeset
   121
        self.assertFalse(self.repo.execute(cnxid, 'CWUser X WHERE X login "tutetute"'))
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   122
        self.repo.close(cnxid)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   123
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
   124
    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
   125
        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
   126
            __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
   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 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
   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(ValidationErrorAfterHook):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   134
                self.assertRaises(ValidationError,
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
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
   143
    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
   144
        class UnauthorizedAfterHook(Hook):
6364
ad9ed9803eb6 cleanup and micro-optimization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6361
diff changeset
   145
            __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
   146
            __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
   147
            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
   148
            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
   149
                raise Unauthorized()
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   150
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   151
        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
   152
            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
   153
                self.assertRaises(Unauthorized,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   154
                                  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
   155
                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
   156
                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
   157
                    cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   158
                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
   159
                cnx.rollback()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   160
                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
   161
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
   162
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   163
    def test_close(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   165
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
        self.assert_(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
        repo.close(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
        self.assertRaises(BadConnectionId, repo.execute, cnxid, 'Any X')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   169
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   170
    def test_invalid_cnxid(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   171
        self.assertRaises(BadConnectionId, self.repo.execute, 0, 'Any X')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   172
        self.assertRaises(BadConnectionId, self.repo.close, None)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   173
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   174
    def test_shared_data(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   175
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   176
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   177
        repo.set_shared_data(cnxid, 'data', 4)
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   178
        cnxid2 = repo.connect(self.admlogin, password=self.admpassword)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   179
        self.assertEqual(repo.get_shared_data(cnxid, 'data'), 4)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   180
        self.assertEqual(repo.get_shared_data(cnxid2, 'data'), None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   181
        repo.set_shared_data(cnxid2, 'data', 5)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   182
        self.assertEqual(repo.get_shared_data(cnxid, 'data'), 4)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   183
        self.assertEqual(repo.get_shared_data(cnxid2, 'data'), 5)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   184
        repo.get_shared_data(cnxid2, 'data', pop=True)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   185
        self.assertEqual(repo.get_shared_data(cnxid, 'data'), 4)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   186
        self.assertEqual(repo.get_shared_data(cnxid2, 'data'), None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
        repo.close(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
        repo.close(cnxid2)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   189
        self.assertRaises(BadConnectionId, repo.get_shared_data, cnxid, 'data')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   190
        self.assertRaises(BadConnectionId, repo.get_shared_data, cnxid2, 'data')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   191
        self.assertRaises(BadConnectionId, repo.set_shared_data, cnxid, 'data', 1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   192
        self.assertRaises(BadConnectionId, repo.set_shared_data, cnxid2, 'data', 1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   193
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
    def test_check_session(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   195
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   196
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
6030
a1544ca8913e [test] check_session returns an int since 6012:d56fd78006cd
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5890
diff changeset
   197
        self.assertIsInstance(repo.check_session(cnxid), float)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
        repo.close(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   199
        self.assertRaises(BadConnectionId, repo.check_session, cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   201
    def test_transaction_base(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   202
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   203
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   204
        # check db state
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
        result = repo.execute(cnxid, 'Personne X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   206
        self.assertEqual(result.rowcount, 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   207
        # rollback entity insertion
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   208
        repo.execute(cnxid, "INSERT Personne X: X nom 'bidule'")
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
        result = repo.execute(cnxid, 'Personne X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   210
        self.assertEqual(result.rowcount, 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   211
        repo.rollback(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   212
        result = repo.execute(cnxid, 'Personne X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   213
        self.assertEqual(result.rowcount, 0, result.rows)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   214
        # commit
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   215
        repo.execute(cnxid, "INSERT Personne X: X nom 'bidule'")
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   216
        repo.commit(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   217
        result = repo.execute(cnxid, 'Personne X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   218
        self.assertEqual(result.rowcount, 1)
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   219
        repo.close(cnxid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   221
    def test_transaction_base2(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   222
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   223
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   224
        # rollback relation insertion
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   225
        repo.execute(cnxid, "SET U in_group G WHERE U login 'admin', G name 'guests'")
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   226
        result = repo.execute(cnxid, "Any U WHERE U in_group G, U login 'admin', G name 'guests'")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   227
        self.assertEqual(result.rowcount, 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   228
        repo.rollback(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   229
        result = repo.execute(cnxid, "Any U WHERE U in_group G, U login 'admin', G name 'guests'")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   230
        self.assertEqual(result.rowcount, 0, result.rows)
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   231
        repo.close(cnxid)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   232
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   233
    def test_transaction_base3(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   234
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   235
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   236
        # rollback state change which trigger TrInfo insertion
4835
13b0b96d7982 [repo] enhanced security handling: deprecates unsafe_execute, in favor of explicit read/write security control using the `enabled_security` context manager. Also code executed on the repository side is now unsafe by default.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4808
diff changeset
   237
        session = repo._get_session(cnxid)
13b0b96d7982 [repo] enhanced security handling: deprecates unsafe_execute, in favor of explicit read/write security control using the `enabled_security` context manager. Also code executed on the repository side is now unsafe by default.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4808
diff changeset
   238
        user = session.user
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5429
diff changeset
   239
        user.cw_adapt_to('IWorkflowable').fire_transition('deactivate')
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   240
        rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': user.eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   241
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   242
        repo.rollback(cnxid)
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   243
        rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': user.eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   244
        self.assertEqual(len(rset), 0)
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   245
        repo.close(cnxid)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   246
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
   247
    def test_close_kill_processing_request(self):
1880
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   248
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   249
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
1880
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   250
        repo.execute(cnxid, 'INSERT CWUser X: X login "toto", X upassword "tutu", X in_group G WHERE G name "users"')
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   251
        repo.commit(cnxid)
7343
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7339
diff changeset
   252
        lock = threading.Lock()
7339
dd5e49a5dcab [server test] use a lock instead of sleep to have higher green probability :/
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7238
diff changeset
   253
        lock.acquire()
1880
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   254
        # close has to be in the thread due to sqlite limitations
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   255
        def close_in_a_few_moment():
7339
dd5e49a5dcab [server test] use a lock instead of sleep to have higher green probability :/
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7238
diff changeset
   256
            lock.acquire()
1880
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   257
            repo.close(cnxid)
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   258
        t = threading.Thread(target=close_in_a_few_moment)
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   259
        t.start()
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
   260
        def run_transaction():
7339
dd5e49a5dcab [server test] use a lock instead of sleep to have higher green probability :/
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7238
diff changeset
   261
            lock.release()
1880
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   262
            repo.execute(cnxid, 'DELETE CWUser X WHERE X login "toto"')
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   263
            repo.commit(cnxid)
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
   264
        try:
8999
81a5d57d9230 [session] upgrade session closed error from Exception to SessionClosedError
pierre-yves
parents: 8947
diff changeset
   265
            with self.assertRaises(SessionClosedError) as cm:
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
   266
                run_transaction()
7666
8644c2a065f0 fix test broken by previous commit
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7563
diff changeset
   267
            self.assertEqual(str(cm.exception), 'try to access connections set on a closed session %s' % cnxid)
1880
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   268
        finally:
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   269
            t.join()
293fe4b49e28 two in one: #343320: Logging out while deleting a CWUser blocks the cw server / #342692: ensure transaction state when Ctrl-C or other stop signal is received
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   270
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   271
    def test_initial_schema(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   272
        schema = self.repo.schema
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   273
        # 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
   274
        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
   275
                     '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
   276
                     '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
   277
                     'update_permission', 'read_permission',
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9267
diff changeset
   278
                     '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
   279
        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
   280
                              '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
   281
                              'constrained_by',
9965
a8769b752299 [CWEP002] Account for attribute formula in schema bootstrap
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9803
diff changeset
   282
                              '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
   283
                              'indexed', 'fulltextindexed', 'internationalizable',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   284
                              'defaultval', 'extra_props',
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   285
                              'description', 'description_format'],
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   286
                             [r.type
d988eec2d5d3 [test/schemaserial] swap got/expected to get nicer unittest2 diagnostics
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9008
diff changeset
   287
                              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
   288
                              if r.type not in notin])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   289
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   290
        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
   291
        self.assertEqual(schema.eschema('State').main_attribute(), 'name')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   292
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   293
        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
   294
        self.assertEqual(len(constraints), 2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   295
        for cstr in constraints[:]:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   296
            if isinstance(cstr, UniqueConstraint):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   297
                constraints.remove(cstr)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   298
                break
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   299
        else:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   300
            self.fail('unique constraint not found')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   301
        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
   302
        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
   303
        self.assertEqual(sizeconstraint.max, 64)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   304
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   305
        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
   306
        self.assertEqual(len(constraints), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   307
        cstr = constraints[0]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   308
        self.assert_(isinstance(cstr, RQLConstraint))
7161
e3f69df8dac7 fix failing tests before 3.12 release
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7148
diff changeset
   309
        self.assertEqual(cstr.expression, 'O final TRUE')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   310
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   311
        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
   312
        self.assertEqual(ownedby.objects('CWEType'), ('CWUser',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   313
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   314
    def test_internal_api(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   315
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   316
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
7398
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7382
diff changeset
   317
        session = repo._get_session(cnxid, setcnxset=True)
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
   318
        self.assertEqual(repo.type_and_source_from_eid(2, session),
9469
032825bbacab [multi-sources-removal] Drop entities.source column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9455
diff changeset
   319
                         ('CWGroup', None, 'system'))
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
   320
        self.assertEqual(repo.type_from_eid(2, session), 'CWGroup')
7186
287f2273917f [test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   321
        repo.close(cnxid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   322
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   323
    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
   324
        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
   325
        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
   326
                                                              '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
   327
                                                              '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
   328
                                                  })
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   329
        # .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
   330
        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
   331
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   332
    def test_session_api(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   333
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   334
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6401
diff changeset
   335
        self.assertEqual(repo.user_info(cnxid), (6, 'admin', set([u'managers']), {}))
9469
032825bbacab [multi-sources-removal] Drop entities.source column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9455
diff changeset
   336
        self.assertEqual({'type': u'CWGroup', 'extid': None, 'source': 'system'},
032825bbacab [multi-sources-removal] Drop entities.source column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9455
diff changeset
   337
                         repo.entity_metas(cnxid, 2))
032825bbacab [multi-sources-removal] Drop entities.source column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9455
diff changeset
   338
        self.assertEqual(repo.describe(cnxid, 2), (u'CWGroup', 'system', None, 'system'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   339
        repo.close(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   340
        self.assertRaises(BadConnectionId, repo.user_info, cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   341
        self.assertRaises(BadConnectionId, repo.describe, cnxid, 1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   342
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   343
    def test_shared_data_api(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   344
        repo = self.repo
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
   345
        cnxid = repo.connect(self.admlogin, password=self.admpassword)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   346
        self.assertEqual(repo.get_shared_data(cnxid, 'data'), None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   347
        repo.set_shared_data(cnxid, 'data', 4)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   348
        self.assertEqual(repo.get_shared_data(cnxid, 'data'), 4)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   349
        repo.get_shared_data(cnxid, 'data', pop=True)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   350
        repo.get_shared_data(cnxid, 'whatever', pop=True)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6236
diff changeset
   351
        self.assertEqual(repo.get_shared_data(cnxid, 'data'), None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   352
        repo.close(cnxid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
        self.assertRaises(BadConnectionId, repo.set_shared_data, cnxid, 'data', 0)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   354
        self.assertRaises(BadConnectionId, repo.get_shared_data, cnxid, 'data')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   355
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
   356
    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
   357
        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
   358
            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
   359
            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
   360
2642
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   361
#     def test_perfo(self):
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   362
#         self.set_debug(True)
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   363
#         from time import time, clock
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   364
#         t, c = time(), clock()
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   365
#         try:
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   366
#             self.create_user('toto')
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   367
#         finally:
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   368
#             self.set_debug(False)
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   369
#         print 'test time: %.3f (time) %.3f (cpu)' % ((time() - t), clock() - c)
2d30de60a8ff cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   370
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
   371
    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
   372
        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
   373
            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
   374
            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
   375
            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
   376
                        {'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
   377
            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
   378
                               {'x': note.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   379
            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
   380
            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
   381
            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
   382
                        {'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
   383
            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
   384
                                {'x': note.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   385
            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
   386
            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
   387
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
   388
    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
   389
        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
   390
            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
   391
            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
   392
            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
   393
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   394
            self.assertEqual(len(c.reverse_fiche), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   395
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
   396
    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
   397
        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
   398
            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
   399
            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
   400
            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
   401
            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
   402
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
   403
    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
   404
        # local hook
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   405
        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
   406
            __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
   407
            __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
   408
            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
   409
            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
   410
                # 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
   411
                #              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
   412
                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
   413
                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
   414
                    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
   415
                    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
   416
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:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   418
            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
   419
                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
   420
                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
   421
                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
   422
                                   {'x': addr.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   423
                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
   424
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
   425
    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
   426
        # local hook
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   427
        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
   428
            __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
   429
            __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
   430
            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
   431
            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
   432
                # 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
   433
                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
   434
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   435
        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
   436
            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
   437
                # 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
   438
                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
   439
                                  '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
   440
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
   441
    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
   442
        """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
   443
        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
   444
        """
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   445
        # local hook
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   446
        class DummyBeforeHook(Hook):
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   447
            _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
   448
            __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
   449
            __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
   450
            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
   451
            def __call__(self):
8604000bf3b2 [repository] fix edited_attributes management in multiple SET queries
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5126
diff changeset
   452
                # 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
   453
                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
   454
                                  '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
   455
                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
   456
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   457
        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
   458
            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
   459
                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
   460
                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
   461
                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
   462
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
   463
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
   464
    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
   465
        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
   466
        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
   467
            __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
   468
            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
   469
                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
   470
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   471
        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
   472
            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
   473
                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
   474
                cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   475
                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
   476
                    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
   477
                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
   478
                cnx.rollback()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   479
                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
   480
                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
   481
                    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
   482
                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
   483
                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
   484
                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
   485
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
   486
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   487
class SchemaDeserialTC(CubicWebTC):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   488
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   489
    appid = 'data-schemaserial'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   490
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   491
    @classmethod
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   492
    def setUpClass(cls):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   493
        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
   494
        helper = get_db_helper('sqlite')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   495
        helper.TYPE_MAPPING['BabarTestType'] = 'TEXT'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   496
        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
   497
        super(SchemaDeserialTC, cls).setUpClass()
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   498
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   499
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   500
    @classmethod
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   501
    def tearDownClass(cls):
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   502
        unregister_base_type('BabarTestType')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   503
        helper = get_db_helper('sqlite')
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   504
        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
   505
        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
   506
        super(SchemaDeserialTC, cls).tearDownClass()
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   507
8947
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   508
    def test_deserialization_base(self):
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   509
        """Check the following deserialization
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   510
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   511
        * all CWEtype has name
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   512
        * Final type
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   513
        * CWUniqueTogetherConstraint
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8945
diff changeset
   514
        * _unique_together__ content"""
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   515
        origshema = self.repo.schema
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   516
        try:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   517
            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
   518
            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
   519
            table = SQL_PREFIX + 'CWEType'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   520
            namecol = SQL_PREFIX + 'name'
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   521
            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
   522
            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
   523
                with cnx.ensure_cnx_set:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   524
                    cu = cnx.system_sql('SELECT %s FROM %s WHERE %s is NULL'
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   525
                                        % (namecol, table, finalcol))
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   526
                    self.assertEqual(cu.fetchall(), [])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   527
                    cu = cnx.system_sql('SELECT %s FROM %s '
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   528
                                        'WHERE %s=%%(final)s ORDER BY %s'
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   529
                                        % (namecol, table, finalcol, namecol),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   530
                                        {'final': True})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   531
                    self.assertEqual(cu.fetchall(),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   532
                                     [(u'BabarTestType',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   533
                                      (u'BigInt',), (u'Boolean',), (u'Bytes',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   534
                                      (u'Date',), (u'Datetime',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   535
                                      (u'Decimal',),(u'Float',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   536
                                      (u'Int',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   537
                                      (u'Interval',), (u'Password',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   538
                                      (u'String',),
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   539
                                      (u'TZDatetime',), (u'TZTime',), (u'Time',)])
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   540
                    sql = ("SELECT etype.cw_eid, etype.cw_name, cstr.cw_eid, rel.eid_to "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   541
                           "FROM cw_CWUniqueTogetherConstraint as cstr, "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   542
                           "     relations_relation as rel, "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   543
                           "     cw_CWEType as etype "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   544
                           "WHERE cstr.cw_eid = rel.eid_from "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   545
                           "  AND cstr.cw_constraint_of = etype.cw_eid "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   546
                           "  AND etype.cw_name = 'Personne' "
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   547
                           ";")
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   548
                    cu = cnx.system_sql(sql)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   549
                    rows = cu.fetchall()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   550
                    self.assertEqual(len(rows), 3)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   551
                    person = self.repo.schema.eschema('Personne')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   552
                    self.assertEqual(len(person._unique_together), 1)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   553
                    self.assertItemsEqual(person._unique_together[0],
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   554
                                          ('nom', 'prenom', 'inline2'))
8945
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   555
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   556
        finally:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   557
            self.repo.set_schema(origshema)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   558
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   559
    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
   560
        origshema = self.repo.schema
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   561
        try:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   562
            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
   563
            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
   564
            pes = self.repo.schema['Personne']
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   565
            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
   566
            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
   567
            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
   568
        finally:
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   569
            self.repo.set_schema(origshema)
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   570
ba9e3fbfa5a5 [schemaserial] serialize additional yams parameter for customs type
Vincent Michel <vincent.michel@logilab.fr>
parents: 8874
diff changeset
   571
5115
2e43ef618d14 [repository] forbid usage of set_attributes() in before_add_entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5106
diff changeset
   572
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   573
class DataHelpersTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   574
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   575
    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
   576
        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
   577
            with cnx.ensure_cnx_set:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   578
                self.assertEqual(self.repo.type_from_eid(2, cnx), 'CWGroup')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   579
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   580
    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
   581
        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
   582
            with cnx.ensure_cnx_set:
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   583
                self.assertRaises(UnknownEid, self.repo.type_from_eid, -2, cnx)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   584
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   585
    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
   586
        with self.admin_access.repo_cnx() as cnx:
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   587
            with cnx.ensure_cnx_set:
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   588
                cnx.mode = 'write'
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   589
                entity = self.repo.vreg['etypes'].etype_class('Personne')(cnx)
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   590
                entity.eid = -1
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   591
                entity.complete = lambda x: None
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   592
                self.repo.add_info(cnx, entity, self.repo.system_source)
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   593
                cu = cnx.system_sql('SELECT * FROM entities WHERE eid = -1')
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   594
                data = cu.fetchall()
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   595
                self.assertEqual(tuplify(data), [(-1, 'Personne', 'system', None)])
10203
1443fe643a38 [server] change order of entities table modification vs entity creation/deletion
Julien Cristau <julien.cristau@logilab.fr>
parents: 9965
diff changeset
   596
                self.repo._delete_cascade_multi(cnx, [entity])
1443fe643a38 [server] change order of entities table modification vs entity creation/deletion
Julien Cristau <julien.cristau@logilab.fr>
parents: 9965
diff changeset
   597
                self.repo.system_source.delete_info_multi(cnx, [entity])
9802
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   598
                #self.repo.commit()
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   599
                cu = cnx.system_sql('SELECT * FROM entities WHERE eid = -1')
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   600
                data = cu.fetchall()
9f815b1f2516 [repository,tests] use the new connection api (part 1/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9469
diff changeset
   601
                self.assertEqual(data, [])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   602
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   603
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   604
class FTITC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   605
4806
4f12f59b1a13 [fti] refactor and fix full text indexation handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   606
    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
   607
        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
   608
            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
   609
            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
   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
            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
   612
            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
   613
            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
   614
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   615
            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
   616
            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
   617
            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
   618
                        {'y': toto.eid})
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   619
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   620
            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
   621
            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
   622
            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
   623
            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
   624
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   625
            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
   626
            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
   627
            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
   628
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   629
            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
   630
            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
   631
            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
   632
            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
   633
4f12f59b1a13 [fti] refactor and fix full text indexation handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4680
diff changeset
   634
    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
   635
        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
   636
            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
   637
                              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
   638
                              description=u'huuuuu')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   639
            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
   640
                                 if isinstance(x, native.FTIndexEntityOp)))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   641
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   642
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   643
class DBInitTC(CubicWebTC):
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   644
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   645
    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
   646
        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
   647
            inserted = [r[0]
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   648
                        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
   649
                                             '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
   650
            self.assertEqual(inserted,
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   651
                             [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
   652
                              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
   653
                              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
   654
                              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
   655
                              u'system.version.email',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   656
                              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
   657
                              u'system.version.folder',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   658
                              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
   659
                              u'system.version.tag'])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   660
3445
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   661
CALLED = []
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   662
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
   663
class InlineRelHooksTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   664
    """test relation hooks are called for inlined relations
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   665
    """
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   666
    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
   667
        CubicWebTC.setUp(self)
3445
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   668
        CALLED[:] = ()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   669
3445
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   670
    def test_inline_relation(self):
32492e9e734b update and simplify test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   671
        """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
   672
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
   673
        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
   674
            __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
   675
            __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
   676
            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
   677
                      '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
   678
            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
   679
                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
   680
5105
57e0fc953676 [test] use new temporary_appobjects context manager
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5103
diff changeset
   681
        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
   682
            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
   683
                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
   684
                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
   685
                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
   686
                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
   687
                                          ('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
   688
                CALLED[:] = ()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   689
                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
   690
                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
   691
                                          ('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
   692
                CALLED[:] = ()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   693
                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
   694
                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
   695
                                          ('after_add_relation', eidn, 'ecrit_par', eidp)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   696
6236
9138f23ee263 [repo tests] add test case for RQLUniqueConstraint
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   697
    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
   698
        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
   699
            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
   700
            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
   701
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   702
            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
   703
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   704
            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
   705
            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
   706
                cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   707
            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
   708
                             {'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
   709
                              '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
   710
7238
576abb8c4626 fix implementation of repository.glob_add_relations (closes ##1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7237
diff changeset
   711
    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
   712
        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
   713
            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
   714
                                       nom=u'Toto',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   715
                                       prenom=u'Lanturlu',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   716
                                       sexe=u'M')
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   717
            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
   718
            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
   719
            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
   720
                              login=u'Toto',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   721
                              upassword=u'firstname',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   722
                              firstname=u'firstname',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   723
                              surname=u'surname',
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   724
                              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
   725
                              in_group=users)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   726
            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
   727
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   728
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   729
class PerformanceTest(CubicWebTC):
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   730
    def setUp(self):
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   731
        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
   732
        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
   733
        #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
   734
        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
   735
        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
   736
7381
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   737
    def tearDown(self):
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   738
        super(PerformanceTest, self).tearDown()
7382
91061a22755d fix name error introduced in previous changeset
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7381
diff changeset
   739
        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
   740
        logger.setLevel(logging.CRITICAL)
a10b2d90d1a3 [server test] restore logging level after test end
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7343
diff changeset
   741
7236
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   742
    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
   743
        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
   744
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   745
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   746
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   747
                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
   748
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   749
            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
   750
            for j in xrange(0, 2000, 100):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   751
                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
   752
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   753
            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
   754
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   755
            t2 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   756
            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
   757
            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
   758
            t3 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   759
            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
   760
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   761
            t4 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   762
            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
   763
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   764
    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
   765
        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
   766
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   767
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   768
                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
   769
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   770
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   771
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   772
            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
   773
                                        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
   774
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   775
            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
   776
            for j in xrange(100, 2000, 100):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   777
                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
   778
            t2 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   779
            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
   780
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   781
            t3 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   782
            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
   783
b91205ada414 added test case to monitor speed improvements in the repository code.
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7194
diff changeset
   784
    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
   785
        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
   786
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   787
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   788
                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
   789
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   790
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   791
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   792
            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
   793
                                        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
   794
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   795
            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
   796
            for j in xrange(100, 2000, 100):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   797
                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
   798
            t2 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   799
            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
   800
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   801
            t3 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   802
            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
   803
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   804
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   805
    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
   806
        """ 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
   807
        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
   808
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   809
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   810
                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
   811
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   812
            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
   813
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   814
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   815
            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
   816
            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
   817
                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
   818
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   819
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   820
            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
   821
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   822
    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
   823
        """ 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
   824
        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
   825
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   826
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   827
                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
   828
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   829
            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
   830
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   831
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   832
            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
   833
            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
   834
            add_relations(relations)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   835
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   836
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   837
            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
   838
7237
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   839
    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
   840
        """ 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
   841
        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
   842
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   843
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   844
                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
   845
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   846
            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
   847
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   848
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   849
            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
   850
            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
   851
                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
   852
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   853
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   854
            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
   855
9f619715665b [server] improve the speed of setting relations between entities (closes #1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7236
diff changeset
   856
    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
   857
        """ 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
   858
        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
   859
            personnes = []
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   860
            for i in xrange(2000):
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   861
                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
   862
                personnes.append(p)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   863
            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
   864
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   865
            t0 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   866
            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
   867
            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
   868
            add_relations(relations)
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   869
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   870
            t1 = time.time()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   871
            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
   872
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
   873
    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
   874
        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
   875
            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
   876
            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
   877
            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
   878
            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
   879
            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
   880
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   881
            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
   882
            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
   883
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
   884
    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
   885
        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
   886
            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
   887
            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
   888
            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
   889
            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
   890
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   891
            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
   892
            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
   893
            cnx.commit()
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   894
            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
   895
            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
   896
576abb8c4626 fix implementation of repository.glob_add_relations (closes ##1625257)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7237
diff changeset
   897
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   898
if __name__ == '__main__':
9803
5bd395e9649a [tests/repository] use the new connection api (part 2/2)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9802
diff changeset
   899
    from logilab.common.testlib import unittest_main
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   900
    unittest_main()