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