server/test/unittest_migractions.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 21 Jan 2014 17:34:31 +0100
changeset 9445 65d93a4fd11c
parent 9402 2c48c091b6a2
child 9556 12ee310541bb
permissions -rw-r--r--
[multi-sources-removal] Drop pyrorql and zmqrql sources After a few years experementing "true" multi-sources, we're now moving to "copy-based" source à la datafeed. As pyro and zmq sources have no more known customers and the related code is in the way of future refactoring of cubicweb's core, we decided to drop support for those sources without backward compatibility. If you're still using a zmqrql or pyrorql source and you want to upgrade, ask support to move it to datafeed using a pre-3.19 version first. Related to #2919300 (first step)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8942
0f60f1061a2e [test] stop deepcopying for nothing
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8935
diff changeset
     1
# copyright 2003-2013 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: 4774
diff changeset
     2
# 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: 4774
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
     4
# 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: 4774
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
     6
# 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: 4774
diff changeset
     7
# 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: 4774
diff changeset
     8
# 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: 4774
diff changeset
     9
# 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: 4774
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# 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: 4774
diff changeset
    12
# 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: 4774
diff changeset
    13
# 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: 4774
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
    16
# 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: 4774
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6595
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
    18
"""unit tests for module cubicweb.server.migractions"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 972
diff changeset
    20
from datetime import date
2608
21856eda34f6 [F repo tests] tests have to be updated:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2591
diff changeset
    21
from os.path import join
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    23
from logilab.common.testlib import TestCase, unittest_main, Tags, tag
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    25
from yams.constraints import UniqueConstraint
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    26
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    27
from cubicweb import ConfigurationError, ValidationError
4689
4eb1f4490538 [test] skipping versions checking during test is enough, no need for monkey patch
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4681
diff changeset
    28
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: 972
diff changeset
    29
from cubicweb.schema import CubicWebSchemaLoader
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: 972
diff changeset
    30
from cubicweb.server.sqlutils import SQL_PREFIX
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
from cubicweb.server.migractions import *
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    33
import cubicweb.devtools
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    34
4774
89a7555020ba [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4763
diff changeset
    35
migrschema = None
6781
5062d86d6ffe [unittest2] use unittest2 module fixture api
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6635
diff changeset
    36
def tearDownModule(*args):
4774
89a7555020ba [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4763
diff changeset
    37
    global migrschema
89a7555020ba [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4763
diff changeset
    38
    del migrschema
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    39
    if hasattr(MigrationCommandsTC, 'origschema'):
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    40
        del MigrationCommandsTC.origschema
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    41
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    42
class MigrationCommandsTC(CubicWebTC):
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    43
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    44
    configcls = cubicweb.devtools.TestServerConfiguration
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    45
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    46
    tags = CubicWebTC.tags | Tags(('server', 'migration', 'migractions'))
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    47
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    48
    def _init_repo(self):
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    49
        super(MigrationCommandsTC, self)._init_repo()
4681
5f72584ab1d7 [test] cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4635
diff changeset
    50
        # we have to read schema from the database to get eid for schema entities
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    51
        self.repo.set_schema(self.repo.deserialize_schema(), resetvreg=False)
8947
3bbd416b09ec [repo] straightforward bootstrap sequence. Closes #2841188
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8942
diff changeset
    52
        # hack to read the schema from data/migrschema
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    53
        config = self.config
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    54
        config.appid = join('data', 'migratedapp')
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    55
        config._apphome = self.datapath('migratedapp')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    56
        global migrschema
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    57
        migrschema = config.load_schema()
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    58
        config.appid = 'data'
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    59
        config._apphome = self.datadir
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    60
        assert 'Folder' in migrschema
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    61
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
    def setUp(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    63
        CubicWebTC.setUp(self)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
        self.mh = ServerMigrationHelper(self.repo.config, migrschema,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
                                        repo=self.repo, cnx=self.cnx,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
                                        interactive=False)
972
1efba3fd1364 set_state command in shell
sylvain.thenault@logilab.fr
parents: 934
diff changeset
    67
        assert self.cnx is self.mh._cnx
1efba3fd1364 set_state command in shell
sylvain.thenault@logilab.fr
parents: 934
diff changeset
    68
        assert self.session is self.mh.session, (self.session.id, self.mh.session.id)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    69
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    70
    def tearDown(self):
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    71
        CubicWebTC.tearDown(self)
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    72
        self.repo.vreg['etypes'].clear_caches()
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    73
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    74
    def test_add_attribute_bool(self):
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    75
        self.assertFalse('yesno' in self.schema)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    76
        self.session.create_entity('Note')
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    77
        self.commit()
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    78
        self.mh.cmd_add_attribute('Note', 'yesno')
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    79
        self.assertTrue('yesno' in self.schema)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    80
        self.assertEqual(self.schema['yesno'].subjects(), ('Note',))
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    81
        self.assertEqual(self.schema['yesno'].objects(), ('Boolean',))
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    82
        self.assertEqual(self.schema['Note'].default('yesno'), False)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    83
        # test default value set on existing entities
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    84
        note = self.session.execute('Note X').get_entity(0, 0)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    85
        self.assertEqual(note.yesno, False)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    86
        # test default value set for next entities
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    87
        self.assertEqual(self.session.create_entity('Note').yesno, False)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    88
        self.mh.rollback()
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
    89
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
    def test_add_attribute_int(self):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
    91
        self.assertFalse('whatever' in self.schema)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    92
        self.session.create_entity('Note')
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    93
        self.session.commit(free_cnxset=False)
3134
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
    94
        orderdict = dict(self.mh.rqlexec('Any RTN, O WHERE X name "Note", RDEF from_entity X, '
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
    95
                                         'RDEF relation_type RT, RDEF ordernum O, RT name RTN'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
        self.mh.cmd_add_attribute('Note', 'whatever')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
    97
        self.assertTrue('whatever' in self.schema)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
    98
        self.assertEqual(self.schema['whatever'].subjects(), ('Note',))
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
    99
        self.assertEqual(self.schema['whatever'].objects(), ('Int',))
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   100
        self.assertEqual(self.schema['Note'].default('whatever'), 0)
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
   101
        # test default value set on existing entities
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   102
        note = self.session.execute('Note X').get_entity(0, 0)
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   103
        self.assertIsInstance(note.whatever, int)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   104
        self.assertEqual(note.whatever, 0)
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
   105
        # test default value set for next entities
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   106
        self.assertEqual(self.session.create_entity('Note').whatever, 0)
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
   107
        # test attribute order
3134
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   108
        orderdict2 = dict(self.mh.rqlexec('Any RTN, O WHERE X name "Note", RDEF from_entity X, '
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   109
                                          'RDEF relation_type RT, RDEF ordernum O, RT name RTN'))
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   110
        whateverorder = migrschema['whatever'].rdef('Note', 'Int').order
3134
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   111
        for k, v in orderdict.iteritems():
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   112
            if v >= whateverorder:
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   113
                orderdict[k] = v+1
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   114
        orderdict['whatever'] = whateverorder
6369
a151453dc564 [test] more update to unittest2 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   115
        self.assertDictEqual(orderdict, orderdict2)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   116
        #self.assertEqual([r.type for r in self.schema['Note'].ordered_relations()],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   117
        #                  ['modification_date', 'creation_date', 'owned_by',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   118
        #                   'eid', 'ecrit_par', 'inline1', 'date', 'type',
3134
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   119
        #                   'whatever', 'date', 'in_basket'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   120
        # NB: commit instead of rollback make following test fail with py2.5
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   121
        #     this sounds like a pysqlite/2.5 bug (the same eid is affected to
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   122
        #     two different entities)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
        self.mh.rollback()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   124
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   125
    def test_add_attribute_varchar(self):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   126
        self.assertFalse('whatever' in self.schema)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   127
        self.session.create_entity('Note')
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   128
        self.session.commit(free_cnxset=False)
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   129
        self.assertFalse('shortpara' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   130
        self.mh.cmd_add_attribute('Note', 'shortpara')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   131
        self.assertTrue('shortpara' in self.schema)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   132
        self.assertEqual(self.schema['shortpara'].subjects(), ('Note', ))
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   133
        self.assertEqual(self.schema['shortpara'].objects(), ('String', ))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   134
        # test created column is actually a varchar(64)
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: 972
diff changeset
   135
        notesql = self.mh.sqlexec("SELECT sql FROM sqlite_master WHERE type='table' and name='%sNote'" % SQL_PREFIX)[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   136
        fields = dict(x.strip().split()[:2] for x in notesql.split('(', 1)[1].rsplit(')', 1)[0].split(','))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   137
        self.assertEqual(fields['%sshortpara' % SQL_PREFIX], 'varchar(64)')
6790
f4f67ea5436a [schema migration] add a test to ensure default value are considered
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
   138
        # test default value set on existing entities
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   139
        self.assertEqual(self.session.execute('Note X').get_entity(0, 0).shortpara, 'hop')
6790
f4f67ea5436a [schema migration] add a test to ensure default value are considered
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
   140
        # test default value set for next entities
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   141
        self.assertEqual(self.session.create_entity('Note').shortpara, 'hop')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   142
        self.mh.rollback()
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   143
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   144
    def test_add_datetime_with_default_value_attribute(self):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   145
        self.assertFalse('mydate' in self.schema)
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   146
        self.assertFalse('oldstyledefaultdate' in self.schema)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   147
        self.assertFalse('newstyledefaultdate' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   148
        self.mh.cmd_add_attribute('Note', 'mydate')
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   149
        self.mh.cmd_add_attribute('Note', 'oldstyledefaultdate')
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   150
        self.mh.cmd_add_attribute('Note', 'newstyledefaultdate')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   151
        self.assertTrue('mydate' in self.schema)
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   152
        self.assertTrue('oldstyledefaultdate' in self.schema)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   153
        self.assertTrue('newstyledefaultdate' in self.schema)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   154
        self.assertEqual(self.schema['mydate'].subjects(), ('Note', ))
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   155
        self.assertEqual(self.schema['mydate'].objects(), ('Date', ))
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 972
diff changeset
   156
        testdate = date(2005, 12, 13)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   157
        eid1 = self.mh.rqlexec('INSERT Note N')[0][0]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   158
        eid2 = self.mh.rqlexec('INSERT Note N: N mydate %(mydate)s', {'mydate' : testdate})[0][0]
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
   159
        d1 = self.mh.rqlexec('Any D WHERE X eid %(x)s, X mydate D', {'x': eid1})[0][0]
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
   160
        d2 = self.mh.rqlexec('Any D WHERE X eid %(x)s, X mydate D', {'x': eid2})[0][0]
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   161
        d3 = self.mh.rqlexec('Any D WHERE X eid %(x)s, X oldstyledefaultdate D', {'x': eid1})[0][0]
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   162
        d4 = self.mh.rqlexec('Any D WHERE X eid %(x)s, X newstyledefaultdate D', {'x': eid1})[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   163
        self.assertEqual(d1, date.today())
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   164
        self.assertEqual(d2, testdate)
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   165
        myfavoritedate = date(2013, 1, 1)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   166
        self.assertEqual(d3, myfavoritedate)
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   167
        self.assertEqual(d4, myfavoritedate)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
        self.mh.rollback()
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   169
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   170
    def test_drop_chosen_constraints_ctxmanager(self):
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   171
        with self.mh.cmd_dropped_constraints('Note', 'unique_id', UniqueConstraint):
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   172
            self.mh.cmd_add_attribute('Note', 'unique_id')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   173
            # make sure the maxsize constraint is not dropped
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   174
            self.assertRaises(ValidationError,
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   175
                              self.mh.rqlexec,
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   176
                              'INSERT Note N: N unique_id "xyz"')
6417
d2361abe8505 [test] fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6370
diff changeset
   177
            self.mh.rollback()
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   178
            # make sure the unique constraint is dropped
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   179
            self.mh.rqlexec('INSERT Note N: N unique_id "x"')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   180
            self.mh.rqlexec('INSERT Note N: N unique_id "x"')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   181
            self.mh.rqlexec('DELETE Note N')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   182
        self.mh.rollback()
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   183
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   184
    def test_drop_required_ctxmanager(self):
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   185
        with self.mh.cmd_dropped_constraints('Note', 'unique_id', cstrtype=None,
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   186
                                             droprequired=True):
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   187
            self.mh.cmd_add_attribute('Note', 'unique_id')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   188
            self.mh.rqlexec('INSERT Note N')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   189
        # make sure the required=True was restored
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   190
        self.assertRaises(ValidationError, self.mh.rqlexec, 'INSERT Note N')
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   191
        self.mh.rollback()
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   192
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   193
    def test_rename_attribute(self):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   194
        self.assertFalse('civility' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   195
        eid1 = self.mh.rqlexec('INSERT Personne X: X nom "lui", X sexe "M"')[0][0]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   196
        eid2 = self.mh.rqlexec('INSERT Personne X: X nom "l\'autre", X sexe NULL')[0][0]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   197
        self.mh.cmd_rename_attribute('Personne', 'sexe', 'civility')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   198
        self.assertFalse('sexe' in self.schema)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   199
        self.assertTrue('civility' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
        # test data has been backported
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   201
        c1 = self.mh.rqlexec('Any C WHERE X eid %s, X civility C' % eid1)[0][0]
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   202
        self.assertEqual(c1, 'M')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   203
        c2 = self.mh.rqlexec('Any C WHERE X eid %s, X civility C' % eid2)[0][0]
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   204
        self.assertEqual(c2, None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   206
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   207
    def test_workflow_actions(self):
6816
f61de39cd396 [wf migration] allow to deactivate assertion on wfable entity to quick-fix tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6815
diff changeset
   208
        wf = self.mh.cmd_add_workflow(u'foo', ('Personne', 'Email'),
f61de39cd396 [wf migration] allow to deactivate assertion on wfable entity to quick-fix tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6815
diff changeset
   209
                                      ensure_workflowable=False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   210
        for etype in ('Personne', 'Email'):
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2903
diff changeset
   211
            s1 = self.mh.rqlexec('Any N WHERE WF workflow_of ET, ET name "%s", WF name N' %
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   212
                                 etype)[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   213
            self.assertEqual(s1, "foo")
2943
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2931
diff changeset
   214
            s1 = self.mh.rqlexec('Any N WHERE ET default_workflow WF, ET name "%s", WF name N' %
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   215
                                 etype)[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   216
            self.assertEqual(s1, "foo")
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   217
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   218
    def test_add_entity_type(self):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   219
        self.assertFalse('Folder2' in self.schema)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   220
        self.assertFalse('filed_under2' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   221
        self.mh.cmd_add_entity_type('Folder2')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   222
        self.assertTrue('Folder2' in self.schema)
8111
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   223
        self.assertTrue('Old' in self.schema)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   224
        self.assertTrue(self.session.execute('CWEType X WHERE X name "Folder2"'))
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   225
        self.assertTrue('filed_under2' in self.schema)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   226
        self.assertTrue(self.session.execute('CWRType X WHERE X name "filed_under2"'))
3266
38ffdb284689 we must now explicitly call rebuild_infered_relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3252
diff changeset
   227
        self.schema.rebuild_infered_relations()
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   228
        self.assertEqual(sorted(str(rs) for rs in self.schema['Folder2'].subject_relations()),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6417
diff changeset
   229
                          ['created_by', 'creation_date', 'cw_source', 'cwuri',
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   230
                           'description', 'description_format',
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   231
                           'eid',
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   232
                           'filed_under2', 'has_text',
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   233
                           'identity', 'in_basket', 'is', 'is_instance_of',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   234
                           'modification_date', 'name', 'owned_by'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   235
        self.assertEqual([str(rs) for rs in self.schema['Folder2'].object_relations()],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   236
                          ['filed_under2', 'identity'])
8111
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   237
        # Old will be missing as it has been renamed into 'New' in the migrated
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   238
        # schema while New hasn't been added here.
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   239
        self.assertEqual(sorted(str(e) for e in self.schema['filed_under2'].subjects()),
8111
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   240
                         sorted(str(e) for e in self.schema.entities() if not e.final and e != 'Old'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   241
        self.assertEqual(self.schema['filed_under2'].objects(), ('Folder2',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   242
        eschema = self.schema.eschema('Folder2')
4635
44a883148ab4 fix sync_schema_props_perms test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4191
diff changeset
   243
        for cstr in eschema.rdef('name').constraints:
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   244
            self.assertTrue(hasattr(cstr, 'eid'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   245
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   246
    def test_add_drop_entity_type(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   247
        self.mh.cmd_add_entity_type('Folder2')
6816
f61de39cd396 [wf migration] allow to deactivate assertion on wfable entity to quick-fix tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6815
diff changeset
   248
        wf = self.mh.cmd_add_workflow(u'folder2 wf', 'Folder2',
f61de39cd396 [wf migration] allow to deactivate assertion on wfable entity to quick-fix tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6815
diff changeset
   249
                                      ensure_workflowable=False)
3252
c0e10da6f1cf tests update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2967
diff changeset
   250
        todo = wf.add_state(u'todo', initial=True)
c0e10da6f1cf tests update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2967
diff changeset
   251
        done = wf.add_state(u'done')
c0e10da6f1cf tests update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2967
diff changeset
   252
        wf.add_transition(u'redoit', done, todo)
c0e10da6f1cf tests update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2967
diff changeset
   253
        wf.add_transition(u'markasdone', todo, done)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   254
        self.session.commit(free_cnxset=False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   255
        eschema = self.schema.eschema('Folder2')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   256
        self.mh.cmd_drop_entity_type('Folder2')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   257
        self.assertFalse('Folder2' in self.schema)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   258
        self.assertFalse(self.session.execute('CWEType X WHERE X name "Folder2"'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   259
        # test automatic workflow deletion
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   260
        self.assertFalse(self.session.execute('Workflow X WHERE NOT X workflow_of ET'))
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   261
        self.assertFalse(self.session.execute('State X WHERE NOT X state_of WF'))
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   262
        self.assertFalse(self.session.execute('Transition X WHERE NOT X transition_of WF'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   263
8105
7980b36fb1aa [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470)
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
   264
    def test_rename_entity_type(self):
7980b36fb1aa [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470)
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
   265
        entity = self.mh.create_entity('Old', name=u'old')
7980b36fb1aa [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470)
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
   266
        self.repo.type_and_source_from_eid(entity.eid)
7980b36fb1aa [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470)
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
   267
        self.mh.cmd_rename_entity_type('Old', 'New')
7980b36fb1aa [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470)
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
   268
        self.mh.cmd_rename_attribute('New', 'name', 'new_name')
7980b36fb1aa [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470)
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
   269
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   270
    def test_add_drop_relation_type(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   271
        self.mh.cmd_add_entity_type('Folder2', auto=False)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   272
        self.mh.cmd_add_relation_type('filed_under2')
3266
38ffdb284689 we must now explicitly call rebuild_infered_relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3252
diff changeset
   273
        self.schema.rebuild_infered_relations()
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   274
        self.assertTrue('filed_under2' in self.schema)
8111
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   275
        # Old will be missing as it has been renamed into 'New' in the migrated
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   276
        # schema while New hasn't been added here.
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   277
        self.assertEqual(sorted(str(e) for e in self.schema['filed_under2'].subjects()),
8111
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   278
                         sorted(str(e) for e in self.schema.entities()
d1be698018d2 [server test] Fix tests regression from changeset 7980b36fb1aa
Julien Cristau <julien.cristau@logilab.fr>
parents: 8105
diff changeset
   279
                                if not e.final and e != 'Old'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   280
        self.assertEqual(self.schema['filed_under2'].objects(), ('Folder2',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   281
        self.mh.cmd_drop_relation_type('filed_under2')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   282
        self.assertFalse('filed_under2' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   283
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   284
    def test_add_relation_definition_nortype(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   285
        self.mh.cmd_add_relation_definition('Personne', 'concerne2', 'Affaire')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   286
        self.assertEqual(self.schema['concerne2'].subjects(),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   287
                          ('Personne',))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   288
        self.assertEqual(self.schema['concerne2'].objects(),
2745
0dafa29ace1f [schema migration] test reproducing pb when deleting a relation definition with mandatory card and without removing the associated rtype + fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2744
diff changeset
   289
                          ('Affaire', ))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   290
        self.assertEqual(self.schema['concerne2'].rdef('Personne', 'Affaire').cardinality,
2745
0dafa29ace1f [schema migration] test reproducing pb when deleting a relation definition with mandatory card and without removing the associated rtype + fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2744
diff changeset
   291
                          '1*')
0dafa29ace1f [schema migration] test reproducing pb when deleting a relation definition with mandatory card and without removing the associated rtype + fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2744
diff changeset
   292
        self.mh.cmd_add_relation_definition('Personne', 'concerne2', 'Note')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   293
        self.assertEqual(sorted(self.schema['concerne2'].objects()), ['Affaire', 'Note'])
3252
c0e10da6f1cf tests update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2967
diff changeset
   294
        self.mh.create_entity('Personne', nom=u'tot')
c0e10da6f1cf tests update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2967
diff changeset
   295
        self.mh.create_entity('Affaire')
2745
0dafa29ace1f [schema migration] test reproducing pb when deleting a relation definition with mandatory card and without removing the associated rtype + fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2744
diff changeset
   296
        self.mh.rqlexec('SET X concerne2 Y WHERE X is Personne, Y is Affaire')
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   297
        self.session.commit(free_cnxset=False)
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   298
        self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Affaire')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   299
        self.assertTrue('concerne2' in self.schema)
2745
0dafa29ace1f [schema migration] test reproducing pb when deleting a relation definition with mandatory card and without removing the associated rtype + fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2744
diff changeset
   300
        self.mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Note')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   301
        self.assertFalse('concerne2' in self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   302
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   303
    def test_drop_relation_definition_existant_rtype(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   304
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   305
                          ['Affaire', 'Personne'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   306
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   307
                          ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   308
        self.mh.cmd_drop_relation_definition('Personne', 'concerne', 'Affaire')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   309
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   310
                          ['Affaire'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   311
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   312
                          ['Division', 'Note', 'Societe', 'SubDivision'])
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   313
        self.mh.cmd_add_relation_definition('Personne', 'concerne', 'Affaire')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   314
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   315
                          ['Affaire', 'Personne'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   316
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   317
                          ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   318
        # trick: overwrite self.maxeid to avoid deletion of just reintroduced types
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   319
        self.maxeid = self.session.execute('Any MAX(X)')[0][0]
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   320
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   321
    def test_drop_relation_definition_with_specialization(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   322
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   323
                          ['Affaire', 'Personne'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   324
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   325
                          ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   326
        self.mh.cmd_drop_relation_definition('Affaire', 'concerne', 'Societe')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   327
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   328
                          ['Affaire', 'Personne'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   329
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
3266
38ffdb284689 we must now explicitly call rebuild_infered_relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3252
diff changeset
   330
                          ['Affaire', 'Division', 'Note', 'SubDivision'])
38ffdb284689 we must now explicitly call rebuild_infered_relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3252
diff changeset
   331
        self.schema.rebuild_infered_relations() # need to be explicitly called once everything is in place
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   332
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   333
                          ['Affaire', 'Note'])
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   334
        self.mh.cmd_add_relation_definition('Affaire', 'concerne', 'Societe')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   335
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   336
                          ['Affaire', 'Personne'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   337
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
3266
38ffdb284689 we must now explicitly call rebuild_infered_relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3252
diff changeset
   338
                          ['Affaire', 'Note', 'Societe'])
38ffdb284689 we must now explicitly call rebuild_infered_relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3252
diff changeset
   339
        self.schema.rebuild_infered_relations() # need to be explicitly called once everything is in place
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   340
        self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   341
                          ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   342
        # trick: overwrite self.maxeid to avoid deletion of just reintroduced types
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   343
        self.maxeid = self.session.execute('Any MAX(X)')[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   344
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   345
    def test_rename_relation(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   346
        self.skipTest('implement me')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   347
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   348
    def test_change_relation_props_non_final(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   349
        rschema = self.schema['concerne']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   350
        card = rschema.rdef('Affaire', 'Societe').cardinality
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   351
        self.assertEqual(card, '**')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   352
        try:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
            self.mh.cmd_change_relation_props('Affaire', 'concerne', 'Societe',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   354
                                              cardinality='?*')
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   355
            card = rschema.rdef('Affaire', 'Societe').cardinality
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   356
            self.assertEqual(card, '?*')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   357
        finally:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   358
            self.mh.cmd_change_relation_props('Affaire', 'concerne', 'Societe',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   359
                                              cardinality='**')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   360
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   361
    def test_change_relation_props_final(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   362
        rschema = self.schema['adel']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   363
        card = rschema.rdef('Personne', 'String').fulltextindexed
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   364
        self.assertEqual(card, False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   365
        try:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   366
            self.mh.cmd_change_relation_props('Personne', 'adel', 'String',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   367
                                              fulltextindexed=True)
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   368
            card = rschema.rdef('Personne', 'String').fulltextindexed
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   369
            self.assertEqual(card, True)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   370
        finally:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   371
            self.mh.cmd_change_relation_props('Personne', 'adel', 'String',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   372
                                              fulltextindexed=False)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   373
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   374
    @tag('longrun')
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   375
    def test_sync_schema_props_perms(self):
2903
043c8fcb3819 [migration] drop rqlcursor
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
   376
        cursor = self.mh.session
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: 7242
diff changeset
   377
        cursor.set_cnxset()
4635
44a883148ab4 fix sync_schema_props_perms test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4191
diff changeset
   378
        nbrqlexpr_start = cursor.execute('Any COUNT(X) WHERE X is RQLExpression')[0][0]
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   379
        migrschema['titre'].rdefs[('Personne', 'String')].order = 7
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   380
        migrschema['adel'].rdefs[('Personne', 'String')].order = 6
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   381
        migrschema['ass'].rdefs[('Personne', 'String')].order = 5
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   382
        migrschema['Personne'].description = 'blabla bla'
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   383
        migrschema['titre'].description = 'usually a title'
4103
dc04bede3502 yams api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4100
diff changeset
   384
        migrschema['titre'].rdefs[('Personne', 'String')].description = 'title for this person'
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4103
diff changeset
   385
        delete_concerne_rqlexpr = self._rrqlexpr_rset('delete', 'concerne')
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4103
diff changeset
   386
        add_concerne_rqlexpr = self._rrqlexpr_rset('add', 'concerne')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6417
diff changeset
   387
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   388
        self.mh.cmd_sync_schema_props_perms(commit=False)
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   389
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   390
        self.assertEqual(cursor.execute('Any D WHERE X name "Personne", X description D')[0][0],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   391
                          'blabla bla')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   392
        self.assertEqual(cursor.execute('Any D WHERE X name "titre", X description D')[0][0],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   393
                          'usually a title')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   394
        self.assertEqual(cursor.execute('Any D WHERE X relation_type RT, RT name "titre",'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   395
                                         'X from_entity FE, FE name "Personne",'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   396
                                         'X description D')[0][0],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   397
                          'title for this person')
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   398
        rinorder = [n for n, in cursor.execute(
9151
78071e41926f [test] give a non-ambiguous order to sync_schema assertion (closes #3001959)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8947
diff changeset
   399
            'Any N ORDERBY O,N WHERE X is CWAttribute, X relation_type RT, RT name N,'
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   400
            'X from_entity FE, FE name "Personne",'
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   401
            'X ordernum O')]
2930
d7c23b2c7538 some test fixes, more in the 3.5 branch
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2903
diff changeset
   402
        expected = [u'nom', u'prenom', u'sexe', u'promo', u'ass', u'adel', u'titre',
9151
78071e41926f [test] give a non-ambiguous order to sync_schema assertion (closes #3001959)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8947
diff changeset
   403
                    u'web', u'tel', u'fax', u'datenaiss', u'test', u'tzdatenaiss',
7242
7c1937215db9 fix failing test_migration test caused by schema change
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7078
diff changeset
   404
                    u'description', u'firstname',
7c1937215db9 fix failing test_migration test caused by schema change
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7078
diff changeset
   405
                    u'creation_date', u'cwuri', u'modification_date']
9151
78071e41926f [test] give a non-ambiguous order to sync_schema assertion (closes #3001959)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8947
diff changeset
   406
        self.assertEqual(expected, rinorder)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   407
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   408
        # test permissions synchronization ####################################
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   409
        # new rql expr to add note entity
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   410
        eexpr = self._erqlexpr_entity('add', 'Note')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   411
        self.assertEqual(eexpr.expression,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   412
                          'X ecrit_part PE, U in_group G, '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   413
                          'PE require_permission P, P name "add_note", P require_group G')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   414
        self.assertEqual([et.name for et in eexpr.reverse_add_permission], ['Note'])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   415
        self.assertEqual(eexpr.reverse_read_permission, ())
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   416
        self.assertEqual(eexpr.reverse_delete_permission, ())
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   417
        self.assertEqual(eexpr.reverse_update_permission, ())
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   418
        self.assertTrue(self._rrqlexpr_rset('add', 'para'))
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   419
        # no rqlexpr to delete para attribute
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   420
        self.assertFalse(self._rrqlexpr_rset('delete', 'para'))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   421
        # new rql expr to add ecrit_par relation
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   422
        rexpr = self._rrqlexpr_entity('add', 'ecrit_par')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   423
        self.assertEqual(rexpr.expression,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   424
                          'O require_permission P, P name "add_note", '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   425
                          'U in_group G, P require_group G')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   426
        self.assertEqual([rdef.rtype.name for rdef in rexpr.reverse_add_permission], ['ecrit_par'])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   427
        self.assertEqual(rexpr.reverse_read_permission, ())
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   428
        self.assertEqual(rexpr.reverse_delete_permission, ())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   429
        # no more rqlexpr to delete and add travaille relation
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   430
        self.assertFalse(self._rrqlexpr_rset('add', 'travaille'))
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   431
        self.assertFalse(self._rrqlexpr_rset('delete', 'travaille'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   432
        # no more rqlexpr to delete and update Societe entity
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   433
        self.assertFalse(self._erqlexpr_rset('update', 'Societe'))
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   434
        self.assertFalse(self._erqlexpr_rset('delete', 'Societe'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   435
        # no more rqlexpr to read Affaire entity
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   436
        self.assertFalse(self._erqlexpr_rset('read', 'Affaire'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   437
        # rqlexpr to update Affaire entity has been updated
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   438
        eexpr = self._erqlexpr_entity('update', 'Affaire')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   439
        self.assertEqual(eexpr.expression, 'X concerne S, S owned_by U')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   440
        # no change for rqlexpr to add and delete Affaire entity
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   441
        self.assertEqual(len(self._erqlexpr_rset('delete', 'Affaire')), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   442
        self.assertEqual(len(self._erqlexpr_rset('add', 'Affaire')), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   443
        # no change for rqlexpr to add and delete concerne relation
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   444
        self.assertEqual(len(self._rrqlexpr_rset('delete', 'concerne')), len(delete_concerne_rqlexpr))
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   445
        self.assertEqual(len(self._rrqlexpr_rset('add', 'concerne')), len(add_concerne_rqlexpr))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   446
        # * migrschema involve:
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   447
        #   * 7 erqlexprs deletions (2 in (Affaire + Societe + Note.para) + 1 Note.something
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   448
        #   * 2 rrqlexprs deletions (travaille)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   449
        #   * 1 update (Affaire update)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   450
        #   * 2 new (Note add, ecrit_par add)
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   451
        #   * 2 implicit new for attributes (Note.para, Person.test)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   452
        # remaining orphan rql expr which should be deleted at commit (composite relation)
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   453
        # unattached expressions -> pending deletion on commit
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   454
        self.assertEqual(cursor.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "ERQLExpression",'
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   455
                                        'NOT ET1 read_permission X, NOT ET2 add_permission X, '
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   456
                                        'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   457
                          7)
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   458
        self.assertEqual(cursor.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "RRQLExpression",'
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   459
                                        'NOT ET1 read_permission X, NOT ET2 add_permission X, '
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   460
                                        'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   461
                          2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   462
        # finally
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   463
        self.assertEqual(cursor.execute('Any COUNT(X) WHERE X is RQLExpression')[0][0],
9395
96dba2efd16d [hooks/security] provide attribute "add" permission
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   464
                         nbrqlexpr_start + 1 + 2 + 2 + 2)
6208
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6163
diff changeset
   465
        self.mh.commit()
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6163
diff changeset
   466
        # unique_together test
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6163
diff changeset
   467
        self.assertEqual(len(self.schema.eschema('Personne')._unique_together), 1)
9273
f3795da61959 [test] use assertCountEqual instead of assertItemsEqual
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9151
diff changeset
   468
        self.assertCountEqual(self.schema.eschema('Personne')._unique_together[0],
6208
07b176640a8c unique_together integration in CW (alf+syt)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6163
diff changeset
   469
                                           ('nom', 'prenom', 'datenaiss'))
6635
4e560631f36d [test] repair test: we now have another unique constraint on CWSourceHostConfig
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
   470
        rset = cursor.execute('Any C WHERE C is CWUniqueTogetherConstraint, C constraint_of ET, ET name "Personne"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   471
        self.assertEqual(len(rset), 1)
6815
a84190d4e78c [schema] fix pb with ambiguous relation used within UniqueTogetherConstraint by having CWUniqueTogetherConstraint.relation targeting CWRType instead of CWAttribute/CWRelation. This fixes 3.10.7 migration.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
   472
        relations = [r.name for r in rset.get_entity(0, 0).relations]
9273
f3795da61959 [test] use assertCountEqual instead of assertItemsEqual
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9151
diff changeset
   473
        self.assertCountEqual(relations, ('nom', 'prenom', 'datenaiss'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   474
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   475
    def _erqlexpr_rset(self, action, ertype):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   476
        rql = 'RQLExpression X WHERE ET is CWEType, ET %s_permission X, ET name %%(name)s' % action
2903
043c8fcb3819 [migration] drop rqlcursor
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
   477
        return self.mh.session.execute(rql, {'name': ertype})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   478
    def _erqlexpr_entity(self, action, ertype):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   479
        rset = self._erqlexpr_rset(action, ertype)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   480
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   481
        return rset.get_entity(0, 0)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   482
    def _rrqlexpr_rset(self, action, ertype):
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4103
diff changeset
   483
        rql = 'RQLExpression X WHERE RT is CWRType, RDEF %s_permission X, RT name %%(name)s, RDEF relation_type RT' % action
2903
043c8fcb3819 [migration] drop rqlcursor
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
   484
        return self.mh.session.execute(rql, {'name': ertype})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   485
    def _rrqlexpr_entity(self, action, ertype):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   486
        rset = self._rrqlexpr_rset(action, ertype)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   487
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   488
        return rset.get_entity(0, 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   489
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   490
    def test_set_size_constraint(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   491
        # existing previous value
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   492
        try:
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   493
            self.mh.cmd_set_size_constraint('CWEType', 'name', 128)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   494
        finally:
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   495
            self.mh.cmd_set_size_constraint('CWEType', 'name', 64)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   496
        # non existing previous value
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   497
        try:
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   498
            self.mh.cmd_set_size_constraint('CWEType', 'description', 256)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   499
        finally:
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   500
            self.mh.cmd_set_size_constraint('CWEType', 'description', None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   501
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   502
    @tag('longrun')
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   503
    def test_add_remove_cube_and_deps(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   504
        cubes = set(self.config.cubes())
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   505
        schema = self.repo.schema
8696
0bb18407c053 [toward py3k] rewrite dict.keys() and dict.values() (part of #2711624)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8694
diff changeset
   506
        self.assertEqual(sorted((str(s), str(o)) for s, o in schema['see_also'].rdefs.iterkeys()),
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   507
                          sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   508
                                  ('Bookmark', 'Bookmark'), ('Bookmark', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   509
                                  ('Note', 'Note'), ('Note', 'Bookmark')]))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   510
        try:
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   511
            try:
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   512
                self.mh.cmd_remove_cube('email', removedeps=True)
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   513
                # file was there because it's an email dependancy, should have been removed
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   514
                self.assertFalse('email' in self.config.cubes())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   515
                self.assertFalse(self.config.cube_dir('email') in self.config.cubes_path())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   516
                self.assertFalse('file' in self.config.cubes())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   517
                self.assertFalse(self.config.cube_dir('file') in self.config.cubes_path())
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   518
                for ertype in ('Email', 'EmailThread', 'EmailPart', 'File',
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   519
                               'sender', 'in_thread', 'reply_to', 'data_format'):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   520
                    self.assertFalse(ertype in schema, ertype)
8696
0bb18407c053 [toward py3k] rewrite dict.keys() and dict.values() (part of #2711624)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8694
diff changeset
   521
                self.assertEqual(sorted(schema['see_also'].rdefs.iterkeys()),
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   522
                                  sorted([('Folder', 'Folder'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   523
                                          ('Bookmark', 'Bookmark'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   524
                                          ('Bookmark', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   525
                                          ('Note', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   526
                                          ('Note', 'Bookmark')]))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   527
                self.assertEqual(sorted(schema['see_also'].subjects()), ['Bookmark', 'Folder', 'Note'])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   528
                self.assertEqual(sorted(schema['see_also'].objects()), ['Bookmark', 'Folder', 'Note'])
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   529
                self.assertEqual(self.session.execute('Any X WHERE X pkey "system.version.email"').rowcount, 0)
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   530
                self.assertEqual(self.session.execute('Any X WHERE X pkey "system.version.file"').rowcount, 0)
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   531
            except :
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   532
                import traceback
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   533
                traceback.print_exc()
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   534
                raise
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   535
        finally:
47
54087a269bdd fix tests (some where broken after ECache was added)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 0
diff changeset
   536
            self.mh.cmd_add_cube('email')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   537
            self.assertTrue('email' in self.config.cubes())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   538
            self.assertTrue(self.config.cube_dir('email') in self.config.cubes_path())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   539
            self.assertTrue('file' in self.config.cubes())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   540
            self.assertTrue(self.config.cube_dir('file') in self.config.cubes_path())
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   541
            for ertype in ('Email', 'EmailThread', 'EmailPart', 'File',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   542
                           'sender', 'in_thread', 'reply_to', 'data_format'):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   543
                self.assertTrue(ertype in schema, ertype)
8696
0bb18407c053 [toward py3k] rewrite dict.keys() and dict.values() (part of #2711624)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8694
diff changeset
   544
            self.assertEqual(sorted(schema['see_also'].rdefs.iterkeys()),
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   545
                              sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   546
                                      ('Bookmark', 'Bookmark'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   547
                                      ('Bookmark', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   548
                                      ('Note', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   549
                                      ('Note', 'Bookmark')]))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   550
            self.assertEqual(sorted(schema['see_also'].subjects()), ['Bookmark', 'EmailThread', 'Folder', 'Note'])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   551
            self.assertEqual(sorted(schema['see_also'].objects()), ['Bookmark', 'EmailThread', 'Folder', 'Note'])
47
54087a269bdd fix tests (some where broken after ECache was added)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 0
diff changeset
   552
            from cubes.email.__pkginfo__ import version as email_version
54087a269bdd fix tests (some where broken after ECache was added)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 0
diff changeset
   553
            from cubes.file.__pkginfo__ import version as file_version
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   554
            self.assertEqual(self.session.execute('Any V WHERE X value V, X pkey "system.version.email"')[0][0],
47
54087a269bdd fix tests (some where broken after ECache was added)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 0
diff changeset
   555
                              email_version)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   556
            self.assertEqual(self.session.execute('Any V WHERE X value V, X pkey "system.version.file"')[0][0],
47
54087a269bdd fix tests (some where broken after ECache was added)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 0
diff changeset
   557
                              file_version)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   558
            # trick: overwrite self.maxeid to avoid deletion of just reintroduced
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   559
            #        types (and their associated tables!)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   560
            self.maxeid = self.session.execute('Any MAX(X)')[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   561
            # why this commit is necessary is unclear to me (though without it
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   562
            # next test may fail complaining of missing tables
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   563
            self.session.commit(free_cnxset=False)
972
1efba3fd1364 set_state command in shell
sylvain.thenault@logilab.fr
parents: 934
diff changeset
   564
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   565
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   566
    @tag('longrun')
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   567
    def test_add_remove_cube_no_deps(self):
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   568
        cubes = set(self.config.cubes())
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   569
        schema = self.repo.schema
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   570
        try:
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   571
            try:
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   572
                self.mh.cmd_remove_cube('email')
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   573
                cubes.remove('email')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   574
                self.assertFalse('email' in self.config.cubes())
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   575
                self.assertTrue('file' in self.config.cubes())
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   576
                for ertype in ('Email', 'EmailThread', 'EmailPart',
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   577
                               'sender', 'in_thread', 'reply_to'):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   578
                    self.assertFalse(ertype in schema, ertype)
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   579
            except :
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   580
                import traceback
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   581
                traceback.print_exc()
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   582
                raise
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   583
        finally:
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   584
            self.mh.cmd_add_cube('email')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   585
            self.assertTrue('email' in self.config.cubes())
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   586
            # trick: overwrite self.maxeid to avoid deletion of just reintroduced
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   587
            #        types (and their associated tables!)
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   588
            self.maxeid = self.session.execute('Any MAX(X)')[0][0]
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   589
            # why this commit is necessary is unclear to me (though without it
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   590
            # next test may fail complaining of missing tables
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   591
            self.session.commit(free_cnxset=False)
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   592
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   593
    def test_remove_dep_cube(self):
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6795
diff changeset
   594
        with self.assertRaises(ConfigurationError) as cm:
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6795
diff changeset
   595
            self.mh.cmd_remove_cube('file')
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6795
diff changeset
   596
        self.assertEqual(str(cm.exception), "can't remove cube file, used as a dependency")
2124
5a0b02f37b23 set removedeps to False by default, raise an exception instead of a simple assertion for error, more remove_cube tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   597
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   598
    @tag('longrun')
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   599
    def test_introduce_base_class(self):
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   600
        self.mh.cmd_add_entity_type('Para')
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   601
        self.mh.repo.schema.rebuild_infered_relations()
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   602
        self.assertEqual(sorted(et.type for et in self.schema['Para'].specialized_by()),
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   603
                          ['Note'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   604
        self.assertEqual(self.schema['Note'].specializes().type, 'Para')
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   605
        self.mh.cmd_add_entity_type('Text')
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   606
        self.mh.repo.schema.rebuild_infered_relations()
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   607
        self.assertEqual(sorted(et.type for et in self.schema['Para'].specialized_by()),
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   608
                          ['Note', 'Text'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   609
        self.assertEqual(self.schema['Text'].specializes().type, 'Para')
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   610
        # test columns have been actually added
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   611
        text = self.session.execute('INSERT Text X: X para "hip", X summary "hop", X newattr "momo"').get_entity(0, 0)
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   612
        note = self.session.execute('INSERT Note X: X para "hip", X shortpara "hop", X newattr "momo", X unique_id "x"').get_entity(0, 0)
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   613
        aff = self.session.execute('INSERT Affaire X').get_entity(0, 0)
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   614
        self.assertTrue(self.session.execute('SET X newnotinlined Y WHERE X eid %(x)s, Y eid %(y)s',
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
   615
                                     {'x': text.eid, 'y': aff.eid}))
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   616
        self.assertTrue(self.session.execute('SET X newnotinlined Y WHERE X eid %(x)s, Y eid %(y)s',
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
   617
                                     {'x': note.eid, 'y': aff.eid}))
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   618
        self.assertTrue(self.session.execute('SET X newinlined Y WHERE X eid %(x)s, Y eid %(y)s',
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
   619
                                     {'x': text.eid, 'y': aff.eid}))
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   620
        self.assertTrue(self.session.execute('SET X newinlined Y WHERE X eid %(x)s, Y eid %(y)s',
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4774
diff changeset
   621
                                     {'x': note.eid, 'y': aff.eid}))
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   622
        # XXX remove specializes by ourselves, else tearDown fails when removing
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   623
        # Para because of Note inheritance. This could be fixed by putting the
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   624
        # MemSchemaCWETypeDel(session, name) operation in the
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   625
        # after_delete_entity(CWEType) hook, since in that case the MemSchemaSpecializesDel
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   626
        # operation would be removed before, but I'm not sure this is a desired behaviour.
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   627
        #
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   628
        # also we need more tests about introducing/removing base classes or
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   629
        # specialization relationship...
9080
f0c00b07799a [migraction] do not access session.data directly
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
   630
        self.session.set_shared_data('rebuild-infered', True)
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   631
        try:
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   632
            self.session.execute('DELETE X specializes Y WHERE Y name "Para"')
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
   633
            self.session.commit(free_cnxset=False)
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   634
        finally:
9080
f0c00b07799a [migraction] do not access session.data directly
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9043
diff changeset
   635
            self.session.set_shared_data('rebuild-infered', False)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   636
        self.assertEqual(sorted(et.type for et in self.schema['Para'].specialized_by()),
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   637
                          [])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   638
        self.assertEqual(self.schema['Note'].specializes(), None)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   639
        self.assertEqual(self.schema['Text'].specializes(), None)
2963
12ad88615a12 test and fix migration introducing base classes (w/ regard to yams inheritance)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2930
diff changeset
   640
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   641
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   642
    def test_add_symmetric_relation_type(self):
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   643
        same_as_sql = self.mh.sqlexec("SELECT sql FROM sqlite_master WHERE type='table' "
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   644
                                      "and name='same_as_relation'")
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   645
        self.assertFalse(same_as_sql)
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   646
        self.mh.cmd_add_relation_type('same_as')
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   647
        same_as_sql = self.mh.sqlexec("SELECT sql FROM sqlite_master WHERE type='table' "
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   648
                                      "and name='same_as_relation'")
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   649
        self.assertTrue(same_as_sql)
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   650
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   651
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   652
    unittest_main()