server/test/unittest_migractions.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 16 Sep 2015 16:04:17 +0200
changeset 10799 ec97974b9010
parent 10662 10942ed172de
child 10800 1e4ddf5ee9ad
permissions -rw-r--r--
make sync_schema_props_perms(<computed rtype>) work as expected It currently ends up with an ExecutionError while we want to synchronize permissions. This makes 3.21.1 migration of any application using computed relation crashing. Also, remove pre 3.6 compat code in hooks that prevent living schema update on computed relation's permission changes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9588
fe267b7336f3 [migration] always rebuild infered relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9395
diff changeset
     1
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 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
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    21
import os, os.path as osp
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    22
from contextlib import contextmanager
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    24
from logilab.common.testlib import unittest_main, Tags, tag
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    26
from yams.constraints import UniqueConstraint
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    27
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    28
from cubicweb import ConfigurationError, ValidationError, ExecutionError
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    29
from cubicweb.devtools import startpgcluster, stoppgcluster
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
    30
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
    31
from cubicweb.server.sqlutils import SQL_PREFIX
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    32
from cubicweb.server.migractions import ServerMigrationHelper
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    34
import cubicweb.devtools
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    35
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    36
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    37
HERE = osp.dirname(osp.abspath(__file__))
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    38
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    39
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    40
def setUpModule():
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    41
    startpgcluster(__file__)
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    42
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    43
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
    44
migrschema = None
6781
5062d86d6ffe [unittest2] use unittest2 module fixture api
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6635
diff changeset
    45
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
    46
    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
    47
    del migrschema
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    48
    if hasattr(MigrationCommandsTC, 'origschema'):
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    49
        del MigrationCommandsTC.origschema
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    50
    if hasattr(MigrationCommandsComputedTC, 'origschema'):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    51
        del MigrationCommandsComputedTC.origschema
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    52
    stoppgcluster(__file__)
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    53
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    54
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    55
class MigrationConfig(cubicweb.devtools.TestServerConfiguration):
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    56
    default_sources = cubicweb.devtools.DEFAULT_PSQL_SOURCES
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    57
    CUBES_PATH = [osp.join(HERE, 'data-migractions', 'cubes')]
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    58
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    59
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    60
class MigrationTC(CubicWebTC):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    61
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    62
    appid = 'data-migractions'
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    63
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    64
    configcls = MigrationConfig
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    65
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    66
    tags = CubicWebTC.tags | Tags(('server', 'migration', 'migractions'))
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    67
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
    68
    def _init_repo(self):
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    69
        super(MigrationTC, self)._init_repo()
4681
5f72584ab1d7 [test] cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4635
diff changeset
    70
        # 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
    71
        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
    72
        # 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
    73
        config = self.config
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    74
        config.appid = osp.join(self.appid, 'migratedapp')
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    75
        config._apphome = osp.join(HERE, config.appid)
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    76
        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
    77
        migrschema = config.load_schema()
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    78
        config.appid = self.appid
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    79
        config._apphome = osp.join(HERE, self.appid)
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    80
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
    def setUp(self):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    82
        self.configcls.cls_adjust_sys_path()
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    83
        super(MigrationTC, self).setUp()
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    84
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    85
    def tearDown(self):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    86
        super(MigrationTC, self).tearDown()
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    87
        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
    88
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    89
    @contextmanager
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    90
    def mh(self):
