server/test/unittest_migractions.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Fri, 18 Dec 2015 09:07:33 +0100
changeset 11030 c1fdd22232d1
parent 11007 f9386e3bf3e8
child 11039 6424a2e112f5
permissions -rw-r--r--
[server] always monkeypatch QuerierHelper to handle dates and times on SQLite The patch prevents problems due to a SQLite bug causing some values to be returned as strings instead of properly typed objects. This should probably be improved to use SQLite connection hooks. But the major improvement is that the monkeypatch is now done all the time, and not just for tests.
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
10917
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
    25
from logilab.common import tempattr
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    27
from yams.constraints import UniqueConstraint
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    28
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
    29
from cubicweb import ConfigurationError, ValidationError, ExecutionError
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    30
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
    31
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
    32
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
    33
from cubicweb.server.migractions import ServerMigrationHelper
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    35
import cubicweb.devtools
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    36
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
    37
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
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
    39
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    40
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    41
def setUpModule():
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    42
    startpgcluster(__file__)
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    43
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    44
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
    45
migrschema = None
6781
5062d86d6ffe [unittest2] use unittest2 module fixture api
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6635
diff changeset
    46
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
    47
    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
    48
    del migrschema
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    49
    if hasattr(MigrationCommandsTC, 'origschema'):
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    50
        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
    51
    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
    52
        del MigrationCommandsComputedTC.origschema
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    53
    stoppgcluster(__file__)
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
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    56
class MigrationConfig(cubicweb.devtools.TestServerConfiguration):
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    57
    default_sources = cubicweb.devtools.DEFAULT_PSQL_SOURCES
10801
b4beaf0bccea [test] do not overwrite user's CW_CUBES_PATH in unittest_migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10800
diff changeset
    58
    CUBES_PATH = cubicweb.devtools.TestServerConfiguration.CUBES_PATH + [
b4beaf0bccea [test] do not overwrite user's CW_CUBES_PATH in unittest_migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10800
diff changeset
    59
        osp.join(HERE, 'data-migractions', 'cubes')]
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    60
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    61
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
    62
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
    63
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    64
    appid = 'data-migractions'
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    65
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    66
    configcls = MigrationConfig
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    67
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    68
    tags = CubicWebTC.tags | Tags(('server', 'migration', 'migractions'))
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    69
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
    70
    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
    71
        super(MigrationTC, self)._init_repo()
4681
5f72584ab1d7 [test] cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4635
diff changeset
    72
        # 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
    73
        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
    74
        # 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
    75
        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
    76
        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
    77
        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
    78
        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
    79
        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
    80
        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
    81
        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
    82
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    83
    def setUp(self):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    84
        self.configcls.cls_adjust_sys_path()
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    85
        super(MigrationTC, self).setUp()
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    86
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    87
    def tearDown(self):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
    88
        super(MigrationTC, self).tearDown()
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    89
        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
    90
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    91
    @contextmanager
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    92
    def mh(self):
