server/test/unittest_migractions.py
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 18 May 2015 20:00:06 +0200
changeset 10436 6493c8bf521d
parent 10353 d9a1e7939ee6
child 10441 1d0f4064a87e
permissions -rw-r--r--
[test] don't leave NULL columns around when making an attribute required It doesn't matter on sqlite (it doesn't do ALTER COLUMN), but when running this test on postgresql it fails to add the 'NOT NULL' constraint otherwise.
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
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
    21
import os.path as osp
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    22
from contextlib import contextmanager
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    24
from logilab.common.testlib import unittest_main, Tags, tag
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    26
from yams.constraints import UniqueConstraint
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
    27
9961
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    28
from cubicweb import ConfigurationError, ValidationError, ExecutionError
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
    29
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
    30
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
    31
from cubicweb.server.migractions import ServerMigrationHelper
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    33
import cubicweb.devtools
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    34
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
    35
cef58bd36f7b [CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Laura Médioni <laura.medioni@logilab.fr>
parents: 9787
diff changeset
    36
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
    37
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
    38
migrschema = None
6781
5062d86d6ffe [unittest2] use unittest2 module fixture api
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6635
diff changeset
    39
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
    40
    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
    41
    del migrschema
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    42
    if hasattr(MigrationCommandsTC, 'origschema'):
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    43
        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
    44
    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
    45
        del MigrationCommandsComputedTC.origschema
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    46
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
    47
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
    48
8935
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    49
    configcls = cubicweb.devtools.TestServerConfiguration
a8a9ba6f4cdd [server/test] use server config in migration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8696
diff changeset
    50
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    51
    tags = CubicWebTC.tags | Tags(('server', 'migration', 'migractions'))
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
    52
9043
97c3bb9a7c99 [testlib] move repo and related attribute back on Instance instead of Class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8947
diff changeset
    53
    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
    54
        super(MigrationTC, self)._init_repo()
4681
5f72584ab1d7 [test] cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4635
diff changeset
    55
        # 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
    56
        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
    57
        # 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
    58
        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
    59
        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
    60
        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
    61
        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
    62
        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
    63
        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
    64
        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
    65
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
    def setUp(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2745
diff changeset
    67
        CubicWebTC.setUp(self)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    68
6795
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    69
    def tearDown(self):
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    70
        CubicWebTC.tearDown(self)
f29d24c3d687 [server test] fix test inter-dependancy issue
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6790
diff changeset
    71
        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
    72
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    73
    @contextmanager
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    74
    def mh(self):
10353
d9a1e7939ee6 [migractions] remove any session related leftovers
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10257
diff changeset
    75
        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
    76
            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
    77
                                             repo=self.repo, cnx=cnx,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    78
                                             interactive=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    79
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    80
    def table_sql(self, mh, tablename):
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    81
        result = mh.sqlexec("SELECT sql FROM sqlite_master WHERE type='table' "
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    82
                            "and name=%(table)s", {'table': tablename})
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    83
        if result:
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    84
            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
    85
        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
    86
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    87
    def table_schema(self, mh, tablename):
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    88
        sql = self.table_sql(mh, tablename)
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    89
        assert sql, 'no table %s' % tablename
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    90
        return dict(x.split()[:2]
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    91
                    for x in sql.split('(', 1)[1].rsplit(')', 1)[0].split(','))
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
    92
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
    93
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
    94
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
    95
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
    96
    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
    97
        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
    98
        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
    99
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 9273
diff changeset
   100
    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
   101
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   102
            self.assertNotIn('yesno', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   103
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   104
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   105
            mh.cmd_add_attribute('Note', 'yesno')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   106
            self.assertIn('yesno', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   107
            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
   108
            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
   109
            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
   110
            # 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
   111
            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
   112
            self.assertEqual(note.yesno, False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   113
            # 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
   114
            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
   115
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   116
    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
   117
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   118
            self.assertNotIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   119
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   120
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   121
            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
   122
                                        '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
   123
            mh.cmd_add_attribute('Note', 'whatever')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   124
            self.assertIn('whatever', 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['whatever'].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['whatever'].objects(), ('Int',))
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('whatever'), 0)
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.assertIsInstance(note.whatever, int)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   131
            self.assertEqual(note.whatever, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   132
            # 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
   133
            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
   134
            # test attribute order
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   135
            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
   136
                                         '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
   137
            whateverorder = migrschema['whatever'].rdef('Note', 'Int').order
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   138
            for k, v in orderdict.iteritems():
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   139
                if v >= whateverorder:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   140
                    orderdict[k] = v+1
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   141
            orderdict['whatever'] = whateverorder
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   142
            self.assertDictEqual(orderdict, orderdict2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   143
            #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
   144
            #                  ['modification_date', 'creation_date', 'owned_by',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   145
            #                   'eid', 'ecrit_par', 'inline1', 'date', 'type',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   146
            #                   'whatever', 'date', 'in_basket'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   147
            # 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
   148
            #     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
   149
            #     two different entities)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   150
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   151
    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
   152
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   153
            self.assertNotIn('whatever', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   154
            cnx.create_entity('Note')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   155
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   156
            self.assertNotIn('shortpara', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   157
            mh.cmd_add_attribute('Note', 'shortpara')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   158
            self.assertIn('shortpara', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   159
            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
   160
            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
   161
            # 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
   162
            fields = self.table_schema(mh, '%sNote' % SQL_PREFIX)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   163
            self.assertEqual(fields['%sshortpara' % SQL_PREFIX], 'varchar(64)')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   164
            # 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
   165
            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
   166
            # 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
   167
            self.assertEqual(cnx.create_entity('Note').shortpara, 'hop')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   168
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   169
    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
   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('mydate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   172
            self.assertNotIn('oldstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   173
            self.assertNotIn('newstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   174
            mh.cmd_add_attribute('Note', 'mydate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   175
            mh.cmd_add_attribute('Note', 'oldstyledefaultdate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   176
            mh.cmd_add_attribute('Note', 'newstyledefaultdate')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   177
            self.assertIn('mydate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   178
            self.assertIn('oldstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   179
            self.assertIn('newstyledefaultdate', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   180
            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
   181
            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
   182
            testdate = date(2005, 12, 13)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   183
            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
   184
            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
   185
            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
   186
            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
   187
            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
   188
            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
   189
            self.assertEqual(d1, date.today())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   190
            self.assertEqual(d2, testdate)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   191
            myfavoritedate = date(2013, 1, 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   192
            self.assertEqual(d3, myfavoritedate)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   193
            self.assertEqual(d4, myfavoritedate)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   194
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   195
    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
   196
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   197
            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
   198
                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
   199
                # 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
   200
                self.assertRaises(ValidationError,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   201
                                  mh.rqlexec,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   202
                                  '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
   203
                mh.rollback()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   204
                # 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
   205
                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
   206
                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
   207
                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
   208
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   209
    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
   210
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   211
            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
   212
                                            droprequired=True):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   213
                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
   214
                mh.rqlexec('INSERT Note N')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   215
            # 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
   216
            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
   217
            mh.rollback()
6292
054fa36060d5 [migractions] add a dropped_constraints() migration command
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6208
diff changeset
   218
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   219
    def test_rename_attribute(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   220
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   221
            self.assertNotIn('civility', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   222
            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
   223
            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
   224
            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
   225
            self.assertNotIn('sexe', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   226
            self.assertIn('civility', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   227
            # test data has been backported
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   228
            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
   229
            self.assertEqual(c1, 'M')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   230
            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
   231
            self.assertEqual(c2, None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   232
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   233
    def test_workflow_actions(self):
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   234
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   235
            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
   236
                                     ensure_workflowable=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   237
            for etype in ('Personne', 'Email'):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   238
                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
   239
                                etype)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   240
                self.assertEqual(s1, "foo")
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   241
                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
   242
                                etype)[0][0]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   243
                self.assertEqual(s1, "foo")
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   244
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   245
    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
   246
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   247
            self.assertNotIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   248
            self.assertNotIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   249
            mh.cmd_add_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   250
            self.assertIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   251
            self.assertIn('Old', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   252
            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
   253
            self.assertIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   254
            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
   255
            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
   256
                              ['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
   257
                               'description', 'description_format',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   258
                               'eid',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   259
                               'filed_under2', 'has_text',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   260
                               '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
   261
                               '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
   262
            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
   263
                                  ['filed_under2', 'identity'])
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   264
            # 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
   265
            # 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
   266
            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
   267
                             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
   268
            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
   269
            eschema = self.schema.eschema('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   270
            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
   271
                self.assertTrue(hasattr(cstr, 'eid'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   272
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   273
    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
   274
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   275
            mh.cmd_add_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   276
            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
   277
                                     ensure_workflowable=False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   278
            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
   279
            done = wf.add_state(u'done')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   280
            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
   281
            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
   282
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   283
            eschema = self.schema.eschema('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   284
            mh.cmd_drop_entity_type('Folder2')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   285
            self.assertNotIn('Folder2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   286
            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
   287
            # test automatic workflow deletion
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   288
            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
   289
            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
   290
            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
   291
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
   292
    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
   293
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   294
            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
   295
            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
   296
            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
   297
            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
   298
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   299
    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
   300
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   301
            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
   302
            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
   303
            self.assertIn('filed_under2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   304
            # 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
   305
            # 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
   306
            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
   307
                             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
   308
                                    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
   309
            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
   310
            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
   311
            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
   312
            # 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
   313
            mh.cmd_drop_relation_type('filed_under2')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   314
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   315
    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
   316
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   317
            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
   318
            self.assertEqual(self.schema['concerne2'].subjects(),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   319
                             ('Personne',))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   320
            self.assertEqual(self.schema['concerne2'].objects(),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   321
                             ('Affaire', ))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   322
            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
   323
                              '1*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   324
            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
   325
            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
   326
            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
   327
            mh.create_entity('Affaire')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   328
            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
   329
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   330
            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
   331
            self.assertIn('concerne2', self.schema)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   332
            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
   333
            self.assertNotIn('concerne2', self.schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   334
2251
799ff50ddfe8 fix tests to avoid schema copy, pytest unittest_migration.py OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2124
diff changeset
   335
    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
   336
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   337
            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
   338
                              ['Affaire', 'Personne'])
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['concerne'].objects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   340
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   341
            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
   342
            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
   343
                              ['Affaire'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   344
            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
   345
                              ['Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   346
            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
   347
            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
   348
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   349
            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
   350
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   351
            # 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
   352
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   353
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   354
    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
   355
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   356
            self.assertEqual(sorted(str(e) for e in self.schema['concerne'].subjects()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   357
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   358
            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
   359
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   360
            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
   361
            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
   362
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   363
            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
   364
                              ['Affaire', 'Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   365
            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
   366
            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
   367
                              ['Affaire', 'Personne'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   368
            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
   369
                              ['Affaire', 'Division', 'Note', 'Societe', 'SubDivision'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   370
            # 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
   371
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   372
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   373
    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
   374
        self.skipTest('implement me')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   375
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   376
    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
   377
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   378
            rschema = self.schema['concerne']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   379
            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
   380
            self.assertEqual(card, '**')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   381
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   382
                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
   383
                                             cardinality='?*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   384
                card = rschema.rdef('Affaire', 'Societe').cardinality
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   385
                self.assertEqual(card, '?*')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   386
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   387
                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
   388
                                             cardinality='**')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   389
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   390
    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
   391
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   392
            rschema = self.schema['adel']
4100
ca9e014012ef api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
   393
            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
   394
            self.assertEqual(card, False)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   395
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   396
                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
   397
                                             fulltextindexed=True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   398
                card = rschema.rdef('Personne', 'String').fulltextindexed
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   399
                self.assertEqual(card, True)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   400
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   401
                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
   402
                                             fulltextindexed=False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   403
9565
fa00fc251d57 [migractions] Better handle removal of RQLConstraint in sync_schema
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9273
diff changeset
   404
    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
   405
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   406
            # Drop one of the RQLConstraint.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   407
            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
   408
            oldconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   409
            self.assertIn('S created_by U',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   410
                          [cstr.expression for cstr in oldconstraints])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   411
            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
   412
            newconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   413
            self.assertNotIn('S created_by U',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   414
                             [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
   415
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   416
            # Drop all RQLConstraint.
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   417
            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
   418
            oldconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   419
            self.assertEqual(len(oldconstraints), 2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   420
            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
   421
            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
   422
            newconstraints = rdef.constraints
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   423
            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
   424
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   425
    @tag('longrun')
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   426
    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
   427
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   428
            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
   429
            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
   430
            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
   431
            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
   432
            migrschema['Personne'].description = 'blabla bla'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   433
            migrschema['titre'].description = 'usually a title'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   434
            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
   435
            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
   436
            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
   437
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   438
            mh.cmd_sync_schema_props_perms(commit=False)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   439
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   440
            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
   441
                             'blabla bla')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   442
            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
   443
                             'usually a title')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   444
            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
   445
                                         'X from_entity FE, FE name "Personne",'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   446
                                         'X description D')[0][0],
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   447
                             'title for this person')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   448
            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
   449
                '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
   450
                '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
   451
                'X ordernum O')]
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   452
            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
   453
                        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
   454
                        u'description', u'firstname',
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   455
                        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
   456
            self.assertEqual(expected, rinorder)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   457
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   458
            # test permissions synchronization ####################################
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   459
            # 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
   460
            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
   461
            self.assertEqual(eexpr.expression,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   462
                              '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
   463
                              '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
   464
            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
   465
            self.assertEqual(eexpr.reverse_read_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   466
            self.assertEqual(eexpr.reverse_delete_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   467
            self.assertEqual(eexpr.reverse_update_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   468
            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
   469
            # no rqlexpr to delete para attribute
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   470
            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
   471
            # 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
   472
            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
   473
            self.assertEqual(rexpr.expression,
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   474
                              '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
   475
                              '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
   476
            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
   477
            self.assertEqual(rexpr.reverse_read_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   478
            self.assertEqual(rexpr.reverse_delete_permission, ())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   479
            # 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
   480
            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
   481
            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
   482
            # 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
   483
            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
   484
            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
   485
            # 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
   486
            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
   487
            # 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
   488
            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
   489
            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
   490
            # 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
   491
            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
   492
            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
   493
            # 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
   494
            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
   495
                             len(delete_concerne_rqlexpr))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   496
            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
   497
                             len(add_concerne_rqlexpr))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   498
            # * migrschema involve:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   499
            #   * 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
   500
            #   * 2 rrqlexprs deletions (travaille)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   501
            #   * 1 update (Affaire update)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   502
            #   * 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
   503
            #   * 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
   504
            # 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
   505
            # unattached expressions -> pending deletion on commit
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   506
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "ERQLExpression",'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   507
                                            'NOT ET1 read_permission X, NOT ET2 add_permission X, '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   508
                                            'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   509
                              7)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   510
            self.assertEqual(cnx.execute('Any COUNT(X) WHERE X is RQLExpression, X exprtype "RRQLExpression",'
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   511
                                            'NOT ET1 read_permission X, NOT ET2 add_permission X, '
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   512
                                            'NOT ET3 delete_permission X, NOT ET4 update_permission X')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   513
                              2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   514
            # finally
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   515
            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
   516
                             nbrqlexpr_start + 1 + 2 + 2 + 2)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   517
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   518
            # unique_together test
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   519
            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
   520
            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
   521
                                               ('nom', 'prenom', 'datenaiss'))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   522
            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
   523
            self.assertEqual(len(rset), 1)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   524
            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
   525
            self.assertCountEqual(relations, ('nom', 'prenom', 'datenaiss'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   526
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   527
    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
   528
        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
   529
        return cnx.execute(rql, {'name': ertype})
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   530
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   531
    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
   532
        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
   533
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   534
        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
   535
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   536
    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
   537
        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
   538
        return cnx.execute(rql, {'name': ertype})
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   539
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   540
    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
   541
        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
   542
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   543
        return rset.get_entity(0, 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   544
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   545
    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
   546
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   547
            # existing previous value
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   548
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   549
                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
   550
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   551
                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
   552
            # non existing previous value
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   553
            try:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   554
                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
   555
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   556
                mh.cmd_set_size_constraint('CWEType', 'description', None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   557
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   558
    @tag('longrun')
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   559
    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
   560
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   561
            schema = self.repo.schema
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   562
            self.assertEqual(sorted((str(s), str(o)) for s, o in schema['see_also'].rdefs.iterkeys()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   563
                             sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   564
                                     ('Bookmark', 'Bookmark'), ('Bookmark', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   565
                                     ('Note', 'Note'), ('Note', 'Bookmark')]))
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   566
            try:
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   567
                mh.cmd_drop_cube('email', removedeps=True)
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   568
                # file was there because it's an email dependancy, should have been removed
9675
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   569
                self.assertNotIn('email', self.config.cubes())
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   570
                self.assertNotIn(self.config.cube_dir('email'), self.config.cubes_path())
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   571
                self.assertNotIn('file', self.config.cubes())
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   572
                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
   573
                for ertype in ('Email', 'EmailThread', 'EmailPart', 'File',
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   574
                               'sender', 'in_thread', 'reply_to', 'data_format'):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   575
                    self.assertFalse(ertype in schema, ertype)
8696
0bb18407c053 [toward py3k] rewrite dict.keys() and dict.values() (part of #2711624)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8694
diff changeset
   576
                self.assertEqual(sorted(schema['see_also'].rdefs.iterkeys()),
439
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   577
                                  sorted([('Folder', 'Folder'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   578
                                          ('Bookmark', 'Bookmark'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   579
                                          ('Bookmark', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   580
                                          ('Note', 'Note'),
7cb7cb318983 test fixes
sylvain.thenault@logilab.fr
parents: 47
diff changeset
   581
                                          ('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
   582
                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
   583
                self.assertEqual(sorted(schema['see_also'].objects()), ['Bookmark', 'Folder', 'Note'])
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   584
                self.assertEqual(cnx.execute('Any X WHERE X pkey "system.version.email"').rowcount, 0)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   585
                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
   586
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   587
                mh.cmd_add_cube('email')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   588
                self.assertIn('email', self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   589
                self.assertIn(self.config.cube_dir('email'), self.config.cubes_path())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   590
                self.assertIn('file', self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   591
                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
   592
                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
   593
                               'sender', 'in_thread', 'reply_to', 'data_format'):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   594
                    self.assertTrue(ertype in schema, ertype)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   595
                self.assertEqual(sorted(schema['see_also'].rdefs.iterkeys()),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   596
                                  sorted([('EmailThread', 'EmailThread'), ('Folder', 'Folder'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   597
                                          ('Bookmark', 'Bookmark'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   598
                                          ('Bookmark', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   599
                                          ('Note', 'Note'),
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   600
                                          ('Note', 'Bookmark')]))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   601
                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
   602
                self.assertEqual(sorted(schema['see_also'].objects()), ['Bookmark', 'EmailThread', 'Folder', 'Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   603
                from cubes.email.__pkginfo__ import version as email_version
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   604
                from cubes.file.__pkginfo__ import version as file_version
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   605
                self.assertEqual(cnx.execute('Any V WHERE X value V, X pkey "system.version.email"')[0][0],
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   606
                                  email_version)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   607
                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
   608
                                  file_version)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   609
                # 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
   610
                #        types (and their associated tables!)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   611
                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
   612
                # 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
   613
                # 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
   614
                cnx.commit()
972
1efba3fd1364 set_state command in shell
sylvain.thenault@logilab.fr
parents: 934
diff changeset
   615
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
   616
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   617
    @tag('longrun')
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   618
    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
   619
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   620
            cubes = set(self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   621
            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
   622
            try:
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   623
                mh.cmd_drop_cube('email')
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
   624
                cubes.remove('email')
9675
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
   625
                self.assertNotIn('email', self.config.cubes())
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9663
diff changeset
   626
                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
   627
                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
   628
                               'sender', 'in_thread', 'reply_to'):
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   629
                    self.assertFalse(ertype in schema, ertype)
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   630
            finally:
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   631
                mh.cmd_add_cube('email')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   632
                self.assertIn('email', self.config.cubes())
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   633
                # 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
   634
                #        types (and their associated tables!)
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   635
                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
   636
                # 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
   637
                # 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
   638
                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
   639
10107
1ef92a6193a8 [serverctl] rename remove_cube to drop_cube (closes #4545093)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9971
diff changeset
   640
    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
   641
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   642
            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
   643
                mh.cmd_drop_cube('file')
9787
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   644
            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
   645
7073
4ce9e536dd66 [test] add some tags
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6816
diff changeset
   646
    @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
   647
    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
   648
        with self.mh() as (cnx, mh):
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   649
            mh.cmd_add_entity_type('Para')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   650
            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
   651
                             ['Note'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   652
            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
   653
            mh.cmd_add_entity_type('Text')
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   654
            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
   655
                              ['Note', 'Text'])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   656
            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
   657
            # test columns have been actually added
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   658
            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
   659
            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
   660
            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
   661
            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
   662
                                         {'x': text.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   663
            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
   664
                                         {'x': note.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   665
            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
   666
                                         {'x': text.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   667
            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
   668
                                         {'x': note.eid, 'y': aff.eid}))
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   669
            # 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
   670
            # 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
   671
            # MemSchemaCWETypeDel(session, name) operation in the
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   672
            # 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
   673
            # 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
   674
            #
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   675
            # 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
   676
            # specialization relationship...
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   677
            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
   678
            cnx.commit()
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   679
            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
   680
                             [])
ae624d86c652 [tests/migration] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   681
            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
   682
            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
   683
6163
407f54345687 [migration] fix add_relation_type() for symmetric relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5575
diff changeset
   684
    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
   685
        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
   686
            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
   687
            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
   688
            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
   689
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
   690
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
   691
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
   692
    """ 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
   693
    """
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
   694
    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
   695
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   696
    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
   697
        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
   698
        # 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
   699
        # attributes
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   700
        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
   701
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
   702
    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
   703
        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
   704
        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
   705
            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
   706
                mh.cmd_add_relation_definition('Employee', '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
   707
                                                    'Company')
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
   708
        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
   709
                         '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
   710
                         '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
   711
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
   712
    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
   713
        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
   714
        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
   715
            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
   716
                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
   717
        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
   718
                         '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
   719
                         '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
   720
9963
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   721
    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
   722
        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
   723
        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
   724
            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
   725
            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
   726
            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
   727
                             '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
   728
            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
   729
            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
   730
            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
   731
            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
   732
            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
   733
            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
   734
            cnx.commit()
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   735
            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
   736
            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
   737
                             [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
   738
            mh.rollback()
5531f5577b50 [CWEP002 migration] support add_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9962
diff changeset
   739
9962
64b573d54133 [CWEP002 migration] support drop_relation_type for computed relations
Laura Médioni <laura.medioni@logilab.fr>
parents: 9961
diff changeset
   740
    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
   741
        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
   742
        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
   743
            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
   744
        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
   745
9964
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   746
    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
   747
        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
   748
        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
   749
            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
   750
            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
   751
                             '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
   752
            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
   753
            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
   754
            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
   755
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   756
    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
   757
        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
   758
        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
   759
            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
   760
                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
   761
                    ('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
   762
        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
   763
                         '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
   764
                         'relation (whatever)')
f4a3ee05cf9d [CWEP002 migration] support sync_schema_props_perms for computed relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9963
diff changeset
   765
9969
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   766
    # 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
   767
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   768
    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
   769
        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
   770
            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
   771
            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
   772
            e1 = cnx.create_entity('Employee', reverse_employees=c)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   773
            n1 = cnx.create_entity('Note', note=2, concerns=e1)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   774
            e2 = cnx.create_entity('Employee', reverse_employees=c)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   775
            n2 = cnx.create_entity('Note', note=4, concerns=e2)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   776
            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
   777
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   778
    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
   779
        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
   780
                         '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
   781
        fields = self.table_schema(mh, '%sCompany' % SQL_PREFIX)
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   782
        self.assertEqual(fields['%sscore' % SQL_PREFIX], 'float')
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   783
        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
   784
                         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
   785
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   786
    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
   787
        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
   788
        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
   789
        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
   790
            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
   791
            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
   792
            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
   793
            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
   794
            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
   795
0f64ef873f7a [CWEP002 migration] support add_relation_type/add_attribute for computed attributes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9964
diff changeset
   796
    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
   797
        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
   798
        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
   799
        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
   800
            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
   801
            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
   802
            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
   803
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
   804
    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
   805
        self.assertNotIn('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
   806
        # DROP COLUMN not supported by sqlite
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
   807
        #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
   808
        #    fields = self.table_schema(mh, '%sNote' % SQL_PREFIX)
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
   809
        #self.assertNotIn('%snote20' % SQL_PREFIX, fields)
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
   810
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
   811
    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
   812
        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
   813
        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
   814
            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
   815
        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
   816
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
   817
    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
   818
        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
   819
        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
   820
            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
   821
        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
   822
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
   823
    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
   824
        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
   825
        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
   826
            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
   827
        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
   828
9971
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   829
    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
   830
        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
   831
        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
   832
            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
   833
        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
   834
                         '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
   835
5e44dd9dde6b [CWEP002 migration] support sync_schema_props_perms for computed attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9970
diff changeset
   836
    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
   837
        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
   838
        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
   839
            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
   840
            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
   841
                             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
   842
            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
   843
                             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
   844
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
   845
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   846
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   847
    unittest_main()