10353
d9a1e7939ee6 [migractions] remove any session related leftovers
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10257
diff changeset
    91
        with self.admin_access.repo_cnx() as cnx:
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    92
            yield cnx, ServerMigrationHelper(self.repo.config, migrschema,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    93
                                             repo=self.repo, cnx=cnx,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    94
                                             interactive=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    95
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    96
    def table_sql(self, mh, tablename):
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    97
        result = mh.sqlexec("SELECT table_name FROM information_schema.tables WHERE LOWER(table_name)=%(table)s",
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    98
                            {'table': tablename.lower()})
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    99
        if result:
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   100
            return result[0][0]
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   101
        return None # no such table
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   102
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   103
    def table_schema(self, mh, tablename):
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   104
        result = mh.sqlexec("SELECT column_name, data_type, character_maximum_length FROM information_schema.columns "
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   105
                            "WHERE LOWER(table_name) = %(table)s", {'table': tablename.lower()})
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   106
        assert result, 'no table %s' % tablename
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   107
        return dict((x[0], (x[1], x[2])) for x in result)
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   108
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   109
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   110
class MigrationCommandsTC(MigrationTC):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   111
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   112
    def _init_repo(self):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   113
        super(MigrationCommandsTC, self)._init_repo()
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   114
        assert 'Folder' in migrschema
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   115
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
   116
    def test_add_attribute_bool(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   117
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   118
            self.assertNotIn('yesno', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   119
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   120
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   121
            mh.cmd_add_attribute('Note', 'yesno')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   122
            self.assertIn('yesno', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   123
            self.assertEqual(self.schema['yesno'].subjects(), ('Note',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   124
            self.assertEqual(self.schema['yesno'].objects(), ('Boolean',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   125
            self.assertEqual(self.schema['Note'].default('yesno'), False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   126
            # test default value set on existing entities
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   127
            note = cnx.execute('Note X').get_entity(0, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   128
            self.assertEqual(note.yesno, False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   129
            # test default value set for next entities
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   130
            self.assertEqual(cnx.create_entity('Note').yesno, False)
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
   131
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   132
    def test_add_attribute_int(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   133
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   134
            self.assertNotIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   135
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   136
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   137
            orderdict = dict(mh.rqlexec('Any RTN, O WHERE X name "Note", RDEF from_entity X, '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   138
                                        'RDEF relation_type RT, RDEF ordernum O, RT name RTN'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   139
            mh.cmd_add_attribute('Note', 'whatever')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   140
            self.assertIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   141
            self.assertEqual(self.schema['whatever'].subjects(), ('Note',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   142
            self.assertEqual(self.schema['whatever'].objects(), ('Int',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   143
            self.assertEqual(self.schema['Note'].default('whatever'), 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   144
            # test default value set on existing entities
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   145
            note = cnx.execute('Note X').get_entity(0, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   146
            self.assertIsInstance(note.whatever, int)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   147
            self.assertEqual(note.whatever, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   148
            # test default value set for next entities
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   149
            self.assertEqual(cnx.create_entity('Note').whatever, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   150
            # test attribute order
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   151
            orderdict2 = dict(mh.rqlexec('Any RTN, O WHERE X name "Note", RDEF from_entity X, '
3134
3cda74b5534c update test to avoid failure due to migration schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3126
diff changeset
   152
                                         'RDEF relation_type RT, RDEF ordernum O, RT name RTN'))
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   153
            whateverorder = migrschema['whatever'].rdef('Note', 'Int').order
10662
10942ed172de [py3k] dict.iteritems → dict.items
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10646
diff changeset
   154
            for k, v in orderdict.items():
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   155
                if v >= whateverorder:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   156
                    orderdict[k] = v+1
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   157
            orderdict['whatever'] = whateverorder
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   158
            self.assertDictEqual(orderdict, orderdict2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   159
            #self.assertEqual([r.type for r in self.schema['Note'].ordered_relations()],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   160
            #                  ['modification_date', 'creation_date', 'owned_by',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   161
            #                   'eid', 'ecrit_par', 'inline1', 'date', 'type',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   162
            #                   'whatever', 'date', 'in_basket'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   163
            # NB: commit instead of rollback make following test fail with py2.5
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   164
            #     this sounds like a pysqlite/2.5 bug (the same eid is affected to
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   165
            #     two different entities)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
    def test_add_attribute_varchar(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   168
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   169
            self.assertNotIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   170
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   171
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   172
            self.assertNotIn('shortpara', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   173
            mh.cmd_add_attribute('Note', 'shortpara')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   174
            self.assertIn('shortpara', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   175
            self.assertEqual(self.schema['shortpara'].subjects(), ('Note', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   176
            self.assertEqual(self.schema['shortpara'].objects(), ('String', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   177
            # test created column is actually a varchar(64)
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   178
            fields = self.table_schema(mh, '%sNote' % SQL_PREFIX)
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   179
            self.assertEqual(fields['%sshortpara' % SQL_PREFIX], ('character varying', 64))
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   180
            # test default value set on existing entities
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   181
            self.assertEqual(cnx.execute('Note X').get_entity(0, 0).shortpara, 'hop')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   182
            # test default value set for next entities
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   183
            self.assertEqual(cnx.create_entity('Note').shortpara, 'hop')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   184
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   185
    def test_add_datetime_with_default_value_attribute(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   186
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   187
            self.assertNotIn('mydate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   188
            self.assertNotIn('oldstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   189
            self.assertNotIn('newstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   190
            mh.cmd_add_attribute('Note', 'mydate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   191
            mh.cmd_add_attribute('Note', 'oldstyledefaultdate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   192
            mh.cmd_add_attribute('Note', 'newstyledefaultdate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   193
            self.assertIn('mydate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   194
            self.assertIn('oldstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   195
            self.assertIn('newstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   196
            self.assertEqual(self.schema['mydate'].subjects(), ('Note', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   197
            self.assertEqual(self.schema['mydate'].objects(), ('Date', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   198
            testdate = date(2005, 12, 13)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   199
            eid1 = mh.rqlexec('INSERT Note N')[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   200
            eid2 = mh.rqlexec('INSERT Note N: N mydate %(mydate)s', {'mydate' : testdate})[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   201
            d1 = mh.rqlexec('Any D WHERE X eid %(x)s, X mydate D', {'x': eid1})[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   202
            d2 = mh.rqlexec('Any D WHERE X eid %(x)s, X mydate D', {'x': eid2})[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   203
            d3 = mh.rqlexec('Any D WHERE X eid %(x)s, X oldstyledefaultdate D', {'x': eid1})[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   204
            d4 = mh.rqlexec('Any D WHERE X eid %(x)s, X newstyledefaultdate D', {'x': eid1})[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   205
            self.assertEqual(d1, date.today())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   206
            self.assertEqual(d2, testdate)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   207
            myfavoritedate = date(2013, 1, 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   208
            self.assertEqual(d3, myfavoritedate)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   209
            self.assertEqual(d4, myfavoritedate)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   210
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   211
    def test_drop_chosen_constraints_ctxmanager(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   212
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   213
            with mh.cmd_dropped_constraints('Note', 'unique_id', UniqueConstraint):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   214
                mh.cmd_add_attribute('Note', 'unique_id')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   215
                # make sure the maxsize constraint is not dropped
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   216
                self.assertRaises(ValidationError,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   217
                                  mh.rqlexec,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   218
                                  'INSERT Note N: N unique_id "xyz"')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   219
                mh.rollback()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   220
                # make sure the unique constraint is dropped
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   221
                mh.rqlexec('INSERT Note N: N unique_id "x"')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   222
                mh.rqlexec('INSERT Note N: N unique_id "x"')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   223
                mh.rqlexec('DELETE Note N')
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   224
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   225
    def test_drop_required_ctxmanager(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   226
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   227
            with mh.cmd_dropped_constraints('Note', 'unique_id', cstrtype=None,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   228
                                            droprequired=True):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   229
                mh.cmd_add_attribute('Note', 'unique_id')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   230
                mh.rqlexec('INSERT Note N')
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   231
                mh.rqlexec('SET N unique_id "x"')
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   232
            # make sure the required=True was restored
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   233
            self.assertRaises(ValidationError, mh.rqlexec, 'INSERT Note N')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   234
            mh.rollback()
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   235
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   236
    def test_rename_attribute(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   237
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   238
            self.assertNotIn('civility', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   239
            eid1 = mh.rqlexec('INSERT Personne X: X nom "lui", X sexe "M"')[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   240
            eid2 = mh.rqlexec('INSERT Personne X: X nom "l\'autre", X sexe NULL')[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   241
            mh.cmd_rename_attribute('Personne', 'sexe', 'civility')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   242
            self.assertNotIn('sexe', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   243
            self.assertIn('civility', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   244
            # test data has been backported
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   245
            c1 = mh.rqlexec('Any C WHERE X eid %s, X civility C' % eid1)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   246
            self.assertEqual(c1, 'M')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   247
            c2 = mh.rqlexec('Any C WHERE X eid %s, X civility C' % eid2)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   248
            self.assertEqual(c2, None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   249
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   250
    def test_workflow_actions(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   251
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   252
            wf = mh.cmd_add_workflow(u'foo', ('Personne', 'Email'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   253
                                     ensure_workflowable=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   254
            for etype in ('Personne', 'Email'):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   255
                s1 = mh.rqlexec('Any N WHERE WF workflow_of ET, ET name "%s", WF name N' %
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   256
                                etype)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   257
                self.assertEqual(s1, "foo")
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   258
                s1 = mh.rqlexec('Any N WHERE ET default_workflow WF, ET name "%s", WF name N' %
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   259
                                etype)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   260
                self.assertEqual(s1, "foo")
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   261
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   262
    def test_add_entity_type(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   263
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   264
            self.assertNotIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   265
            self.assertNotIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   266
            mh.cmd_add_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   267
            self.assertIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   268
            self.assertIn('Old', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   269
            self.assertTrue(cnx.execute('CWEType X WHERE X name "Folder2"'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   270
            self.assertIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   271
            self.assertTrue(cnx.execute('CWRType X WHERE X name "filed_under2"'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   272
            self.assertEqual(sorted(str(rs) for rs in self.schema['Folder2'].subject_relations()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   273
                              ['created_by', 'creation_date', 'cw_source', 'cwuri',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   274
                               'description', 'description_format',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   275
                               'eid',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   276
                               'filed_under2', 'has_text',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   277
                               'identity', 'in_basket', 'is', 'is_instance_of',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   278
                               'modification_date', 'name', 'owned_by'])
10257
1925e7fe9412 [server/test] don't rely on a sorted output from .object_relations()
Julien Cristau <julien.cristau@logilab.fr>
parents: 10129
diff changeset
   279
            self.assertCountEqual([str(rs) for rs in self.schema['Folder2'].object_relations()],
1925e7fe9412 [server/test] don't rely on a sorted output from .object_relations()
Julien Cristau <julien.cristau@logilab.fr>
parents: 10129
diff changeset
   280
                                  ['filed_under2', 'identity'])
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   281
            # Old will be missing as it has been renamed into 'New' in the migrated
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   282
            # schema while New hasn't been added here.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   283
            self.assertEqual(sorted(str(e) for e in self.schema['filed_under2'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   284
                             sorted(str(e) for e in self.schema.entities() if not e.final and e != 'Old'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   285
            self.assertEqual(self.schema['filed_under2'].objects(), ('Folder2',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   286
            eschema = self.schema.eschema('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   287
            for cstr in eschema.rdef('name').constraints:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   288
                self.assertTrue(hasattr(cstr, 'eid'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   289
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   290
    def test_add_drop_entity_type(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   291
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   292
            mh.cmd_add_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   293
            wf = mh.cmd_add_workflow(u'folder2 wf', 'Folder2',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   294
                                     ensure_workflowable=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   295
            todo = wf.add_state(u'todo', initial=True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   296
            done = wf.add_state(u'done')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   297
            wf.add_transition(u'redoit', done, todo)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   298
            wf.add_transition(u'markasdone', todo, done)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   299
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   300
            eschema = self.schema.eschema('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   301
            mh.cmd_drop_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   302
            self.assertNotIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   303
            self.assertFalse(cnx.execute('CWEType X WHERE X name "Folder2"'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   304
            # test automatic workflow deletion
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   305
            self.assertFalse(cnx.execute('Workflow X WHERE NOT X workflow_of ET'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   306
            self.assertFalse(cnx.execute('State X WHERE NOT X state_of WF'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   307
            self.assertFalse(cnx.execute('Transition X WHERE NOT X transition_of WF'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   308
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
   309
    def test_rename_entity_type(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   310
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   311
            entity = mh.create_entity('Old', name=u'old')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   312
            self.repo.type_and_source_from_eid(entity.eid, entity._cw)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   313
            mh.cmd_rename_entity_type('Old', 'New')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   314
            mh.cmd_rename_attribute('New', 'name', 'new_name')
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
   315
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   316
    def test_add_drop_relation_type(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   317
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   318
            mh.cmd_add_entity_type('Folder2', auto=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   319
            mh.cmd_add_relation_type('filed_under2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   320
            self.assertIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   321
            # Old will be missing as it has been renamed into 'New' in the migrated
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   322
            # schema while New hasn't been added here.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   323
            self.assertEqual(sorted(str(e) for e in self.schema['filed_under2'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   324
                             sorted(str(e) for e in self.schema.entities()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   325
                                    if not e.final and e != 'Old'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   326
            self.assertEqual(self.schema['filed_under2'].objects(), ('Folder2',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   327
            mh.cmd_drop_relation_type('filed_under2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   328
            self.assertNotIn('filed_under2', self.schema)
10129
52adf66fae7d [migration] don't crash when deleting a non-existing rtype
Julien Cristau <julien.cristau@logilab.fr>
parents: 10107
diff changeset
   329
            # this should not crash
52adf66fae7d [migration] don't crash when deleting a non-existing rtype
Julien Cristau <julien.cristau@logilab.fr>
parents: 10107
diff changeset
   330
            mh.cmd_drop_relation_type('filed_under2')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   331
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   332
    def test_add_relation_definition_nortype(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   333
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   334
            mh.cmd_add_relation_definition('Personne', 'concerne2', 'Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   335
            self.assertEqual(self.schema['concerne2'].subjects(),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   336
                             ('Personne',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   337
            self.assertEqual(self.schema['concerne2'].objects(),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   338
                             ('Affaire', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   339
            self.assertEqual(self.schema['concerne2'].rdef('Personne', 'Affaire').cardinality,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   340
                              '1*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   341
            mh.cmd_add_relation_definition('Personne', 'concerne2', 'Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   342
            self.assertEqual(sorted(self.schema['concerne2'].objects()), ['Affaire', 'Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   343
            mh.create_entity('Personne', nom=u'tot')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   344
            mh.create_entity('Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   345
            mh.rqlexec('SET X concerne2 Y WHERE X is Personne, Y is Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   346
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   347
            mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   348
            self.assertIn('concerne2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   349
            mh.cmd_drop_relation_definition('Personne', 'concerne2', 'Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   350
            self.assertNotIn('concerne2', self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   351
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   352
    def test_drop_relation_definition_existant_rtype(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   353
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   354
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   355
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   356
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   357
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   358
            mh.cmd_drop_relation_definition('Personne', 'concerne', 'Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   359
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   360
                              ['Affaire'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   361
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   362
                              ['Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   363
            mh.cmd_add_relation_definition('Personne', 'concerne', 'Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   364
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   365
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   366
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   367
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   368
            # trick: overwrite self.maxeid to avoid deletion of just reintroduced types
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   369
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   370
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   371
    def test_drop_relation_definition_with_specialization(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   372
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   373
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   374
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   375
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   376
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   377
            mh.cmd_drop_relation_definition('Affaire', 'concerne', 'Societe')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   378
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   379
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   380
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   381
                              ['Affaire', 'Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   382
            mh.cmd_add_relation_definition('Affaire', 'concerne', 'Societe')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   383
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   384
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   385
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   386
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   387
            # trick: overwrite self.maxeid to avoid deletion of just reintroduced types
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   388
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   389
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   390
    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
   391
        self.skipTest('implement me')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   392
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   393
    def test_change_relation_props_non_final(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   394
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   395
            rschema = self.schema['concerne']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   396
            card = rschema.rdef('Affaire', 'Societe').cardinality
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   397
            self.assertEqual(card, '**')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   398
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   399
                mh.cmd_change_relation_props('Affaire', 'concerne', 'Societe',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   400
                                             cardinality='?*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   401
                card = rschema.rdef('Affaire', 'Societe').cardinality
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   402
                self.assertEqual(card, '?*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   403
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   404
                mh.cmd_change_relation_props('Affaire', 'concerne', 'Societe',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   405
                                             cardinality='**')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   406
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   407
    def test_change_relation_props_final(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   408
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   409
            rschema = self.schema['adel']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   410
            card = rschema.rdef('Personne', 'String').fulltextindexed
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   411
            self.assertEqual(card, False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   412
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   413
                mh.cmd_change_relation_props('Personne', 'adel', 'String',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   414
                                             fulltextindexed=True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   415
                card = rschema.rdef('Personne', 'String').fulltextindexed
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   416
                self.assertEqual(card, True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   417
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   418
                mh.cmd_change_relation_props('Personne', 'adel', 'String',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   419
                                             fulltextindexed=False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   420
9565
fa00fc251d57 [migractions] Better handle removal of RQLConstraint in sync_schema
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9273
diff changeset
   421
    def test_sync_schema_props_perms_rqlconstraints(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   422
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   423
            # Drop one of the RQLConstraint.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   424
            rdef = self.schema['evaluee'].rdefs[('Personne', 'Note')]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   425
            oldconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   426
            self.assertIn('S created_by U',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   427
                          [cstr.expression for cstr in oldconstraints])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   428
            mh.cmd_sync_schema_props_perms('evaluee', commit=True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   429
            newconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   430
            self.assertNotIn('S created_by U',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   431
                             [cstr.expression for cstr in newconstraints])
9565
fa00fc251d57 [migractions] Better handle removal of RQLConstraint in sync_schema
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9273
diff changeset
   432
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   433
            # Drop all RQLConstraint.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   434
            rdef = self.schema['travaille'].rdefs[('Personne', 'Societe')]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   435
            oldconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   436
            self.assertEqual(len(oldconstraints), 2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   437
            mh.cmd_sync_schema_props_perms('travaille', commit=True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   438
            rdef = self.schema['travaille'].rdefs[('Personne', 'Societe')]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   439
            newconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   440
            self.assertEqual(len(newconstraints), 0)
9565
fa00fc251d57 [migractions] Better handle removal of RQLConstraint in sync_schema
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9273
diff changeset
   441
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   442
    @tag('longrun')
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   443
    def test_sync_schema_props_perms(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   444
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   445
            nbrqlexpr_start = cnx.execute('Any COUNT(X) WHERE X is RQLExpression')[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   446
            migrschema['titre'].rdefs[('Personne', 'String')].order = 7
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   447
            migrschema['adel'].rdefs[('Personne', 'String')].order = 6
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   448
            migrschema['ass'].rdefs[('Personne', 'String')].order = 5
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   449
            migrschema['Personne'].description = 'blabla bla'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   450
            migrschema['titre'].description = 'usually a title'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   451
            migrschema['titre'].rdefs[('Personne', 'String')].description = 'title for this person'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   452
            delete_concerne_rqlexpr = self._rrqlexpr_rset(cnx, 'delete', 'concerne')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   453
            add_concerne_rqlexpr = self._rrqlexpr_rset(cnx, 'add', 'concerne')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6417
diff changeset
   454
10584
743ed2b13a6f [syncschema] only add to the `synchronized` set if all possible updates have been done
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9787
diff changeset
   455
            # make sure properties (e.g. etype descriptions) are synced by the
743ed2b13a6f [syncschema] only add to the `synchronized` set if all possible updates have been done
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9787
diff changeset
   456
            # second call to sync_schema
743ed2b13a6f [syncschema] only add to the `synchronized` set if all possible updates have been done
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9787
diff changeset
   457
            mh.cmd_sync_schema_props_perms(syncprops=False, commit=False)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   458
            mh.cmd_sync_schema_props_perms(commit=False)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   459
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   460
            self.assertEqual(cnx.execute('Any D WHERE X name "Personne", X description D')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   461
                             'blabla bla')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   462
            self.assertEqual(cnx.execute('Any D WHERE X name "titre", X description D')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   463
                             'usually a title')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   464
            self.assertEqual(cnx.execute('Any D WHERE X relation_type RT, RT name "titre",'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   465
                                         'X from_entity FE, FE name "Personne",'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   466
                                         'X description D')[0][0],
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   467
                             'title for this person')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   468
            rinorder = [n for n, in cnx.execute(
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   469
                'Any N ORDERBY O,N WHERE X is CWAttribute, X relation_type RT, RT name N,'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   470
                'X from_entity FE, FE name "Personne",'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   471
                'X ordernum O')]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   472
            expected = [u'nom', u'prenom', u'sexe', u'promo', u'ass', u'adel', u'titre',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   473
                        u'web', u'tel', u'fax', u'datenaiss', u'test', u'tzdatenaiss',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   474
                        u'description', u'firstname',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   475
                        u'creation_date', u'cwuri', u'modification_date']
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   476
            self.assertEqual(expected, rinorder)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   477
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   478
            # test permissions synchronization ####################################
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   479
            # new rql expr to add note entity
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   480
            eexpr = self._erqlexpr_entity(cnx, 'add', 'Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   481
            self.assertEqual(eexpr.expression,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   482
                              'X ecrit_part PE, U in_group G, '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   483
                              'PE require_permission P, P name "add_note", P require_group G')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   484
            self.assertEqual([et.name for et in eexpr.reverse_add_permission], ['Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   485
            self.assertEqual(eexpr.reverse_read_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   486
            self.assertEqual(eexpr.reverse_delete_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   487
            self.assertEqual(eexpr.reverse_update_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   488
            self.assertTrue(self._rrqlexpr_rset(cnx, 'add', 'para'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   489
            # no rqlexpr to delete para attribute
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   490
            self.assertFalse(self._rrqlexpr_rset(cnx, 'delete', 'para'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   491
            # new rql expr to add ecrit_par relation
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   492
            rexpr = self._rrqlexpr_entity(cnx, 'add', 'ecrit_par')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   493
            self.assertEqual(rexpr.expression,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   494
                              'O require_permission P, P name "add_note", '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   495
                              'U in_group G, P require_group G')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   496
            self.assertEqual([rdef.rtype.name for rdef in rexpr.reverse_add_permission], ['ecrit_par'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   497
            self.assertEqual(rexpr.reverse_read_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   498
            self.assertEqual(rexpr.reverse_delete_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   499
            # no more rqlexpr to delete and add travaille relation
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   500
            self.assertFalse(self._rrqlexpr_rset(cnx, 'add', 'travaille'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   501
            self.assertFalse(self._rrqlexpr_rset(cnx, 'delete', 'travaille'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   502
            # no more rqlexpr to delete and update Societe entity
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   503
            self.assertFalse(self._erqlexpr_rset(cnx, 'update', 'Societe'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   504
            self.assertFalse(self._erqlexpr_rset(cnx, 'delete', 'Societe'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   505
            # no more rqlexpr to read Affaire entity
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   506
            self.assertFalse(self._erqlexpr_rset(cnx, 'read', 'Affaire'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   507
            # rqlexpr to update Affaire entity has been updated
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   508
            eexpr = self._erqlexpr_entity(cnx, 'update', 'Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   509
            self.assertEqual(eexpr.expression, 'X concerne S, S owned_by U')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   510
            # no change for rqlexpr to add and delete Affaire entity
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   511
            self.assertEqual(len(self._erqlexpr_rset(cnx, 'delete', 'Affaire')), 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   512
            self.assertEqual(len(self._erqlexpr_rset(cnx, 'add', 'Affaire')), 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   513
            # no change for rqlexpr to add and delete concerne relation
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   514
            self.assertEqual(len(self._rrqlexpr_rset(cnx, 'delete', 'concerne')),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   515
                             len(delete_concerne_rqlexpr))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   516
            self.assertEqual(len(self._rrqlexpr_rset(cnx, 'add', 'concerne')),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   517
                             len(add_concerne_rqlexpr))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   518
            # * migrschema involve:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   519
            #   * 7 erqlexprs deletions (2 in (Affaire + Societe + Note.para) + 1 Note.something
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   520
            #   * 2 rrqlexprs deletions (travaille)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   521
            #   * 1 update (Affaire update)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   522
            #   * 2 new (Note add, ecrit_par add)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   523
            #   * 2 implicit new for attributes (Note.para, Person.test)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   524
            # remaining orphan rql expr which should be deleted at commit (composite relation)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   525
            # unattached expressions -> pending deletion on commit
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   526
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "ERQLExpression",'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   527
                                            'NOT ET1 read_permission X, NOT ET2 add_permission X, '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   528
                                            'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   529
                              7)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   530
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "RRQLExpression",'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   531
                                            'NOT ET1 read_permission X, NOT ET2 add_permission X, '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   532
                                            'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   533
                              2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   534
            # finally
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   535
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   536
                             nbrqlexpr_start + 1 + 2 + 2 + 2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   537
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   538
            # unique_together test
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   539
            self.assertEqual(len(self.schema.eschema('Personne')._unique_together), 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   540
            self.assertCountEqual(self.schema.eschema('Personne')._unique_together[0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   541
                                               ('nom', 'prenom', 'datenaiss'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   542
            rset = cnx.execute('Any C WHERE C is CWUniqueTogetherConstraint, C constraint_of ET, ET name "Personne"')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   543
            self.assertEqual(len(rset), 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   544
            relations = [r.name for r in rset.get_entity(0, 0).relations]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   545
            self.assertCountEqual(relations, ('nom', 'prenom', 'datenaiss'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   546
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   547
    def _erqlexpr_rset(self, cnx, action, ertype):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   548
        rql = 'RQLExpression X WHERE ET is CWEType, ET %s_permission X, ET name %%(name)s' % action
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   549
        return cnx.execute(rql, {'name': ertype})
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   550
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   551
    def _erqlexpr_entity(self, cnx, action, ertype):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   552
        rset = self._erqlexpr_rset(cnx, 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
   553
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   554
        return rset.get_entity(0, 0)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   555
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   556
    def _rrqlexpr_rset(self, cnx, action, ertype):
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4103
diff changeset
   557
        rql = 'RQLExpression X WHERE RT is CWRType, RDEF %s_permission X, RT name %%(name)s, RDEF relation_type RT' % action
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   558
        return cnx.execute(rql, {'name': ertype})
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   559
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   560
    def _rrqlexpr_entity(self, cnx, action, ertype):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   561
        rset = self._rrqlexpr_rset(cnx, 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
   562
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   563
        return rset.get_entity(0, 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   564
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   565
    def test_set_size_constraint(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   566
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   567
            # existing previous value
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   568
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   569
                mh.cmd_set_size_constraint('CWEType', 'name', 128)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   570
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   571
                mh.cmd_set_size_constraint('CWEType', 'name', 64)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   572
            # non existing previous value
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   573
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   574
                mh.cmd_set_size_constraint('CWEType', 'description', 256)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   575
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   576
                mh.cmd_set_size_constraint('CWEType', 'description', None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   577
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   578
    @tag('longrun')
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   579
    def test_add_drop_cube_and_deps(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   580
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   581
            schema = self.repo.schema
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   582
            self.assertEqual(sorted((str(s), str(o)) for s, o in schema['see_also'].rdefs.iterkeys()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   583
                             sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   584
                                     ('Bookmark', 'Bookmark'), ('Bookmark', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   585
                                     ('Note', 'Note'), ('Note', 'Bookmark')]))
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   586
            try:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   587
                mh.cmd_drop_cube('fakeemail', removedeps=True)
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   588
                # file was there because it's an email dependancy, should have been removed
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   589
                self.assertNotIn('fakeemail', self.config.cubes())
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   590
                self.assertNotIn(self.config.cube_dir('fakeemail'), self.config.cubes_path())
9675
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   591
                self.assertNotIn('file', self.config.cubes())
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   592
                self.assertNotIn(self.config.cube_dir('file'), 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
   593
                for ertype in ('Email', 'EmailThread', 'EmailPart', 'File',
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   594
                               'sender', 'in_thread', 'reply_to', 'data_format'):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   595
                    self.assertNotIn(ertype, schema)
8696
0bb18407c053 [toward py3k] rewrite dict.keys() and dict.values() (part of #2711624)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8694
diff changeset
   596
                self.assertEqual(sorted(schema['see_also'].rdefs.iterkeys()),
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   597
                                  sorted([('Folder', 'Folder'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   598
                                          ('Bookmark', 'Bookmark'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   599
                                          ('Bookmark', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   600
                                          ('Note', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   601
                                          ('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
   602
                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
   603
                self.assertEqual(sorted(schema['see_also'].objects()), ['Bookmark', 'Folder', 'Note'])
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   604
                self.assertEqual(cnx.execute('Any X WHERE X pkey "system.version.fakeemail"').rowcount, 0)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   605
                self.assertEqual(cnx.execute('Any X WHERE X pkey "system.version.file"').rowcount, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   606
            finally:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   607
                mh.cmd_add_cube('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   608
                self.assertIn('fakeemail', self.config.cubes())
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   609
                self.assertIn(self.config.cube_dir('fakeemail'), self.config.cubes_path())
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   610
                self.assertIn('file', self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   611
                self.assertIn(self.config.cube_dir('file'), self.config.cubes_path())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   612
                for ertype in ('Email', 'EmailThread', 'EmailPart', 'File',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   613
                               'sender', 'in_thread', 'reply_to', 'data_format'):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   614
                    self.assertIn(ertype, schema)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   615
                self.assertEqual(sorted(schema['see_also'].rdefs.iterkeys()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   616
                                  sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   617
                                          ('Bookmark', 'Bookmark'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   618
                                          ('Bookmark', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   619
                                          ('Note', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   620
                                          ('Note', 'Bookmark')]))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   621
                self.assertEqual(sorted(schema['see_also'].subjects()), ['Bookmark', 'EmailThread', 'Folder', 'Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   622
                self.assertEqual(sorted(schema['see_also'].objects()), ['Bookmark', 'EmailThread', 'Folder', 'Note'])
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   623
                from cubes.fakeemail.__pkginfo__ import version as email_version
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   624
                from cubes.file.__pkginfo__ import version as file_version
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   625
                self.assertEqual(cnx.execute('Any V WHERE X value V, X pkey "system.version.fakeemail"')[0][0],
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   626
                                  email_version)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   627
                self.assertEqual(cnx.execute('Any V WHERE X value V, X pkey "system.version.file"')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   628
                                  file_version)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   629
                # trick: overwrite self.maxeid to avoid deletion of just reintroduced
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   630
                #        types (and their associated tables!)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   631
                self.maxeid = cnx.execute('Any MAX(X)')[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   632
                # why this commit is necessary is unclear to me (though without it
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   633
                # next test may fail complaining of missing tables
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   634
                cnx.commit()
972
1efba3fd1364 set_state command in shell
sylvain.thenault@logilab.fr
parents: 934
diff changeset
   635
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
   636
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   637
    @tag('longrun')
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   638
    def test_add_drop_cube_no_deps(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   639
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   640
            cubes = set(self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   641
            schema = self.repo.schema
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
   642
            try:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   643
                mh.cmd_drop_cube('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   644
                cubes.remove('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   645
                self.assertNotIn('fakeemail', self.config.cubes())
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9663
diff changeset
   646
                self.assertIn('file', 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
   647
                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
   648
                               'sender', 'in_thread', 'reply_to'):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   649
                    self.assertNotIn(ertype, schema)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   650
            finally:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   651
                mh.cmd_add_cube('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   652
                self.assertIn('fakeemail', self.config.cubes())
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   653
                # trick: overwrite self.maxeid to avoid deletion of just reintroduced
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   654
                #        types (and their associated tables!)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   655
                self.maxeid = cnx.execute('Any MAX(X)')[0][0] # XXXXXXX KILL KENNY
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   656
                # why this commit is necessary is unclear to me (though without it
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   657
                # next test may fail complaining of missing tables
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   658
                cnx.commit()
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
   659
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   660
    def test_drop_dep_cube(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   661
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   662
            with self.assertRaises(ConfigurationError) as cm:
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   663
                mh.cmd_drop_cube('file')
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   664
            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
   665
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   666
    @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
   667
    def test_introduce_base_class(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   668
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   669
            mh.cmd_add_entity_type('Para')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   670
            self.assertEqual(sorted(et.type for et in self.schema['Para'].specialized_by()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   671
                             ['Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   672
            self.assertEqual(self.schema['Note'].specializes().type, 'Para')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   673
            mh.cmd_add_entity_type('Text')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   674
            self.assertEqual(sorted(et.type for et in self.schema['Para'].specialized_by()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   675
                              ['Note', 'Text'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   676
            self.assertEqual(self.schema['Text'].specializes().type, 'Para')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   677
            # test columns have been actually added
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   678
            text = cnx.execute('INSERT Text X: X para "hip", X summary "hop", X newattr "momo"').get_entity(0, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   679
            note = cnx.execute('INSERT Note X: X para "hip", X shortpara "hop", X newattr "momo", X unique_id "x"').get_entity(0, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   680
            aff = cnx.execute('INSERT Affaire X').get_entity(0, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   681
            self.assertTrue(cnx.execute('SET X newnotinlined Y WHERE X eid %(x)s, Y eid %(y)s',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   682
                                         {'x': text.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   683
            self.assertTrue(cnx.execute('SET X newnotinlined Y WHERE X eid %(x)s, Y eid %(y)s',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   684
                                         {'x': note.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   685
            self.assertTrue(cnx.execute('SET X newinlined Y WHERE X eid %(x)s, Y eid %(y)s',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   686
                                         {'x': text.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   687
            self.assertTrue(cnx.execute('SET X newinlined Y WHERE X eid %(x)s, Y eid %(y)s',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   688
                                         {'x': note.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   689
            # XXX remove specializes by ourselves, else tearDown fails when removing
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   690
            # Para because of Note inheritance. This could be fixed by putting the
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   691
            # MemSchemaCWETypeDel(session, name) operation in the
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   692
            # after_delete_entity(CWEType) hook, since in that case the MemSchemaSpecializesDel
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   693
            # operation would be removed before, but I'm not sure this is a desired behaviour.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   694
            #
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   695
            # also we need more tests about introducing/removing base classes or
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   696
            # specialization relationship...
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   697
            cnx.execute('DELETE X specializes Y WHERE Y name "Para"')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   698
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   699
            self.assertEqual(sorted(et.type for et in self.schema['Para'].specialized_by()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   700
                             [])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   701
            self.assertEqual(self.schema['Note'].specializes(), None)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   702
            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
   703
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   704
    def test_add_symmetric_relation_type(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   705
        with self.mh() as (cnx, mh):
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   706
            self.assertFalse(self.table_sql(mh, 'same_as_relation'))
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   707
            mh.cmd_add_relation_type('same_as')
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   708
            self.assertTrue(self.table_sql(mh, 'same_as_relation'))
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   709
10645
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   710
    def test_change_attribute_type(self):
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   711
        with self.mh() as (cnx, mh):
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   712
            mh.cmd_create_entity('Societe', tel=1)
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   713
            mh.commit()
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   714
            mh.change_attribute_type('Societe', 'tel', 'Float')
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   715
            self.assertNotIn(('Societe', 'Int'), self.schema['tel'].rdefs)
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   716
            self.assertIn(('Societe', 'Float'), self.schema['tel'].rdefs)
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   717
            self.assertEqual(self.schema['tel'].rdefs[('Societe', 'Float')].object, 'Float')
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   718
            tel = mh.rqlexec('Any T WHERE X tel T')[0][0]
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   719
            self.assertEqual(tel, 1.0)
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   720
            self.assertIsInstance(tel, float)
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   721
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   722
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   723
class MigrationCommandsComputedTC(MigrationTC):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   724
    """ Unit tests for computed relations and attributes
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   725
    """
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   726
    appid = 'datacomputed'
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   727
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   728
    def setUp(self):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   729
        MigrationTC.setUp(self)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   730
        # ensure vregistry is reloaded, needed by generated hooks for computed
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   731
        # attributes
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   732
        self.repo.vreg.set_schema(self.repo.schema)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   733
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   734
    def test_computed_relation_add_relation_definition(self):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   735
        self.assertNotIn('works_for', self.schema)
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   736
        with self.mh() as (cnx, mh):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   737
            with self.assertRaises(ExecutionError) as exc:
10633
d800ecd381f6 [server/test] bit of PEP8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10632
diff changeset
   738
                mh.cmd_add_relation_definition('Employee', 'works_for', 'Company')
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   739
        self.assertEqual(str(exc.exception),
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   740
                         'Cannot add a relation definition for a computed '
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   741
                         'relation (works_for)')
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   742
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   743
    def test_computed_relation_drop_relation_definition(self):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   744
        self.assertIn('notes', self.schema)
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   745
        with self.mh() as (cnx, mh):
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   746
            with self.assertRaises(ExecutionError) as exc:
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   747
                mh.cmd_drop_relation_definition('Company', 'notes', 'Note')
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   748
        self.assertEqual(str(exc.exception),
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   749
                         'Cannot drop a relation definition for a computed '
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   750
                         'relation (notes)')
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
   751
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   752
    def test_computed_relation_add_relation_type(self):
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   753
        self.assertNotIn('works_for', self.schema)
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   754
        with self.mh() as (cnx, mh):
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   755
            mh.cmd_add_relation_type('works_for')
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   756
            self.assertIn('works_for', self.schema)
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   757
            self.assertEqual(self.schema['works_for'].rule,
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   758
                             'O employees S, NOT EXISTS (O associates S)')
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   759
            self.assertEqual(self.schema['works_for'].objects(), ('Company',))
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   760
            self.assertEqual(self.schema['works_for'].subjects(), ('Employee',))
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   761
            self.assertFalse(self.table_sql(mh, 'works_for_relation'))
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   762
            e = cnx.create_entity('Employee')
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   763
            a = cnx.create_entity('Employee')
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   764
            cnx.create_entity('Company', employees=e, associates=a)
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   765
            cnx.commit()
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   766
            company = cnx.execute('Company X').get_entity(0, 0)
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   767
            self.assertEqual([e.eid],
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   768
                             [x.eid for x in company.reverse_works_for])
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   769
            mh.rollback()
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   770
9962
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   771
    def test_computed_relation_drop_relation_type(self):
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   772
        self.assertIn('notes', self.schema)
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   773
        with self.mh() as (cnx, mh):
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   774
            mh.cmd_drop_relation_type('notes')
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   775
        self.assertNotIn('notes', self.schema)
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   776
9964
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   777
    def test_computed_relation_sync_schema_props_perms(self):
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   778
        self.assertIn('whatever', self.schema)
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   779
        with self.mh() as (cnx, mh):
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   780
            mh.cmd_sync_schema_props_perms('whatever')
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   781
            self.assertEqual(self.schema['whatever'].rule,
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   782
                             'S employees E, O associates E')
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   783
            self.assertEqual(self.schema['whatever'].objects(), ('Company',))
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   784
            self.assertEqual(self.schema['whatever'].subjects(), ('Company',))
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   785
            self.assertFalse(self.table_sql(mh, 'whatever_relation'))
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   786
10799
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   787
    def test_computed_relation_sync_schema_props_perms_security(self):
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   788
        with self.mh() as (cnx, mh):
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   789
            rdef = next(self.schema['perm_changes'].rdefs.itervalues())
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   790
            self.assertEqual(rdef.permissions,
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   791
                             {'add': (), 'delete': (),
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   792
                              'read': ('managers', 'users')})
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   793
            mh.cmd_sync_schema_props_perms('perm_changes')
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   794
            self.assertEqual(self.schema['perm_changes'].permissions,
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   795
                             {'read': ('managers',)})
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   796
            rdef = next(self.schema['perm_changes'].rdefs.itervalues())
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   797
            self.assertEqual(rdef.permissions,
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   798
                             {'add': (), 'delete': (),
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   799
                              'read': ('managers',)})
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   800
9964
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   801
    def test_computed_relation_sync_schema_props_perms_on_rdef(self):
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   802
        self.assertIn('whatever', self.schema)
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   803
        with self.mh() as (cnx, mh):
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   804
            with self.assertRaises(ExecutionError) as exc:
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   805
                mh.cmd_sync_schema_props_perms(
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   806
                    ('Company', 'whatever', 'Person'))
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   807
        self.assertEqual(str(exc.exception),
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   808
                         'Cannot synchronize a relation definition for a computed '
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   809
                         'relation (whatever)')
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   810
10632
d89e9176d263 [migration] don't attempt to carry over values when renaming a computed relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10129
diff changeset
   811
    def test_computed_relation_rename_relation_type(self):
d89e9176d263 [migration] don't attempt to carry over values when renaming a computed relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10129
diff changeset
   812
        with self.mh() as (cnx, mh):
d89e9176d263 [migration] don't attempt to carry over values when renaming a computed relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10129
diff changeset
   813
            mh.cmd_rename_relation_type('to_be_renamed', 'renamed')
d89e9176d263 [migration] don't attempt to carry over values when renaming a computed relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10129
diff changeset
   814
        self.assertIn('renamed', self.schema)
d89e9176d263 [migration] don't attempt to carry over values when renaming a computed relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10129
diff changeset
   815
        self.assertNotIn('to_be_renamed', self.schema)
d89e9176d263 [migration] don't attempt to carry over values when renaming a computed relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10129
diff changeset
   816
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   817
    # computed attributes migration ############################################
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   818
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   819
    def setup_add_score(self):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   820
        with self.admin_access.client_cnx() as cnx:
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   821
            assert not cnx.execute('Company X')
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   822
            c = cnx.create_entity('Company')
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   823
            e1 = cnx.create_entity('Employee', reverse_employees=c)
10633
d800ecd381f6 [server/test] bit of PEP8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10632
diff changeset
   824
            cnx.create_entity('Note', note=2, concerns=e1)
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   825
            e2 = cnx.create_entity('Employee', reverse_employees=c)
10633
d800ecd381f6 [server/test] bit of PEP8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10632
diff changeset
   826
            cnx.create_entity('Note', note=4, concerns=e2)
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   827
            cnx.commit()
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   828
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   829
    def assert_score_initialized(self, mh):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   830
        self.assertEqual(self.schema['score'].rdefs['Company', 'Float'].formula,
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   831
                         'Any AVG(NN) WHERE X employees E, N concerns E, N note NN')
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   832
        fields = self.table_schema(mh, '%sCompany' % SQL_PREFIX)
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   833
        self.assertEqual(fields['%sscore' % SQL_PREFIX], ('double precision', None))
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   834
        self.assertEqual([[3.0]],
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   835
                         mh.rqlexec('Any CS WHERE C score CS, C is Company').rows)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   836
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   837
    def test_computed_attribute_add_relation_type(self):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   838
        self.assertNotIn('score', self.schema)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   839
        self.setup_add_score()
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   840
        with self.mh() as (cnx, mh):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   841
            mh.cmd_add_relation_type('score')
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   842
            self.assertIn('score', self.schema)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   843
            self.assertEqual(self.schema['score'].objects(), ('Float',))
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   844
            self.assertEqual(self.schema['score'].subjects(), ('Company',))
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   845
            self.assert_score_initialized(mh)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   846
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   847
    def test_computed_attribute_add_attribute(self):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   848
        self.assertNotIn('score', self.schema)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   849
        self.setup_add_score()
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   850
        with self.mh() as (cnx, mh):
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   851
            mh.cmd_add_attribute('Company', 'score')
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   852
            self.assertIn('score', self.schema)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   853
            self.assert_score_initialized(mh)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   854
9970
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   855
    def assert_computed_attribute_dropped(self):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   856
        self.assertNotIn('note20', self.schema)
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   857
        with self.mh() as (cnx, mh):
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   858
            fields = self.table_schema(mh, '%sNote' % SQL_PREFIX)
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   859
        self.assertNotIn('%snote20' % SQL_PREFIX, fields)
9970
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   860
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   861
    def test_computed_attribute_drop_type(self):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   862
        self.assertIn('note20', self.schema)
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   863
        with self.mh() as (cnx, mh):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   864
            mh.cmd_drop_relation_type('note20')
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   865
        self.assert_computed_attribute_dropped()
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   866
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   867
    def test_computed_attribute_drop_relation_definition(self):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   868
        self.assertIn('note20', self.schema)
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   869
        with self.mh() as (cnx, mh):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   870
            mh.cmd_drop_relation_definition('Note', 'note20', 'Int')
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   871
        self.assert_computed_attribute_dropped()
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   872
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   873
    def test_computed_attribute_drop_attribute(self):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   874
        self.assertIn('note20', self.schema)
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   875
        with self.mh() as (cnx, mh):
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   876
            mh.cmd_drop_attribute('Note', 'note20')
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   877
        self.assert_computed_attribute_dropped()
671bbfed459b [CWEP002 migration] support drop_relation_type/drop_relation_definition/drop_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9969
diff changeset
   878
9971
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   879
    def test_computed_attribute_sync_schema_props_perms_rtype(self):
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   880
        self.assertIn('note100', self.schema)
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   881
        with self.mh() as (cnx, mh):
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   882
            mh.cmd_sync_schema_props_perms('note100')
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   883
        self.assertEqual(self.schema['note100'].rdefs['Note', 'Int'].formula,
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   884
                         'Any N*100 WHERE X note N')
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   885
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   886
    def test_computed_attribute_sync_schema_props_perms_rdef(self):
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   887
        self.setup_add_score()
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   888
        with self.mh() as (cnx, mh):
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   889
            mh.cmd_sync_schema_props_perms(('Note', 'note100', 'Int'))
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   890
            self.assertEqual([[200], [400]],
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   891
                             cnx.execute('Any N ORDERBY N WHERE X note100 N').rows)
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   892
            self.assertEqual([[300]],
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   893
                             cnx.execute('Any CS WHERE C score100 CS, C is Company').rows)
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   894
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   895
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   896
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   897
    unittest_main()