10353
d9a1e7939ee6 [migractions] remove any session related leftovers
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10257
diff changeset
    93
        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
    94
            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
    95
                                             repo=self.repo, cnx=cnx,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    96
                                             interactive=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    97
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    98
    def table_sql(self, mh, tablename):
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
    99
        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
   100
                            {'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
   101
        if result:
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   102
            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
   103
        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
   104
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   105
    def table_schema(self, mh, tablename):
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   106
        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
   107
                            "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
   108
        assert result, 'no table %s' % tablename
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   109
        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
   110
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
   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
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
   113
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
    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
   115
        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
   116
        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
   117
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
   118
    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
   119
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   120
            self.assertNotIn('yesno', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   121
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   122
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   123
            mh.cmd_add_attribute('Note', 'yesno')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   124
            self.assertIn('yesno', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   125
            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
   126
            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
   127
            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
   128
            # 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
   129
            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
   130
            self.assertEqual(note.yesno, False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   131
            # 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
   132
            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
   133
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   134
    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
   135
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   136
            self.assertNotIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   137
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   138
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   139
            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
   140
                                        '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
   141
            mh.cmd_add_attribute('Note', 'whatever')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   142
            self.assertIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   143
            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
   144
            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
   145
            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
   146
            # 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
   147
            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
   148
            self.assertIsInstance(note.whatever, int)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   149
            self.assertEqual(note.whatever, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   150
            # 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
   151
            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
   152
            # test attribute order
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   153
            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
   154
                                         '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
   155
            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
   156
            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
   157
                if v >= whateverorder:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   158
                    orderdict[k] = v+1
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   159
            orderdict['whatever'] = whateverorder
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   160
            self.assertDictEqual(orderdict, orderdict2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   161
            #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
   162
            #                  ['modification_date', 'creation_date', 'owned_by',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   163
            #                   'eid', 'ecrit_par', 'inline1', 'date', 'type',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   164
            #                   'whatever', 'date', 'in_basket'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   165
            # 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
   166
            #     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
   167
            #     two different entities)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   169
    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
   170
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   171
            self.assertNotIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   172
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   173
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   174
            self.assertNotIn('shortpara', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   175
            mh.cmd_add_attribute('Note', 'shortpara')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   176
            self.assertIn('shortpara', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   177
            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
   178
            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
   179
            # 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
   180
            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
   181
            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
   182
            # 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
   183
            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
   184
            # 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
   185
            self.assertEqual(cnx.create_entity('Note').shortpara, 'hop')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   186
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
    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
   188
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   189
            self.assertNotIn('mydate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   190
            self.assertNotIn('oldstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   191
            self.assertNotIn('newstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   192
            mh.cmd_add_attribute('Note', 'mydate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   193
            mh.cmd_add_attribute('Note', 'oldstyledefaultdate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   194
            mh.cmd_add_attribute('Note', 'newstyledefaultdate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   195
            self.assertIn('mydate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   196
            self.assertIn('oldstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   197
            self.assertIn('newstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   198
            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
   199
            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
   200
            testdate = date(2005, 12, 13)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   201
            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
   202
            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
   203
            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
   204
            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
   205
            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
   206
            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
   207
            self.assertEqual(d1, date.today())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   208
            self.assertEqual(d2, testdate)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   209
            myfavoritedate = date(2013, 1, 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   210
            self.assertEqual(d3, myfavoritedate)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   211
            self.assertEqual(d4, myfavoritedate)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   212
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   213
    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
   214
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   215
            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
   216
                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
   217
                # 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
   218
                self.assertRaises(ValidationError,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   219
                                  mh.rqlexec,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   220
                                  '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
   221
                mh.rollback()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   222
                # 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
   223
                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
   224
                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
   225
                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
   226
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   227
    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
   228
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   229
            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
   230
                                            droprequired=True):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   231
                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
   232
                mh.rqlexec('INSERT Note N')
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   233
                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
   234
            # 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
   235
            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
   236
            mh.rollback()
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   237
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   238
    def test_rename_attribute(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   239
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   240
            self.assertNotIn('civility', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   241
            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
   242
            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
   243
            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
   244
            self.assertNotIn('sexe', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   245
            self.assertIn('civility', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   246
            # test data has been backported
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   247
            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
   248
            self.assertEqual(c1, 'M')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   249
            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
   250
            self.assertEqual(c2, None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   251
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   252
    def test_workflow_actions(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   253
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   254
            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
   255
                                     ensure_workflowable=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   256
            for etype in ('Personne', 'Email'):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   257
                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
   258
                                etype)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   259
                self.assertEqual(s1, "foo")
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   260
                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
   261
                                etype)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   262
                self.assertEqual(s1, "foo")
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   263
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   264
    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
   265
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   266
            self.assertNotIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   267
            self.assertNotIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   268
            mh.cmd_add_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   269
            self.assertIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   270
            self.assertIn('Old', 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('CWEType X WHERE X name "Folder2"'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   272
            self.assertIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   273
            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
   274
            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
   275
                              ['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
   276
                               'description', 'description_format',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   277
                               'eid',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   278
                               'filed_under2', 'has_text',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   279
                               '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
   280
                               '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
   281
            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
   282
                                  ['filed_under2', 'identity'])
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   283
            # 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
   284
            # 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
   285
            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
   286
                             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
   287
            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
   288
            eschema = self.schema.eschema('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   289
            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
   290
                self.assertTrue(hasattr(cstr, 'eid'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   291
10999
adc46197b8c9 [migration] test addition of a cube providing a custom final type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10951
diff changeset
   292
    def test_add_cube_with_custom_final_type(self):
adc46197b8c9 [migration] test addition of a cube providing a custom final type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10951
diff changeset
   293
        with self.mh() as (cnx, mh):
11007
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   294
            try:
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   295
                mh.cmd_add_cube('fakecustomtype')
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   296
                self.assertIn('Numeric', self.schema)
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   297
                self.assertTrue(self.schema['Numeric'].final)
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   298
                rdef = self.schema['num'].rdefs[('Location', 'Numeric')]
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   299
                self.assertEqual(rdef.scale, 10)
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   300
                self.assertEqual(rdef.precision, 18)
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   301
                fields = self.table_schema(mh, '%sLocation' % SQL_PREFIX)
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   302
                self.assertEqual(fields['%snum' % SQL_PREFIX], ('numeric', None)) # XXX
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   303
            finally:
f9386e3bf3e8 [migration/test] avoid test interdependency by removing fakecustomtype cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11006
diff changeset
   304
                mh.cmd_drop_cube('fakecustomtype')
10999
adc46197b8c9 [migration] test addition of a cube providing a custom final type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10951
diff changeset
   305
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   306
    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
   307
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   308
            mh.cmd_add_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   309
            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
   310
                                     ensure_workflowable=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   311
            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
   312
            done = wf.add_state(u'done')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   313
            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
   314
            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
   315
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   316
            eschema = self.schema.eschema('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   317
            mh.cmd_drop_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   318
            self.assertNotIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   319
            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
   320
            # test automatic workflow deletion
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   321
            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
   322
            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
   323
            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
   324
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
   325
    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
   326
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   327
            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
   328
            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
   329
            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
   330
            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
   331
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   332
    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
   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_entity_type('Folder2', auto=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   335
            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
   336
            self.assertIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   337
            # 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
   338
            # 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
   339
            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
   340
                             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
   341
                                    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
   342
            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
   343
            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
   344
            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
   345
            # 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
   346
            mh.cmd_drop_relation_type('filed_under2')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   347
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   348
    def test_add_relation_definition_nortype(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   349
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   350
            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
   351
            self.assertEqual(self.schema['concerne2'].subjects(),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   352
                             ('Personne',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   353
            self.assertEqual(self.schema['concerne2'].objects(),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   354
                             ('Affaire', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   355
            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
   356
                              '1*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   357
            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
   358
            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
   359
            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
   360
            mh.create_entity('Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   361
            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
   362
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   363
            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
   364
            self.assertIn('concerne2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   365
            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
   366
            self.assertNotIn('concerne2', self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   367
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   368
    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
   369
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   370
            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
   371
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   372
            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
   373
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   374
            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
   375
            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
   376
                              ['Affaire'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   377
            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
   378
                              ['Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   379
            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
   380
            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
   381
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   382
            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
   383
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   384
            # 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
   385
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   386
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   387
    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
   388
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   389
            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
   390
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   391
            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
   392
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   393
            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
   394
            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
   395
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   396
            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
   397
                              ['Affaire', 'Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   398
            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
   399
            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
   400
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   401
            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
   402
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   403
            # 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
   404
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   405
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   406
    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
   407
        self.skipTest('implement me')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   408
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   409
    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
   410
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   411
            rschema = self.schema['concerne']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   412
            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
   413
            self.assertEqual(card, '**')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   414
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   415
                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
   416
                                             cardinality='?*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   417
                card = rschema.rdef('Affaire', 'Societe').cardinality
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   418
                self.assertEqual(card, '?*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   419
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   420
                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
   421
                                             cardinality='**')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   422
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   423
    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
   424
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   425
            rschema = self.schema['adel']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   426
            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
   427
            self.assertEqual(card, False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   428
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   429
                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
   430
                                             fulltextindexed=True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   431
                card = rschema.rdef('Personne', 'String').fulltextindexed
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   432
                self.assertEqual(card, True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   433
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   434
                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
   435
                                             fulltextindexed=False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   436
9565
fa00fc251d57 [migractions] Better handle removal of RQLConstraint in sync_schema
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9273
diff changeset
   437
    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
   438
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   439
            # Drop one of the RQLConstraint.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   440
            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
   441
            oldconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   442
            self.assertIn('S created_by U',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   443
                          [cstr.expression for cstr in oldconstraints])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   444
            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
   445
            newconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   446
            self.assertNotIn('S created_by U',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   447
                             [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
   448
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   449
            # Drop all RQLConstraint.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   450
            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
   451
            oldconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   452
            self.assertEqual(len(oldconstraints), 2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   453
            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
   454
            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
   455
            newconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   456
            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
   457
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   458
    @tag('longrun')
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   459
    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
   460
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   461
            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
   462
            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
   463
            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
   464
            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
   465
            migrschema['Personne'].description = 'blabla bla'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   466
            migrschema['titre'].description = 'usually a title'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   467
            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
   468
            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
   469
            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
   470
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
   471
            # 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
   472
            # 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
   473
            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
   474
            mh.cmd_sync_schema_props_perms(commit=False)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   475
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   476
            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
   477
                             'blabla bla')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   478
            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
   479
                             'usually a title')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   480
            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
   481
                                         'X from_entity FE, FE name "Personne",'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   482
                                         'X description D')[0][0],
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   483
                             'title for this person')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   484
            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
   485
                '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
   486
                '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
   487
                'X ordernum O')]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   488
            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
   489
                        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
   490
                        u'description', u'firstname',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   491
                        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
   492
            self.assertEqual(expected, rinorder)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   493
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   494
            # test permissions synchronization ####################################
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   495
            # 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
   496
            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
   497
            self.assertEqual(eexpr.expression,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   498
                              '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
   499
                              '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
   500
            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
   501
            self.assertEqual(eexpr.reverse_read_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   502
            self.assertEqual(eexpr.reverse_delete_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   503
            self.assertEqual(eexpr.reverse_update_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   504
            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
   505
            # no rqlexpr to delete para attribute
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   506
            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
   507
            # 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
   508
            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
   509
            self.assertEqual(rexpr.expression,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   510
                              '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
   511
                              '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
   512
            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
   513
            self.assertEqual(rexpr.reverse_read_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   514
            self.assertEqual(rexpr.reverse_delete_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   515
            # 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
   516
            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
   517
            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
   518
            # 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
   519
            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
   520
            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
   521
            # 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
   522
            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
   523
            # 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
   524
            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
   525
            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
   526
            # 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
   527
            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
   528
            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
   529
            # 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
   530
            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
   531
                             len(delete_concerne_rqlexpr))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   532
            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
   533
                             len(add_concerne_rqlexpr))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   534
            # * migrschema involve:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   535
            #   * 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
   536
            #   * 2 rrqlexprs deletions (travaille)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   537
            #   * 1 update (Affaire update)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   538
            #   * 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
   539
            #   * 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
   540
            # 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
   541
            # unattached expressions -> pending deletion on commit
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   542
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "ERQLExpression",'
10951
ef1cfc80d51c action, view and service so managers can start source synchronization from the web ui
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10921
diff changeset
   543
                                         'NOT ET1 read_permission X, NOT ET2 add_permission X, '
ef1cfc80d51c action, view and service so managers can start source synchronization from the web ui
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10921
diff changeset
   544
                                         'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   545
                              7)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   546
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "RRQLExpression",'
10951
ef1cfc80d51c action, view and service so managers can start source synchronization from the web ui
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10921
diff changeset
   547
                                         'NOT ET1 read_permission X, NOT ET2 add_permission X, '
ef1cfc80d51c action, view and service so managers can start source synchronization from the web ui
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10921
diff changeset
   548
                                         'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   549
                              2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   550
            # finally
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   551
            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
   552
                             nbrqlexpr_start + 1 + 2 + 2 + 2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   553
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   554
            # unique_together test
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   555
            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
   556
            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
   557
                                               ('nom', 'prenom', 'datenaiss'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   558
            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
   559
            self.assertEqual(len(rset), 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   560
            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
   561
            self.assertCountEqual(relations, ('nom', 'prenom', 'datenaiss'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   562
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   563
    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
   564
        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
   565
        return cnx.execute(rql, {'name': ertype})
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   566
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   567
    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
   568
        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
   569
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   570
        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
   571
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   572
    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
   573
        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
   574
        return cnx.execute(rql, {'name': ertype})
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   575
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   576
    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
   577
        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
   578
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   579
        return rset.get_entity(0, 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   580
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   581
    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
   582
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   583
            # existing previous value
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   584
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   585
                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
   586
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   587
                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
   588
            # non existing previous value
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   589
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   590
                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
   591
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   592
                mh.cmd_set_size_constraint('CWEType', 'description', None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   593
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   594
    @tag('longrun')
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   595
    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
   596
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   597
            schema = self.repo.schema
10814
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   598
            self.assertEqual(sorted((str(s), str(o)) for s, o in schema['see_also'].rdefs),
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   599
                             sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   600
                                     ('Bookmark', 'Bookmark'), ('Bookmark', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   601
                                     ('Note', 'Note'), ('Note', 'Bookmark')]))
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   602
            try:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   603
                mh.cmd_drop_cube('fakeemail', removedeps=True)
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   604
                # 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
   605
                self.assertNotIn('fakeemail', self.config.cubes())
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   606
                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
   607
                self.assertNotIn('file', self.config.cubes())
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   608
                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
   609
                for ertype in ('Email', 'EmailThread', 'EmailPart', 'File',
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   610
                               '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
   611
                    self.assertNotIn(ertype, schema)
10814
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   612
                self.assertEqual(sorted(schema['see_also'].rdefs),
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   613
                                  sorted([('Folder', 'Folder'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   614
                                          ('Bookmark', 'Bookmark'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   615
                                          ('Bookmark', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   616
                                          ('Note', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   617
                                          ('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
   618
                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
   619
                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
   620
                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
   621
                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
   622
            finally:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   623
                mh.cmd_add_cube('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   624
                self.assertIn('fakeemail', self.config.cubes())
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   625
                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
   626
                self.assertIn('file', self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   627
                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
   628
                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
   629
                               '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
   630
                    self.assertIn(ertype, schema)
10814
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   631
                self.assertEqual(sorted(schema['see_also'].rdefs),
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   632
                                 sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   633
                                         ('Bookmark', 'Bookmark'),
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   634
                                         ('Bookmark', 'Note'),
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   635
                                         ('Note', 'Note'),
a13db4185129 [server/test] dict.iterkeys
Julien Cristau <julien.cristau@logilab.fr>
parents: 10801
diff changeset
   636
                                         ('Note', 'Bookmark')]))
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   637
                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
   638
                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
   639
                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
   640
                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
   641
                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
   642
                                  email_version)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   643
                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
   644
                                  file_version)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   645
                # 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
   646
                #        types (and their associated tables!)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   647
                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
   648
                # 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
   649
                # 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
   650
                cnx.commit()
972
1efba3fd1364 set_state command in shell
sylvain.thenault@logilab.fr
parents: 934
diff changeset
   651
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
   652
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   653
    @tag('longrun')
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   654
    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
   655
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   656
            cubes = set(self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   657
            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
   658
            try:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   659
                mh.cmd_drop_cube('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   660
                cubes.remove('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   661
                self.assertNotIn('fakeemail', self.config.cubes())
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9663
diff changeset
   662
                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
   663
                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
   664
                               'sender', 'in_thread', 'reply_to'):
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   665
                    self.assertNotIn(ertype, schema)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   666
            finally:
10487
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   667
                mh.cmd_add_cube('fakeemail')
49a5c38de1de [server/test] stop using email cube
Julien Cristau <julien.cristau@logilab.fr>
parents: 10441
diff changeset
   668
                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
   669
                # 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
   670
                #        types (and their associated tables!)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   671
                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
   672
                # 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
   673
                # 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
   674
                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
   675
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   676
    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
   677
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   678
            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
   679
                mh.cmd_drop_cube('file')
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   680
            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
   681
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   682
    @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
   683
    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
   684
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   685
            mh.cmd_add_entity_type('Para')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   686
            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
   687
                             ['Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   688
            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
   689
            mh.cmd_add_entity_type('Text')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   690
            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
   691
                              ['Note', 'Text'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   692
            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
   693
            # test columns have been actually added
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   694
            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
   695
            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
   696
            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
   697
            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
   698
                                         {'x': text.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   699
            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
   700
                                         {'x': note.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   701
            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
   702
                                         {'x': text.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   703
            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
   704
                                         {'x': note.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   705
            # 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
   706
            # 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
   707
            # MemSchemaCWETypeDel(session, name) operation in the
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   708
            # 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
   709
            # 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
   710
            #
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   711
            # 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
   712
            # specialization relationship...
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   713
            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
   714
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   715
            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
   716
                             [])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   717
            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
   718
            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
   719
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   720
    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
   721
        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
   722
            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
   723
            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
   724
            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
   725
10645
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   726
    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
   727
        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
   728
            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
   729
            mh.commit()
57c60a96de70 [migration] fix change_attribute_type to update the live schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10487
diff changeset
   730
            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
   731
            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
   732
            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
   733
            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
   734
            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
   735
            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
   736
            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
   737
10917
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   738
    def test_drop_required_inlined_relation(self):
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   739
        with self.mh() as (cnx, mh):
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   740
            bob = mh.cmd_create_entity('Personne', nom=u'bob')
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   741
            note = mh.cmd_create_entity('Note', ecrit_par=bob)
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   742
            mh.commit()
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   743
            rdef = mh.fs_schema.rschema('ecrit_par').rdefs[('Note', 'Personne')]
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   744
            with tempattr(rdef, 'cardinality', '1*'):
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   745
                mh.sync_schema_props_perms('ecrit_par', syncperms=False)
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   746
            mh.cmd_drop_relation_type('ecrit_par')
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   747
            self.assertNotIn('%secrit_par' % SQL_PREFIX,
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   748
                             self.table_schema(mh, '%sPersonne' % SQL_PREFIX))
edea9c324396 [hooks/syncschema] don't set NOT NULL on inlined relation columns
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10814
diff changeset
   749
10921
977def81780a [migration] don't handle data deletion anymore on schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10917
diff changeset
   750
    def test_drop_inlined_rdef_delete_data(self):
977def81780a [migration] don't handle data deletion anymore on schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10917
diff changeset
   751
        with self.mh() as (cnx, mh):
977def81780a [migration] don't handle data deletion anymore on schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10917
diff changeset
   752
            note = mh.cmd_create_entity('Note', ecrit_par=cnx.user.eid)
977def81780a [migration] don't handle data deletion anymore on schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10917
diff changeset
   753
            mh.commit()
977def81780a [migration] don't handle data deletion anymore on schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10917
diff changeset
   754
            mh.drop_relation_definition('Note', 'ecrit_par', 'CWUser')
977def81780a [migration] don't handle data deletion anymore on schema changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10917
diff changeset
   755
            self.assertFalse(mh.sqlexec('SELECT * FROM cw_Note WHERE cw_ecrit_par IS NOT NULL'))
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
   756
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
   757
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
   758
    """ 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
   759
    """
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
   760
    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
   761
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   762
    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
   763
        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
   764
        # 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
   765
        # attributes
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   766
        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
   767
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
   768
    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
   769
        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
   770
        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
   771
            with self.assertRaises(ExecutionError) as exc:
10633
d800ecd381f6 [server/test] bit of PEP8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10632
diff changeset
   772
                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
   773
        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
   774
                         '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
   775
                         '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
   776
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
   777
    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
   778
        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
   779
        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
   780
            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
   781
                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
   782
        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
   783
                         '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
   784
                         '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
   785
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   786
    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
   787
        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
   788
        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
   789
            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
   790
            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
   791
            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
   792
                             '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
   793
            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
   794
            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
   795
            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
   796
            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
   797
            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
   798
            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
   799
            cnx.commit()
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   800
            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
   801
            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
   802
                             [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
   803
            mh.rollback()
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   804
9962
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   805
    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
   806
        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
   807
        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
   808
            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
   809
        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
   810
9964
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   811
    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
   812
        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
   813
        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
   814
            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
   815
            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
   816
                             '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
   817
            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
   818
            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
   819
            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
   820
10799
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   821
    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
   822
        with self.mh() as (cnx, mh):
10800
1e4ddf5ee9ad [server/test] dict.itervalues() → iter(dict.values())
Julien Cristau <julien.cristau@logilab.fr>
parents: 10799
diff changeset
   823
            rdef = next(iter(self.schema['perm_changes'].rdefs.values()))
10799
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   824
            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
   825
                             {'add': (), 'delete': (),
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   826
                              '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
   827
            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
   828
            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
   829
                             {'read': ('managers',)})
10800
1e4ddf5ee9ad [server/test] dict.itervalues() → iter(dict.values())
Julien Cristau <julien.cristau@logilab.fr>
parents: 10799
diff changeset
   830
            rdef = next(iter(self.schema['perm_changes'].rdefs.values()))
10799
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   831
            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
   832
                             {'add': (), 'delete': (),
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   833
                              'read': ('managers',)})
ec97974b9010 make sync_schema_props_perms(<computed rtype>) work as expected
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10662
diff changeset
   834
9964
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   835
    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
   836
        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
   837
        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
   838
            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
   839
                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
   840
                    ('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
   841
        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
   842
                         '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
   843
                         'relation (whatever)')
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   844
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
   845
    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
   846
        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
   847
            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
   848
        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
   849
        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
   850
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   851
    # 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
   852
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   853
    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
   854
        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
   855
            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
   856
            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
   857
            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
   858
            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
   859
            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
   860
            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
   861
            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
   862
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   863
    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
   864
        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
   865
                         '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
   866
        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
   867
        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
   868
        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
   869
                         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
   870
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   871
    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
   872
        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
   873
        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
   874
        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
   875
            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
   876
            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
   877
            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
   878
            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
   879
            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
   880
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   881
    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
   882
        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
   883
        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
   884
        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
   885
            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
   886
            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
   887
            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
   888
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
   889
    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
   890
        self.assertNotIn('note20', self.schema)
10441
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   891
        with self.mh() as (cnx, mh):
1d0f4064a87e [test] run unittest_migractions on postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10353
diff changeset
   892
            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
   893
        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
   894
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
   895
    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
   896
        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
   897
        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
   898
            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
   899
        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
   900
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
   901
    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
   902
        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
   903
        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
   904
            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
   905
        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
   906
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
   907
    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
   908
        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
   909
        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
   910
            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
   911
        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
   912
9971
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   913
    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
   914
        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
   915
        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
   916
            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
   917
        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
   918
                         '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
   919
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   920
    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
   921
        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
   922
        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
   923
            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
   924
            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
   925
                             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
   926
            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
   927
                             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
   928
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   929
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   930
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   931
    unittest_main()