author | Julien Cristau <julien.cristau@logilab.fr> |
Wed, 02 Dec 2015 14:57:03 +0100 | |
changeset 11025 | 5413ab08617d |
parent 10822 | 9337c72ad92c |
child 11032 | 38afb7e23c6c |
permissions | -rw-r--r-- |
0 | 1 |
# -*- coding: iso-8859-1 -*- |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
2 |
# 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:
4848
diff
changeset
|
3 |
# 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:
4848
diff
changeset
|
4 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
5 |
# 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:
4848
diff
changeset
|
6 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
7 |
# 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:
4848
diff
changeset
|
8 |
# 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:
4848
diff
changeset
|
9 |
# 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:
4848
diff
changeset
|
10 |
# 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:
4848
diff
changeset
|
11 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
12 |
# 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:
4848
diff
changeset
|
13 |
# 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:
4848
diff
changeset
|
14 |
# 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:
4848
diff
changeset
|
15 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
16 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
17 |
# 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:
4848
diff
changeset
|
18 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
6196 | 19 |
"""unit tests for modules cubicweb.server.querier and cubicweb.server.ssplanner |
0 | 20 |
""" |
8343
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
8342
diff
changeset
|
21 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
22 |
from datetime import date, datetime, timedelta, tzinfo |
0 | 23 |
|
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
24 |
from six import PY2, integer_types, binary_type, text_type |
0 | 25 |
from logilab.common.testlib import TestCase, unittest_main |
26 |
from rql import BadRQLQuery, RQLSyntaxError |
|
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:
439
diff
changeset
|
27 |
|
1949
9064102b4deb
test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1787
diff
changeset
|
28 |
from cubicweb import QueryError, Unauthorized, Binary |
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:
439
diff
changeset
|
29 |
from cubicweb.server.sqlutils import SQL_PREFIX |
0 | 30 |
from cubicweb.server.utils import crypt_password |
8542
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
31 |
from cubicweb.server.querier import manual_build_descr, _make_description |
7078
bad26a22fe29
[test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
7043
diff
changeset
|
32 |
from cubicweb.devtools import get_test_db_handler, TestServerConfiguration |
8342
7a5271182ef0
[rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8317
diff
changeset
|
33 |
from cubicweb.devtools.testlib import CubicWebTC |
1016
26387b836099
use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents:
439
diff
changeset
|
34 |
from cubicweb.devtools.repotest import tuplify, BaseQuerierTC |
0 | 35 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
36 |
class FixedOffset(tzinfo): |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
37 |
def __init__(self, hours=0): |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
38 |
self.hours = hours |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
39 |
def utcoffset(self, dt): |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
40 |
return timedelta(hours=self.hours) |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
41 |
def dst(self, dt): |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
42 |
return timedelta(0) |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
43 |
|
0 | 44 |
|
45 |
# register priority/severity sorting registered procedure |
|
46 |
from rql.utils import register_function, FunctionDescr |
|
47 |
||
48 |
class group_sort_value(FunctionDescr): |
|
49 |
supported_backends = ('sqlite',) |
|
50 |
rtype = 'Int' |
|
51 |
try: |
|
52 |
register_function(group_sort_value) |
|
53 |
except AssertionError: |
|
54 |
pass |
|
55 |
from cubicweb.server.sqlutils import SQL_CONNECT_HOOKS |
|
56 |
def init_sqlite_connexion(cnx): |
|
57 |
def group_sort_value(text): |
|
58 |
return {"managers": "3", "users": "2", "guests": "1", "owners": "0"}[text] |
|
59 |
cnx.create_function("GROUP_SORT_VALUE", 1, group_sort_value) |
|
60 |
SQL_CONNECT_HOOKS['sqlite'].append(init_sqlite_connexion) |
|
61 |
||
62 |
||
8347
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
63 |
def setUpClass(cls, *args): |
6631
26c303c3f1aa
[test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6427
diff
changeset
|
64 |
global repo, cnx |
7078
bad26a22fe29
[test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
7043
diff
changeset
|
65 |
config = TestServerConfiguration(apphome=UtilsTC.datadir) |
bad26a22fe29
[test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
7043
diff
changeset
|
66 |
handler = get_test_db_handler(config) |
bad26a22fe29
[test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
7043
diff
changeset
|
67 |
handler.build_db_cache() |
bad26a22fe29
[test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
7043
diff
changeset
|
68 |
repo, cnx = handler.get_repo_and_cnx() |
8347
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
69 |
cls.repo = repo |
0 | 70 |
|
8347
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
71 |
def tearDownClass(cls, *args): |
4766
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4758
diff
changeset
|
72 |
global repo, cnx |
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4758
diff
changeset
|
73 |
repo.shutdown() |
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4758
diff
changeset
|
74 |
del repo, cnx |
0 | 75 |
|
76 |
||
8542
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
77 |
class Variable: |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
78 |
def __init__(self, name): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
79 |
self.name = name |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
80 |
self.children = [] |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
81 |
|
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
82 |
def get_type(self, solution, args=None): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
83 |
return solution[self.name] |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
84 |
def as_string(self): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
85 |
return self.name |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
86 |
|
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
87 |
class Function: |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
88 |
def __init__(self, name, varname): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
89 |
self.name = name |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
90 |
self.children = [Variable(varname)] |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
91 |
def get_type(self, solution, args=None): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
92 |
return 'Int' |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
93 |
|
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
94 |
class MakeDescriptionTC(TestCase): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
95 |
def test_known_values(self): |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
96 |
solution = {'A': 'Int', 'B': 'CWUser'} |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
97 |
self.assertEqual(_make_description((Function('max', 'A'), Variable('B')), {}, solution), |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
98 |
['Int','CWUser']) |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
99 |
|
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
100 |
|
0 | 101 |
class UtilsTC(BaseQuerierTC): |
8347
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
102 |
setUpClass = classmethod(setUpClass) |
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
103 |
tearDownClass = classmethod(tearDownClass) |
1787 | 104 |
|
0 | 105 |
def get_max_eid(self): |
106 |
# no need for cleanup here |
|
107 |
return None |
|
108 |
def cleanup(self): |
|
109 |
# no need for cleanup here |
|
110 |
pass |
|
1787 | 111 |
|
0 | 112 |
def test_preprocess_1(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
113 |
with self.session.new_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
114 |
reid = cnx.execute('Any X WHERE X is CWRType, X name "owned_by"')[0][0] |
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
115 |
rqlst = self._prepare(cnx, 'Any COUNT(RDEF) WHERE RDEF relation_type X, X eid %(x)s', |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
116 |
{'x': reid}) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
117 |
self.assertEqual([{'RDEF': 'CWAttribute'}, {'RDEF': 'CWRelation'}], |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
118 |
rqlst.solutions) |
1787 | 119 |
|
0 | 120 |
def test_preprocess_2(self): |
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
121 |
with self.session.new_cnx() as cnx: |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
122 |
teid = cnx.execute("INSERT Tag X: X name 'tag'")[0][0] |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
123 |
#geid = self.execute("CWGroup G WHERE G name 'users'")[0][0] |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
124 |
#self.execute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s", |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
125 |
# {'g': geid, 't': teid}, 'g') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
126 |
rqlst = self._prepare(cnx, 'Any X WHERE E eid %(x)s, E tags X', {'x': teid}) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
127 |
# the query may be optimized, should keep only one solution |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
128 |
# (any one, etype will be discarded) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
129 |
self.assertEqual(1, len(rqlst.solutions)) |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
130 |
|
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
131 |
def assertRQLEqual(self, expected, got): |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
132 |
from rql import parse |
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
133 |
self.assertMultiLineEqual(text_type(parse(expected)), |
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
134 |
text_type(parse(got))) |
1787 | 135 |
|
0 | 136 |
def test_preprocess_security(self): |
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
137 |
s = self.user_groups_session('users') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
138 |
with s.new_cnx() as cnx: |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
139 |
plan = self._prepare_plan(cnx, 'Any ETN,COUNT(X) GROUPBY ETN ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
140 |
'WHERE X is ET, ET name ETN') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
141 |
union = plan.rqlst |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
142 |
plan.preprocess(union) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
143 |
self.assertEqual(len(union.children), 1) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
144 |
self.assertEqual(len(union.children[0].with_), 1) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
145 |
subq = union.children[0].with_[0].query |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
146 |
self.assertEqual(len(subq.children), 4) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
147 |
self.assertEqual([t.as_string() for t in union.children[0].selection], |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
148 |
['ETN','COUNT(X)']) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
149 |
self.assertEqual([t.as_string() for t in union.children[0].groupby], |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
150 |
['ETN']) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
151 |
partrqls = sorted(((rqlst.as_string(), rqlst.solutions) for rqlst in subq.children)) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
152 |
rql, solutions = partrqls[0] |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
153 |
self.assertRQLEqual(rql, |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
154 |
'Any ETN,X WHERE X is ET, ET name ETN, (EXISTS(X owned_by %(B)s))' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
155 |
' OR ((((EXISTS(D concerne C?, C owned_by %(B)s, ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
156 |
' X identity D, C is Division, D is Affaire))' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
157 |
' OR (EXISTS(H concerne G?, G owned_by %(B)s, G is SubDivision, ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
158 |
' X identity H, H is Affaire)))' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
159 |
' OR (EXISTS(I concerne F?, F owned_by %(B)s, F is Societe, ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
160 |
' X identity I, I is Affaire)))' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
161 |
' OR (EXISTS(J concerne E?, E owned_by %(B)s, E is Note, ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
162 |
' X identity J, J is Affaire)))' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
163 |
', ET is CWEType, X is Affaire') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
164 |
self.assertEqual(solutions, [{'C': 'Division', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
165 |
'D': 'Affaire', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
166 |
'E': 'Note', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
167 |
'F': 'Societe', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
168 |
'G': 'SubDivision', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
169 |
'H': 'Affaire', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
170 |
'I': 'Affaire', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
171 |
'J': 'Affaire', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
172 |
'X': 'Affaire', |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
173 |
'ET': 'CWEType', 'ETN': 'String'}]) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
174 |
rql, solutions = partrqls[1] |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
175 |
self.assertRQLEqual(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, ' |
9956
19a683a0047c
[CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
9850
diff
changeset
|
176 |
'X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWComputedRType, ' |
19a683a0047c
[CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
9850
diff
changeset
|
177 |
' CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, ' |
19a683a0047c
[CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
9850
diff
changeset
|
178 |
' CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, ' |
9990 | 179 |
' Comment, Division, Email, EmailPart, EmailThread, ExternalUri, File, Folder, ' |
180 |
' Frozable, Note, Old, Personne, RQLExpression, Societe, State, SubDivision, ' |
|
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
181 |
' SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
10822
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
182 |
self.assertCountEqual(solutions, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
183 |
[{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
184 |
{'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
185 |
{'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
186 |
{'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
187 |
{'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
188 |
{'X': 'CWCache', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
189 |
{'X': 'CWComputedRType', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
190 |
{'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
191 |
{'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
192 |
{'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
193 |
{'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
194 |
{'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
195 |
{'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
196 |
{'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
197 |
{'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
198 |
{'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
199 |
{'X': 'CWSource', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
200 |
{'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
201 |
{'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
202 |
{'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
203 |
{'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
204 |
{'X': 'EmailThread', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
205 |
{'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
206 |
{'X': 'File', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
207 |
{'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
208 |
{'X': 'Frozable', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
209 |
{'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
210 |
{'X': 'Old', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
211 |
{'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
212 |
{'X': 'RQLExpression', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
213 |
{'X': 'Societe', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
214 |
{'X': 'State', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
215 |
{'X': 'SubDivision', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
216 |
{'X': 'SubWorkflowExitPoint', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
217 |
{'X': 'Tag', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
218 |
{'X': 'Transition', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
219 |
{'X': 'TrInfo', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
220 |
{'X': 'Workflow', 'ETN': 'String', 'ET': 'CWEType'}, |
9337c72ad92c
[server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents:
10765
diff
changeset
|
221 |
{'X': 'WorkflowTransition', 'ETN': 'String', 'ET': 'CWEType'}]) |
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
222 |
rql, solutions = partrqls[2] |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
223 |
self.assertEqual(rql, |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
224 |
'Any ETN,X WHERE X is ET, ET name ETN, EXISTS(%(D)s use_email X), ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
225 |
'ET is CWEType, X is EmailAddress') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
226 |
self.assertEqual(solutions, [{'X': 'EmailAddress', 'ET': 'CWEType', 'ETN': 'String'}]) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
227 |
rql, solutions = partrqls[3] |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
228 |
self.assertEqual(rql, |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
229 |
'Any ETN,X WHERE X is ET, ET name ETN, EXISTS(X owned_by %(C)s), ' |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
230 |
'ET is CWEType, X is Basket') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
231 |
self.assertEqual(solutions, [{'X': 'Basket', 'ET': 'CWEType', 'ETN': 'String'}]) |
0 | 232 |
|
233 |
def test_preprocess_security_aggregat(self): |
|
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
234 |
s = self.user_groups_session('users') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
235 |
with s.new_cnx() as cnx: |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
236 |
plan = self._prepare_plan(cnx, 'Any MAX(X)') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
237 |
union = plan.rqlst |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
238 |
plan.preprocess(union) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
239 |
self.assertEqual(len(union.children), 1) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
240 |
self.assertEqual(len(union.children[0].with_), 1) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
241 |
subq = union.children[0].with_[0].query |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
242 |
self.assertEqual(len(subq.children), 4) |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
243 |
self.assertEqual([t.as_string() for t in union.children[0].selection], |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
244 |
['MAX(X)']) |
1787 | 245 |
|
0 | 246 |
def test_preprocess_nonregr(self): |
9850
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
247 |
with self.session.new_cnx() as cnx: |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
248 |
rqlst = self._prepare(cnx, 'Any S ORDERBY SI WHERE NOT S ecrit_par O, S para SI') |
5ef9dd383ae2
[tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9833
diff
changeset
|
249 |
self.assertEqual(len(rqlst.solutions), 1) |
1787 | 250 |
|
0 | 251 |
def test_build_description(self): |
252 |
# should return an empty result set |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
253 |
rset = self.qexecute('Any X WHERE X eid %(x)s', {'x': self.session.user.eid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
254 |
self.assertEqual(rset.description[0][0], 'CWUser') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
255 |
rset = self.qexecute('Any 1') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
256 |
self.assertEqual(rset.description[0][0], 'Int') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
257 |
rset = self.qexecute('Any TRUE') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
258 |
self.assertEqual(rset.description[0][0], 'Boolean') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
259 |
rset = self.qexecute('Any "hop"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
260 |
self.assertEqual(rset.description[0][0], 'String') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
261 |
rset = self.qexecute('Any TODAY') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
262 |
self.assertEqual(rset.description[0][0], 'Date') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
263 |
rset = self.qexecute('Any NOW') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
264 |
self.assertEqual(rset.description[0][0], 'Datetime') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
265 |
rset = self.qexecute('Any %(x)s', {'x': 1}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
266 |
self.assertEqual(rset.description[0][0], 'Int') |
10591
8e46ed1a0b8a
[py3k] octals and long
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents:
10508
diff
changeset
|
267 |
if PY2: |
8e46ed1a0b8a
[py3k] octals and long
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents:
10508
diff
changeset
|
268 |
rset = self.qexecute('Any %(x)s', {'x': long(1)}) |
8e46ed1a0b8a
[py3k] octals and long
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents:
10508
diff
changeset
|
269 |
self.assertEqual(rset.description[0][0], 'Int') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
270 |
rset = self.qexecute('Any %(x)s', {'x': True}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
271 |
self.assertEqual(rset.description[0][0], 'Boolean') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
272 |
rset = self.qexecute('Any %(x)s', {'x': 1.0}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
273 |
self.assertEqual(rset.description[0][0], 'Float') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
274 |
rset = self.qexecute('Any %(x)s', {'x': datetime.now()}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
275 |
self.assertEqual(rset.description[0][0], 'Datetime') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
276 |
rset = self.qexecute('Any %(x)s', {'x': 'str'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
277 |
self.assertEqual(rset.description[0][0], 'String') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
278 |
rset = self.qexecute('Any %(x)s', {'x': u'str'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
279 |
self.assertEqual(rset.description[0][0], 'String') |
0 | 280 |
|
8542
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
281 |
def test_build_descr1(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
282 |
with self.session.new_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
283 |
rset = cnx.execute('(Any U,L WHERE U login L) UNION ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
284 |
'(Any G,N WHERE G name N, G is CWGroup)') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
285 |
# rset.req = self.session |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
286 |
orig_length = len(rset) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
287 |
rset.rows[0][0] = 9999999 |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
288 |
description = manual_build_descr(cnx, rset.syntax_tree(), None, rset.rows) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
289 |
self.assertEqual(len(description), orig_length - 1) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
290 |
self.assertEqual(len(rset.rows), orig_length - 1) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
291 |
self.assertNotEqual(rset.rows[0][0], 9999999) |
8542
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
292 |
|
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
293 |
def test_build_descr2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
294 |
rset = self.qexecute('Any X,Y WITH X,Y BEING ((Any G,NULL WHERE G is CWGroup) UNION ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
295 |
'(Any U,G WHERE U in_group G))') |
8542
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
296 |
for x, y in rset.description: |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
297 |
if y is not None: |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
298 |
self.assertEqual(y, 'CWGroup') |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
299 |
|
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
300 |
def test_build_descr3(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
301 |
rset = self.qexecute('(Any G,NULL WHERE G is CWGroup) UNION ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
302 |
'(Any U,G WHERE U in_group G)') |
8542
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
303 |
for x, y in rset.description: |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
304 |
if y is not None: |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
305 |
self.assertEqual(y, 'CWGroup') |
7e264ce34cd4
[session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8349
diff
changeset
|
306 |
|
0 | 307 |
|
308 |
class QuerierTC(BaseQuerierTC): |
|
8347
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
309 |
setUpClass = classmethod(setUpClass) |
d317a2880059
[test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8343
diff
changeset
|
310 |
tearDownClass = classmethod(tearDownClass) |
0 | 311 |
|
312 |
def test_unknown_eid(self): |
|
313 |
# should return an empty result set |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
314 |
self.assertFalse(self.qexecute('Any X WHERE X eid 99999999')) |
1787 | 315 |
|
3109
e7e1bb06b716
ensure eid given in arguments will be returned correctly typed (though only if they are in the cachekey for now)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2608
diff
changeset
|
316 |
def test_typed_eid(self): |
e7e1bb06b716
ensure eid given in arguments will be returned correctly typed (though only if they are in the cachekey for now)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2608
diff
changeset
|
317 |
# should return an empty result set |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
318 |
rset = self.qexecute('Any X WHERE X eid %(x)s', {'x': '1'}) |
10613
8d9fe02387e3
[py3k] six.integer_types
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10600
diff
changeset
|
319 |
self.assertIsInstance(rset[0][0], integer_types) |
3109
e7e1bb06b716
ensure eid given in arguments will be returned correctly typed (though only if they are in the cachekey for now)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2608
diff
changeset
|
320 |
|
1949
9064102b4deb
test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1787
diff
changeset
|
321 |
def test_bytes_storage(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
322 |
feid = self.qexecute('INSERT File X: X data_name "foo.pdf", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
323 |
'X data_format "text/plain", X data %(data)s', |
10765
bd2e3c1d1fed
[server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10764
diff
changeset
|
324 |
{'data': Binary(b"xxx")})[0][0] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
325 |
fdata = self.qexecute('Any D WHERE X data D, X eid %(x)s', {'x': feid})[0][0] |
1949
9064102b4deb
test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1787
diff
changeset
|
326 |
self.assertIsInstance(fdata, Binary) |
10765
bd2e3c1d1fed
[server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10764
diff
changeset
|
327 |
self.assertEqual(fdata.getvalue(), b'xxx') |
1949
9064102b4deb
test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1787
diff
changeset
|
328 |
|
0 | 329 |
# selection queries tests ################################################# |
1787 | 330 |
|
0 | 331 |
def test_select_1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
332 |
rset = self.qexecute('Any X ORDERBY X WHERE X is CWGroup') |
0 | 333 |
result, descr = rset.rows, rset.description |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
334 |
self.assertEqual(tuplify(result), [(2,), (3,), (4,), (5,)]) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
335 |
self.assertEqual(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)]) |
1787 | 336 |
|
0 | 337 |
def test_select_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
338 |
rset = self.qexecute('Any X ORDERBY N WHERE X is CWGroup, X name N') |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
339 |
self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)]) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
340 |
self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
341 |
rset = self.qexecute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N') |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
342 |
self.assertEqual(tuplify(rset.rows), [(5,), (4,), (3,), (2,)]) |
1787 | 343 |
|
0 | 344 |
def test_select_3(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
345 |
rset = self.qexecute('Any N GROUPBY N WHERE X is CWGroup, X name N') |
0 | 346 |
result, descr = rset.rows, rset.description |
347 |
result.sort() |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
348 |
self.assertEqual(tuplify(result), [('guests',), ('managers',), ('owners',), ('users',)]) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
349 |
self.assertEqual(descr, [('String',), ('String',), ('String',), ('String',)]) |
1787 | 350 |
|
0 | 351 |
def test_select_is(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
352 |
rset = self.qexecute('Any X, TN ORDERBY TN LIMIT 10 WHERE X is T, T name TN') |
0 | 353 |
result, descr = rset.rows, rset.description |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
354 |
self.assertEqual(result[0][1], descr[0][0]) |
1787 | 355 |
|
0 | 356 |
def test_select_is_aggr(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
357 |
rset = self.qexecute('Any TN, COUNT(X) GROUPBY TN ORDERBY 2 DESC WHERE X is T, T name TN') |
0 | 358 |
result, descr = rset.rows, rset.description |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
359 |
self.assertEqual(descr[0][0], 'String') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
360 |
self.assertEqual(descr[0][1], 'Int') |
10403
fe614ec1688c
[server/test] fix broken test
Rémi Cardona <remi.cardona@logilab.fr>
parents:
9990
diff
changeset
|
361 |
self.assertEqual(result[0][0], 'RQLExpression') # XXX may change as schema evolve |
1787 | 362 |
|
0 | 363 |
def test_select_groupby_orderby(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
364 |
rset = self.qexecute('Any N GROUPBY N ORDERBY N WHERE X is CWGroup, X name N') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
365 |
self.assertEqual(tuplify(rset.rows), [('guests',), ('managers',), ('owners',), ('users',)]) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
366 |
self.assertEqual(rset.description, [('String',), ('String',), ('String',), ('String',)]) |
1787 | 367 |
|
0 | 368 |
def test_select_complex_groupby(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
369 |
rset = self.qexecute('Any N GROUPBY N WHERE X name N') |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
370 |
rset = self.qexecute('Any N,MAX(D) GROUPBY N LIMIT 5 WHERE X name N, X creation_date D') |
1787 | 371 |
|
0 | 372 |
def test_select_inlined_groupby(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
373 |
seid = self.qexecute('State X WHERE X name "deactivated"')[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
374 |
rset = self.qexecute('Any U,L,S GROUPBY U,L,S WHERE X in_state S, U login L, S eid %s' % seid) |
1787 | 375 |
|
7392
230f2511ad28
[querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7257
diff
changeset
|
376 |
def test_select_groupby_funccall(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
377 |
rset = self.qexecute('Any YEAR(CD), COUNT(X) GROUPBY YEAR(CD) ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
378 |
'WHERE X is CWUser, X creation_date CD') |
7392
230f2511ad28
[querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7257
diff
changeset
|
379 |
self.assertListEqual(rset.rows, [[date.today().year, 2]]) |
230f2511ad28
[querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7257
diff
changeset
|
380 |
|
230f2511ad28
[querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7257
diff
changeset
|
381 |
def test_select_groupby_colnumber(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
382 |
rset = self.qexecute('Any YEAR(CD), COUNT(X) GROUPBY 1 ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
383 |
'WHERE X is CWUser, X creation_date CD') |
7392
230f2511ad28
[querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7257
diff
changeset
|
384 |
self.assertListEqual(rset.rows, [[date.today().year, 2]]) |
230f2511ad28
[querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7257
diff
changeset
|
385 |
|
0 | 386 |
def test_select_complex_orderby(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
387 |
rset1 = self.qexecute('Any N ORDERBY N WHERE X name N') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
388 |
self.assertEqual(sorted(rset1.rows), rset1.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
389 |
rset = self.qexecute('Any N ORDERBY N LIMIT 5 OFFSET 1 WHERE X name N') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
390 |
self.assertEqual(rset.rows[0][0], rset1.rows[1][0]) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
391 |
self.assertEqual(len(rset), 5) |
1787 | 392 |
|
0 | 393 |
def test_select_5(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
394 |
rset = self.qexecute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup') |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
395 |
self.assertEqual(tuplify(rset.rows), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
396 |
[(2, 'guests',), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
397 |
(3, 'managers',), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
398 |
(4, 'owners',), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
399 |
(5, 'users',)]) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
400 |
self.assertEqual(rset.description, |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
401 |
[('CWGroup', 'String',), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
402 |
('CWGroup', 'String',), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
403 |
('CWGroup', 'String',), |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
404 |
('CWGroup', 'String',)]) |
1787 | 405 |
|
0 | 406 |
def test_select_6(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
407 |
self.qexecute("INSERT Personne X: X nom 'bidule'")[0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
408 |
rset = self.qexecute('Any Y where X name TMP, Y nom in (TMP, "bidule")') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
409 |
#self.assertEqual(rset.description, [('Personne',), ('Personne',)]) |
9312
88d40fbcc071
[test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents:
9281
diff
changeset
|
410 |
self.assertIn(('Personne',), rset.description) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
411 |
rset = self.qexecute('DISTINCT Any Y where X name TMP, Y nom in (TMP, "bidule")') |
9312
88d40fbcc071
[test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents:
9281
diff
changeset
|
412 |
self.assertIn(('Personne',), rset.description) |
1787 | 413 |
|
0 | 414 |
def test_select_not_attr(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
415 |
peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
416 |
seid = self.qexecute("INSERT Societe X: X nom 'chouette'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
417 |
rset = self.qexecute('Personne X WHERE NOT X nom "bidule"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
418 |
self.assertEqual(len(rset.rows), 0, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
419 |
rset = self.qexecute('Personne X WHERE NOT X nom "bid"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
420 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
421 |
self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
422 |
rset = self.qexecute('Personne X WHERE NOT X travaille S') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
423 |
self.assertEqual(len(rset.rows), 0, rset.rows) |
1787 | 424 |
|
0 | 425 |
def test_select_is_in(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
426 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
427 |
self.qexecute("INSERT Societe X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
428 |
self.assertEqual(len(self.qexecute("Any X WHERE X is IN (Personne, Societe)")), |
0 | 429 |
2) |
1787 | 430 |
|
0 | 431 |
def test_select_not_rel(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
432 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
433 |
self.qexecute("INSERT Societe X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
434 |
self.qexecute("INSERT Personne X: X nom 'autre'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
435 |
self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
436 |
rset = self.qexecute('Personne X WHERE NOT X travaille S') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
437 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
438 |
rset = self.qexecute('Personne X WHERE NOT X travaille S, S nom "chouette"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
439 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
1787 | 440 |
|
0 | 441 |
def test_select_nonregr_inlined(self): |
9832
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
442 |
self.qexecute("INSERT Note X: X para 'bidule'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
443 |
self.qexecute("INSERT Personne X: X nom 'chouette'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
444 |
self.qexecute("INSERT Personne X: X nom 'autre'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
445 |
self.qexecute("SET X ecrit_par P WHERE X para 'bidule', P nom 'chouette'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
446 |
rset = self.qexecute('Any U,T ORDERBY T DESC WHERE U is CWUser, ' |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
447 |
'N ecrit_par U, N type T')#, {'x': self.ueid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
448 |
self.assertEqual(len(rset.rows), 0) |
1787 | 449 |
|
0 | 450 |
def test_select_nonregr_edition_not(self): |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
451 |
groupeids = set((2, 3, 4)) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
452 |
groupreadperms = set(r[0] for r in self.qexecute('Any Y WHERE X name "CWGroup", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
453 |
'Y eid IN(2, 3, 4), X read_permission Y')) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
454 |
rset = self.qexecute('DISTINCT Any Y WHERE X is CWEType, X name "CWGroup", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
455 |
'Y eid IN(2, 3, 4), NOT X read_permission Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
456 |
self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms)) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
457 |
rset = self.qexecute('DISTINCT Any Y WHERE X name "CWGroup", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
458 |
'Y eid IN(2, 3, 4), NOT X read_permission Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
459 |
self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms)) |
1787 | 460 |
|
0 | 461 |
def test_select_outer_join(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
462 |
peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
463 |
peid2 = self.qexecute("INSERT Personne X: X nom 'autre'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
464 |
seid1 = self.qexecute("INSERT Societe X: X nom 'chouette'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
465 |
seid2 = self.qexecute("INSERT Societe X: X nom 'chouetos'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
466 |
rset = self.qexecute('Any X,S ORDERBY X WHERE X travaille S?') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
467 |
self.assertEqual(rset.rows, [[peid1, None], [peid2, None]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
468 |
self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
469 |
rset = self.qexecute('Any X,S ORDERBY X WHERE X travaille S?') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
470 |
self.assertEqual(rset.rows, [[peid1, seid1], [peid2, None]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
471 |
rset = self.qexecute('Any S,X ORDERBY S WHERE X? travaille S') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
472 |
self.assertEqual(rset.rows, [[seid1, peid1], [seid2, None]]) |
1787 | 473 |
|
0 | 474 |
def test_select_outer_join_optimized(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
475 |
peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
476 |
rset = self.qexecute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
477 |
self.assertEqual(rset.rows, [[peid1]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
478 |
rset = self.qexecute('Any X WHERE X eid %(x)s, X require_permission P?', |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
479 |
{'x':peid1}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
480 |
self.assertEqual(rset.rows, [[peid1]]) |
0 | 481 |
|
482 |
def test_select_left_outer_join(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
483 |
rset = self.qexecute('DISTINCT Any G WHERE U? in_group G') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
484 |
self.assertEqual(len(rset), 4) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
485 |
rset = self.qexecute('DISTINCT Any G WHERE U? in_group G, U eid %(x)s', |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
486 |
{'x': self.session.user.eid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
487 |
self.assertEqual(len(rset), 4) |
0 | 488 |
|
489 |
def test_select_ambigous_outer_join(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
490 |
teid = self.qexecute("INSERT Tag X: X name 'tag'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
491 |
self.qexecute("INSERT Tag X: X name 'tagbis'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
492 |
geid = self.qexecute("CWGroup G WHERE G name 'users'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
493 |
self.qexecute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s", |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
494 |
{'g': geid, 't': teid}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
495 |
rset = self.qexecute("Any GN,TN ORDERBY GN WHERE T? tags G, T name TN, G name GN") |
9312
88d40fbcc071
[test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents:
9281
diff
changeset
|
496 |
self.assertIn(['users', 'tag'], rset.rows) |
88d40fbcc071
[test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents:
9281
diff
changeset
|
497 |
self.assertIn(['activated', None], rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
498 |
rset = self.qexecute("Any GN,TN ORDERBY GN WHERE T tags G?, T name TN, G name GN") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
499 |
self.assertEqual(rset.rows, [[None, 'tagbis'], ['users', 'tag']]) |
1787 | 500 |
|
0 | 501 |
def test_select_not_inline_rel(self): |
9832
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
502 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
503 |
self.qexecute("INSERT Note X: X type 'a'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
504 |
self.qexecute("INSERT Note X: X type 'b'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
505 |
self.qexecute("SET X ecrit_par Y WHERE X type 'a', Y nom 'bidule'") |
17abdb7af3e6
[test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9831
diff
changeset
|
506 |
rset = self.qexecute('Note X WHERE NOT X ecrit_par P') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
507 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
1787 | 508 |
|
0 | 509 |
def test_select_not_unlinked_multiple_solutions(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
510 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
511 |
self.qexecute("INSERT Note X: X type 'a'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
512 |
self.qexecute("INSERT Note X: X type 'b'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
513 |
self.qexecute("SET Y evaluee X WHERE X type 'a', Y nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
514 |
rset = self.qexecute('Note X WHERE NOT Y evaluee X') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
515 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
0 | 516 |
|
4831
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4795
diff
changeset
|
517 |
def test_select_date_extraction(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
518 |
self.qexecute("INSERT Personne X: X nom 'foo', X datenaiss %(d)s", |
4831
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4795
diff
changeset
|
519 |
{'d': datetime(2001, 2,3, 12,13)}) |
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4795
diff
changeset
|
520 |
test_data = [('YEAR', 2001), ('MONTH', 2), ('DAY', 3), |
7904
f41bb38dda7c
[rql, sql] support for weekday function introduced in lgdp 1.7 (closes #1979717)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
521 |
('HOUR', 12), ('MINUTE', 13), ('WEEKDAY', 6)] |
4831
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4795
diff
changeset
|
522 |
for funcname, result in test_data: |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
523 |
rset = self.qexecute('Any %s(D) WHERE X is Personne, X datenaiss D' |
4831
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4795
diff
changeset
|
524 |
% funcname) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
525 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
526 |
self.assertEqual(rset.rows[0][0], result) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
527 |
self.assertEqual(rset.description, [('Int',)]) |
4831
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4795
diff
changeset
|
528 |
|
7257
beea955b45e2
[rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7211
diff
changeset
|
529 |
def test_regexp_based_pattern_matching(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
530 |
peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
531 |
peid2 = self.qexecute("INSERT Personne X: X nom 'cidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
532 |
rset = self.qexecute('Any X WHERE X is Personne, X nom REGEXP "^b"') |
7257
beea955b45e2
[rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7211
diff
changeset
|
533 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
beea955b45e2
[rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7211
diff
changeset
|
534 |
self.assertEqual(rset.rows[0][0], peid1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
535 |
rset = self.qexecute('Any X WHERE X is Personne, X nom REGEXP "idu"') |
7257
beea955b45e2
[rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7211
diff
changeset
|
536 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
beea955b45e2
[rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7211
diff
changeset
|
537 |
|
0 | 538 |
def test_select_aggregat_count(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
539 |
rset = self.qexecute('Any COUNT(X)') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
540 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
541 |
self.assertEqual(len(rset.rows[0]), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
542 |
self.assertEqual(rset.description, [('Int',)]) |
1787 | 543 |
|
0 | 544 |
def test_select_aggregat_sum(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
545 |
rset = self.qexecute('Any SUM(O) WHERE X ordernum O') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
546 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
547 |
self.assertEqual(len(rset.rows[0]), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
548 |
self.assertEqual(rset.description, [('Int',)]) |
1787 | 549 |
|
0 | 550 |
def test_select_aggregat_min(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
551 |
rset = self.qexecute('Any MIN(X) WHERE X is Personne') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
552 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
553 |
self.assertEqual(len(rset.rows[0]), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
554 |
self.assertEqual(rset.description, [('Personne',)]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
555 |
rset = self.qexecute('Any MIN(O) WHERE X ordernum O') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
556 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
557 |
self.assertEqual(len(rset.rows[0]), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
558 |
self.assertEqual(rset.description, [('Int',)]) |
1787 | 559 |
|
0 | 560 |
def test_select_aggregat_max(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
561 |
rset = self.qexecute('Any MAX(X) WHERE X is Personne') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
562 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
563 |
self.assertEqual(len(rset.rows[0]), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
564 |
self.assertEqual(rset.description, [('Personne',)]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
565 |
rset = self.qexecute('Any MAX(O) WHERE X ordernum O') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
566 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
567 |
self.assertEqual(len(rset.rows[0]), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
568 |
self.assertEqual(rset.description, [('Int',)]) |
0 | 569 |
|
570 |
def test_select_custom_aggregat_concat_string(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
571 |
rset = self.qexecute('Any GROUP_CONCAT(N) WHERE X is CWGroup, X name N') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
572 |
self.assertTrue(rset) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
573 |
self.assertEqual(sorted(rset[0][0].split(', ')), ['guests', 'managers', |
0 | 574 |
'owners', 'users']) |
575 |
||
576 |
def test_select_custom_regproc_limit_size(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
577 |
rset = self.qexecute('Any TEXT_LIMIT_SIZE(N, 3) WHERE X is CWGroup, X name N, X name "managers"') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
578 |
self.assertTrue(rset) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
579 |
self.assertEqual(rset[0][0], 'man...') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
580 |
self.qexecute("INSERT Basket X: X name 'bidule', X description '<b>hop hop</b>', X description_format 'text/html'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
581 |
rset = self.qexecute('Any LIMIT_SIZE(D, DF, 3) WHERE X is Basket, X description D, X description_format DF') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
582 |
self.assertTrue(rset) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
583 |
self.assertEqual(rset[0][0], 'hop...') |
0 | 584 |
|
585 |
def test_select_regproc_orderby(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
586 |
rset = self.qexecute('DISTINCT Any X,N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N, X name "managers"') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
587 |
self.assertEqual(len(rset), 1) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
588 |
self.assertEqual(rset[0][1], 'managers') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
589 |
rset = self.qexecute('Any X,N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N, NOT U in_group X, U login "admin"') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
590 |
self.assertEqual(len(rset), 3) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
591 |
self.assertEqual(rset[0][1], 'owners') |
1787 | 592 |
|
0 | 593 |
def test_select_aggregat_sort(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
594 |
rset = self.qexecute('Any G, COUNT(U) GROUPBY G ORDERBY 2 WHERE U in_group G') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
595 |
self.assertEqual(len(rset.rows), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
596 |
self.assertEqual(len(rset.rows[0]), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
597 |
self.assertEqual(rset.description[0], ('CWGroup', 'Int',)) |
0 | 598 |
|
599 |
def test_select_aggregat_having(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
600 |
rset = self.qexecute('Any N,COUNT(RDEF) GROUPBY N ORDERBY 2,N ' |
0 | 601 |
'WHERE RT name N, RDEF relation_type RT ' |
602 |
'HAVING COUNT(RDEF) > 10') |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
603 |
self.assertListEqual(rset.rows, |
9956
19a683a0047c
[CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
9850
diff
changeset
|
604 |
[[u'description_format', 13], |
19a683a0047c
[CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
9850
diff
changeset
|
605 |
[u'description', 14], |
9990 | 606 |
[u'name', 19], |
607 |
[u'created_by', 45], |
|
608 |
[u'creation_date', 45], |
|
609 |
[u'cw_source', 45], |
|
610 |
[u'cwuri', 45], |
|
611 |
[u'in_basket', 45], |
|
612 |
[u'is', 45], |
|
613 |
[u'is_instance_of', 45], |
|
614 |
[u'modification_date', 45], |
|
615 |
[u'owned_by', 45]]) |
|
0 | 616 |
|
617 |
def test_select_aggregat_having_dumb(self): |
|
618 |
# dumb but should not raise an error |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
619 |
rset = self.qexecute('Any U,COUNT(X) GROUPBY U ' |
0 | 620 |
'WHERE U eid %(x)s, X owned_by U ' |
621 |
'HAVING COUNT(X) > 10', {'x': self.ueid}) |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
622 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
623 |
self.assertEqual(rset.rows[0][0], self.ueid) |
0 | 624 |
|
5782
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
625 |
def test_select_having_non_aggregat_1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
626 |
rset = self.qexecute('Any L WHERE X login L, X creation_date CD ' |
5782
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
627 |
'HAVING YEAR(CD) = %s' % date.today().year) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
628 |
self.assertListEqual(rset.rows, |
5782
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
629 |
[[u'admin'], |
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
630 |
[u'anon']]) |
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
631 |
|
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
632 |
def test_select_having_non_aggregat_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
633 |
rset = self.qexecute('Any L GROUPBY L WHERE X login L, X in_group G, ' |
5782
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
634 |
'X creation_date CD HAVING YEAR(CD) = %s OR COUNT(G) > 1' |
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
635 |
% date.today().year) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
636 |
self.assertListEqual(rset.rows, |
5782
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
637 |
[[u'admin'], |
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
638 |
[u'anon']]) |
8ff48d1a319f
[rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5701
diff
changeset
|
639 |
|
0 | 640 |
def test_select_complex_sort(self): |
1950
ab7a41b2cd26
reactivate skipped tests due to sqlite bug which is now fixed (sqlite 3.6.13)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1949
diff
changeset
|
641 |
"""need sqlite including http://www.sqlite.org/cvstrac/tktview?tn=3773 fix""" |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
642 |
rset = self.qexecute('Any X ORDERBY X,D LIMIT 5 WHERE X creation_date D') |
0 | 643 |
result = rset.rows |
644 |
result.sort() |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
645 |
self.assertEqual(tuplify(result), [(1,), (2,), (3,), (4,), (5,)]) |
1787 | 646 |
|
0 | 647 |
def test_select_upper(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
648 |
rset = self.qexecute('Any X, UPPER(L) ORDERBY L WHERE X is CWUser, X login L') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
649 |
self.assertEqual(len(rset.rows), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
650 |
self.assertEqual(rset.rows[0][1], 'ADMIN') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
651 |
self.assertEqual(rset.description[0], ('CWUser', 'String',)) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
652 |
self.assertEqual(rset.rows[1][1], 'ANON') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
653 |
self.assertEqual(rset.description[1], ('CWUser', 'String',)) |
0 | 654 |
eid = rset.rows[0][0] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
655 |
rset = self.qexecute('Any UPPER(L) WHERE X eid %s, X login L'%eid) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
656 |
self.assertEqual(rset.rows[0][0], 'ADMIN') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
657 |
self.assertEqual(rset.description, [('String',)]) |
0 | 658 |
|
6081
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
659 |
def test_select_float_abs(self): |
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
660 |
# test positive number |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
661 |
eid = self.qexecute('INSERT Affaire A: A invoiced %(i)s', {'i': 1.2})[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
662 |
rset = self.qexecute('Any ABS(I) WHERE X eid %(x)s, X invoiced I', {'x': eid}) |
6366 | 663 |
self.assertEqual(rset.rows[0][0], 1.2) |
6081
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
664 |
# test negative number |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
665 |
eid = self.qexecute('INSERT Affaire A: A invoiced %(i)s', {'i': -1.2})[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
666 |
rset = self.qexecute('Any ABS(I) WHERE X eid %(x)s, X invoiced I', {'x': eid}) |
6366 | 667 |
self.assertEqual(rset.rows[0][0], 1.2) |
6081
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
668 |
|
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
669 |
def test_select_int_abs(self): |
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
670 |
# test positive number |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
671 |
eid = self.qexecute('INSERT Affaire A: A duration %(d)s', {'d': 12})[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
672 |
rset = self.qexecute('Any ABS(D) WHERE X eid %(x)s, X duration D', {'x': eid}) |
6366 | 673 |
self.assertEqual(rset.rows[0][0], 12) |
6081
ede33e6400ab
[forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
6050
diff
changeset
|
674 |
# test negative number |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
675 |
eid = self.qexecute('INSERT Affaire A: A duration %(d)s', {'d': -12})[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
676 |
rset = self.qexecute('Any ABS(D) WHERE X eid %(x)s, X duration D', {'x': eid}) |
6366 | 677 |
self.assertEqual(rset.rows[0][0], 12) |
678 |
||
0 | 679 |
## def test_select_simplified(self): |
680 |
## ueid = self.session.user.eid |
|
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
681 |
## rset = self.qexecute('Any L WHERE %s login L'%ueid) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
682 |
## self.assertEqual(rset.rows[0][0], 'admin') |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
683 |
## rset = self.qexecute('Any L WHERE %(x)s login L', {'x':ueid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
684 |
## self.assertEqual(rset.rows[0][0], 'admin') |
1787 | 685 |
|
0 | 686 |
def test_select_searchable_text_1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
687 |
rset = self.qexecute(u"INSERT Personne X: X nom 'bid�le'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
688 |
rset = self.qexecute(u"INSERT Societe X: X nom 'bid�le'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
689 |
rset = self.qexecute("INSERT Societe X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
690 |
rset = self.qexecute('Any X where X has_text %(text)s', {'text': u'bid�le'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
691 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
692 |
rset = self.qexecute(u'Any N where N has_text "bid�le"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
693 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
0 | 694 |
biduleeids = [r[0] for r in rset.rows] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
695 |
rset = self.qexecute(u'Any N where NOT N has_text "bid�le"') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
696 |
self.assertFalse([r[0] for r in rset.rows if r[0] in biduleeids]) |
0 | 697 |
# duh? |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
698 |
rset = self.qexecute('Any X WHERE X has_text %(text)s', {'text': u'�a'}) |
1787 | 699 |
|
0 | 700 |
def test_select_searchable_text_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
701 |
rset = self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
702 |
rset = self.qexecute("INSERT Personne X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
703 |
rset = self.qexecute("INSERT Societe X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
704 |
rset = self.qexecute('Personne N where N has_text "bidule"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
705 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
1787 | 706 |
|
0 | 707 |
def test_select_searchable_text_3(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
708 |
rset = self.qexecute("INSERT Personne X: X nom 'bidule', X sexe 'M'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
709 |
rset = self.qexecute("INSERT Personne X: X nom 'bidule', X sexe 'F'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
710 |
rset = self.qexecute("INSERT Societe X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
711 |
rset = self.qexecute('Any X where X has_text "bidule" and X sexe "M"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
712 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
1787 | 713 |
|
0 | 714 |
def test_select_multiple_searchable_text(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
715 |
self.qexecute(u"INSERT Personne X: X nom 'bid�le'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
716 |
self.qexecute("INSERT Societe X: X nom 'chouette', S travaille X") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
717 |
self.qexecute(u"INSERT Personne X: X nom 'bid�le'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
718 |
rset = self.qexecute('Personne X WHERE X has_text %(text)s, X travaille S, S has_text %(text2)s', |
0 | 719 |
{'text': u'bid�le', |
720 |
'text2': u'chouette',} |
|
721 |
) |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
722 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
1787 | 723 |
|
0 | 724 |
def test_select_no_descr(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
725 |
rset = self.qexecute('Any X WHERE X is CWGroup', build_descr=0) |
0 | 726 |
rset.rows.sort() |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
727 |
self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)]) |
9331
c6f54ed6b60a
[rset] Fix regression with rset copying (closes #3344410)
Julien Cristau <julien.cristau@logilab.fr>
parents:
9312
diff
changeset
|
728 |
self.assertEqual(rset.description, ()) |
0 | 729 |
|
730 |
def test_select_limit_offset(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
731 |
rset = self.qexecute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N') |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
732 |
self.assertEqual(tuplify(rset.rows), [(2,), (3,)]) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
733 |
self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',)]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
734 |
rset = self.qexecute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N') |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
735 |
self.assertEqual(tuplify(rset.rows), [(4,), (5,)]) |
1787 | 736 |
|
4467
0e73d299730a
fix long-waiting symetric typo: should be spelled symmetric. Add auto database migration on schema deserialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4204
diff
changeset
|
737 |
def test_select_symmetric(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
738 |
self.qexecute("INSERT Personne X: X nom 'machin'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
739 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
740 |
self.qexecute("INSERT Personne X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
741 |
self.qexecute("INSERT Personne X: X nom 'trucmuche'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
742 |
self.qexecute("SET X connait Y WHERE X nom 'chouette', Y nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
743 |
self.qexecute("SET X connait Y WHERE X nom 'machin', Y nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
744 |
rset = self.qexecute('Any P WHERE P connait P2') |
9518
54ead5f372bb
[rql2sql] remove special behaviour of symmetric relation vs DISTINCT
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9375
diff
changeset
|
745 |
self.assertEqual(len(rset.rows), 4, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
746 |
rset = self.qexecute('Any P WHERE NOT P connait P2') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
747 |
self.assertEqual(len(rset.rows), 1, rset.rows) # trucmuche |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
748 |
rset = self.qexecute('Any P WHERE P connait P2, P2 nom "bidule"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
749 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
750 |
rset = self.qexecute('Any P WHERE P2 connait P, P2 nom "bidule"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
751 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
752 |
rset = self.qexecute('Any P WHERE P connait P2, P2 nom "chouette"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
753 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
754 |
rset = self.qexecute('Any P WHERE P2 connait P, P2 nom "chouette"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
755 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
1787 | 756 |
|
0 | 757 |
def test_select_inline(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
758 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
759 |
self.qexecute("INSERT Note X: X type 'a'") |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
760 |
self.qexecute("SET X ecrit_par Y WHERE X type 'a', Y nom 'bidule'") |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
761 |
rset = self.qexecute('Any N where N ecrit_par X, X nom "bidule"') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
762 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
1787 | 763 |
|
0 | 764 |
def test_select_creation_date(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
765 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
766 |
rset = self.qexecute('Any D WHERE X nom "bidule", X creation_date D') |
0 | 767 |
self.assertEqual(len(rset.rows), 1) |
768 |
||
769 |
def test_select_or_relation(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
770 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
771 |
self.qexecute("INSERT Personne X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
772 |
self.qexecute("INSERT Societe X: X nom 'logilab'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
773 |
self.qexecute("INSERT Societe X: X nom 'caesium'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
774 |
self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'logilab'") |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
775 |
rset = self.qexecute('DISTINCT Any P WHERE P travaille S1 OR P travaille S2, ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
776 |
'S1 nom "logilab", S2 nom "caesium"') |
0 | 777 |
self.assertEqual(len(rset.rows), 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
778 |
self.qexecute("SET P travaille S WHERE P nom 'chouette', S nom 'caesium'") |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
779 |
rset = self.qexecute('DISTINCT Any P WHERE P travaille S1 OR P travaille S2, ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
780 |
'S1 nom "logilab", S2 nom "caesium"') |
0 | 781 |
self.assertEqual(len(rset.rows), 2) |
1787 | 782 |
|
0 | 783 |
def test_select_or_sym_relation(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
784 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
785 |
self.qexecute("INSERT Personne X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
786 |
self.qexecute("INSERT Personne X: X nom 'truc'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
787 |
self.qexecute("SET P connait S WHERE P nom 'bidule', S nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
788 |
rset = self.qexecute('DISTINCT Any P WHERE S connait P, S nom "chouette"') |
0 | 789 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
790 |
rset = self.qexecute('DISTINCT Any P WHERE P connait S or S connait P, S nom "chouette"') |
0 | 791 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
792 |
self.qexecute("SET P connait S WHERE P nom 'chouette', S nom 'truc'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
793 |
rset = self.qexecute('DISTINCT Any P WHERE S connait P, S nom "chouette"') |
0 | 794 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
795 |
rset = self.qexecute('DISTINCT Any P WHERE P connait S OR S connait P, S nom "chouette"') |
0 | 796 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
1787 | 797 |
|
0 | 798 |
def test_select_follow_relation(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
799 |
self.qexecute("INSERT Affaire X: X sujet 'cool'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
800 |
self.qexecute("INSERT Societe X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
801 |
self.qexecute("SET A concerne S WHERE A is Affaire, S is Societe") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
802 |
self.qexecute("INSERT Note X: X para 'truc'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
803 |
self.qexecute("SET S evaluee N WHERE S is Societe, N is Note") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
804 |
self.qexecute("INSERT Societe X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
805 |
self.qexecute("INSERT Note X: X para 'troc'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
806 |
self.qexecute("SET S evaluee N WHERE S nom 'bidule', N para 'troc'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
807 |
rset = self.qexecute('DISTINCT Any A,N WHERE A concerne S, S evaluee N') |
0 | 808 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
809 |
||
810 |
def test_select_ordered_distinct_1(self): |
|
6194
2a1f8cabbe6a
[querier test] remove some actually bad tests that were passing thanks to a sqlite bug
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6189
diff
changeset
|
811 |
self.assertRaises(BadRQLQuery, |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
812 |
self.qexecute, 'DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R') |
0 | 813 |
|
814 |
def test_select_ordered_distinct_2(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
815 |
self.qexecute("INSERT Affaire X: X sujet 'minor'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
816 |
self.qexecute("INSERT Affaire X: X sujet 'zou'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
817 |
self.qexecute("INSERT Affaire X: X sujet 'abcd'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
818 |
rset = self.qexecute('DISTINCT Any S ORDERBY S WHERE A is Affaire, A sujet S') |
6196 | 819 |
self.assertEqual(rset.rows, [['abcd'], ['minor'], ['zou']]) |
1787 | 820 |
|
0 | 821 |
def test_select_ordered_distinct_3(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
822 |
rset = self.qexecute('DISTINCT Any N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N') |
0 | 823 |
self.assertEqual(rset.rows, [['owners'], ['guests'], ['users'], ['managers']]) |
824 |
||
825 |
def test_select_or_value(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
826 |
rset = self.qexecute('Any U WHERE U in_group G, G name "owners" OR G name "users"') |
0 | 827 |
self.assertEqual(len(rset.rows), 0) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
828 |
rset = self.qexecute('Any U WHERE U in_group G, G name "guests" OR G name "managers"') |
0 | 829 |
self.assertEqual(len(rset.rows), 2) |
830 |
||
831 |
def test_select_explicit_eid(self): |
|
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
832 |
rset = self.qexecute('Any X,E WHERE X owned_by U, X eid E, U eid %(u)s', |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
833 |
{'u': self.session.user.eid}) |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
834 |
self.assertTrue(rset) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
835 |
self.assertEqual(rset.description[0][1], 'Int') |
1787 | 836 |
|
0 | 837 |
# def test_select_rewritten_optional(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
838 |
# eid = self.qexecute("INSERT Affaire X: X sujet 'cool'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
839 |
# rset = self.qexecute('Any X WHERE X eid %(x)s, EXISTS(X owned_by U) OR EXISTS(X concerne S?, S owned_by U)', |
0 | 840 |
# {'x': eid}, 'x') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
841 |
# self.assertEqual(rset.rows, [[eid]]) |
1787 | 842 |
|
0 | 843 |
def test_today_bug(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
844 |
self.qexecute("INSERT Tag X: X name 'bidule', X creation_date NOW") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
845 |
self.qexecute("INSERT Tag Y: Y name 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
846 |
rset = self.qexecute("Any D WHERE X name in ('bidule', 'toto') , X creation_date D") |
9312
88d40fbcc071
[test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents:
9281
diff
changeset
|
847 |
self.assertIsInstance(rset.rows[0][0], datetime) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
848 |
rset = self.qexecute('Tag X WHERE X creation_date TODAY') |
0 | 849 |
self.assertEqual(len(rset.rows), 2) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
850 |
rset = self.qexecute('Any MAX(D) WHERE X is Tag, X creation_date D') |
9312
88d40fbcc071
[test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents:
9281
diff
changeset
|
851 |
self.assertIsInstance(rset[0][0], datetime) |
0 | 852 |
|
853 |
def test_today(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
854 |
self.qexecute("INSERT Tag X: X name 'bidule', X creation_date TODAY") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
855 |
self.qexecute("INSERT Tag Y: Y name 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
856 |
rset = self.qexecute('Tag X WHERE X creation_date TODAY') |
0 | 857 |
self.assertEqual(len(rset.rows), 2) |
858 |
||
859 |
def test_select_boolean(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
860 |
rset = self.qexecute('Any N WHERE X is CWEType, X name N, X final %(val)s', |
0 | 861 |
{'val': True}) |
7484
45a350d6b22f
[repo test] fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7398
diff
changeset
|
862 |
self.assertEqual(sorted(r[0] for r in rset.rows), ['BigInt', 'Boolean', 'Bytes', |
7148
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
863 |
'Date', 'Datetime', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
864 |
'Decimal', 'Float', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
865 |
'Int', 'Interval', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
866 |
'Password', 'String', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
867 |
'TZDatetime', 'TZTime', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
868 |
'Time']) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
869 |
rset = self.qexecute('Any N WHERE X is CWEType, X name N, X final TRUE') |
7484
45a350d6b22f
[repo test] fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7398
diff
changeset
|
870 |
self.assertEqual(sorted(r[0] for r in rset.rows), ['BigInt', 'Boolean', 'Bytes', |
7148
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
871 |
'Date', 'Datetime', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
872 |
'Decimal', 'Float', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
873 |
'Int', 'Interval', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
874 |
'Password', 'String', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
875 |
'TZDatetime', 'TZTime', |
753b9b48b41e
more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7088
diff
changeset
|
876 |
'Time']) |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
877 |
with self.session.new_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
878 |
cnx.create_entity('Personne', nom=u'louis', test=True) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
879 |
self.assertEqual(len(cnx.execute('Any X WHERE X test %(val)s', {'val': True})), 1) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
880 |
self.assertEqual(len(cnx.execute('Any X WHERE X test TRUE')), 1) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
881 |
self.assertEqual(len(cnx.execute('Any X WHERE X test %(val)s', {'val': False})), 0) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
882 |
self.assertEqual(len(cnx.execute('Any X WHERE X test FALSE')), 0) |
1787 | 883 |
|
0 | 884 |
def test_select_constant(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
885 |
rset = self.qexecute('Any X, "toto" ORDERBY X WHERE X is CWGroup') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
886 |
self.assertEqual(rset.rows, |
10764
aa3a7bd5f651
[server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents:
10763
diff
changeset
|
887 |
[list(x) for x in zip((2,3,4,5), ('toto','toto','toto','toto',))]) |
10763
5f9527b21bc0
[server/test] to fold, unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10762
diff
changeset
|
888 |
self.assertIsInstance(rset[0][1], text_type) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
889 |
self.assertEqual(rset.description, |
10764
aa3a7bd5f651
[server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents:
10763
diff
changeset
|
890 |
list(zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'), |
aa3a7bd5f651
[server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents:
10763
diff
changeset
|
891 |
('String', 'String', 'String', 'String',)))) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
892 |
rset = self.qexecute('Any X, %(value)s ORDERBY X WHERE X is CWGroup', {'value': 'toto'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
893 |
self.assertEqual(rset.rows, |
10764
aa3a7bd5f651
[server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents:
10763
diff
changeset
|
894 |
list(map(list, zip((2,3,4,5), ('toto','toto','toto','toto',))))) |
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
895 |
self.assertIsInstance(rset[0][1], text_type) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
896 |
self.assertEqual(rset.description, |
10764
aa3a7bd5f651
[server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents:
10763
diff
changeset
|
897 |
list(zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'), |
aa3a7bd5f651
[server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents:
10763
diff
changeset
|
898 |
('String', 'String', 'String', 'String',)))) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
899 |
rset = self.qexecute('Any X,GN WHERE X is CWUser, G is CWGroup, X login "syt", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
900 |
'X in_group G, G name GN') |
0 | 901 |
|
902 |
def test_select_union(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
903 |
rset = self.qexecute('Any X,N ORDERBY N WITH X,N BEING ' |
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2608
diff
changeset
|
904 |
'((Any X,N WHERE X name N, X transition_of WF, WF workflow_of E, E name %(name)s)' |
0 | 905 |
' UNION ' |
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2608
diff
changeset
|
906 |
'(Any X,N WHERE X name N, X state_of WF, WF workflow_of E, E name %(name)s))', |
1398
5fe84a5f7035
rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents:
1263
diff
changeset
|
907 |
{'name': 'CWUser'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
908 |
self.assertEqual([x[1] for x in rset.rows], |
0 | 909 |
['activate', 'activated', 'deactivate', 'deactivated']) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
910 |
self.assertEqual(rset.description, |
0 | 911 |
[('Transition', 'String'), ('State', 'String'), |
912 |
('Transition', 'String'), ('State', 'String')]) |
|
1787 | 913 |
|
0 | 914 |
def test_select_union_aggregat(self): |
915 |
# meaningless, the goal in to have group by done on different attribute |
|
916 |
# for each sub-query |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
917 |
self.qexecute('(Any N,COUNT(X) GROUPBY N WHERE X name N, X is State)' |
0 | 918 |
' UNION ' |
919 |
'(Any N,COUNT(X) GROUPBY N ORDERBY 2 WHERE X login N)') |
|
1787 | 920 |
|
0 | 921 |
def test_select_union_aggregat_independant_group(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
922 |
with self.session.new_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
923 |
cnx.execute('INSERT State X: X name "hop"') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
924 |
cnx.execute('INSERT State X: X name "hop"') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
925 |
cnx.execute('INSERT Transition X: X name "hop"') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
926 |
cnx.execute('INSERT Transition X: X name "hop"') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
927 |
rset = cnx.execute('Any N,NX ORDERBY 2 WITH N,NX BEING ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
928 |
'((Any N,COUNT(X) GROUPBY N WHERE X name N, ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
929 |
' X is State HAVING COUNT(X)>1)' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
930 |
' UNION ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
931 |
'(Any N,COUNT(X) GROUPBY N WHERE X name N, ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
932 |
' X is Transition HAVING COUNT(X)>1))') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
933 |
self.assertEqual(rset.rows, [[u'hop', 2], [u'hop', 2]]) |
1787 | 934 |
|
0 | 935 |
def test_select_union_selection_with_diff_variables(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
936 |
rset = self.qexecute('(Any N WHERE X name N, X is State)' |
0 | 937 |
' UNION ' |
938 |
'(Any NN WHERE XX name NN, XX is Transition)') |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
939 |
self.assertEqual(sorted(r[0] for r in rset.rows), |
0 | 940 |
['abort', 'activate', 'activated', 'ben non', |
941 |
'deactivate', 'deactivated', 'done', 'en cours', |
|
942 |
'end', 'finie', 'markasdone', 'pitetre', 'redoit', |
|
943 |
'start', 'todo']) |
|
1787 | 944 |
|
5701
41119f034735
[querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5657
diff
changeset
|
945 |
def test_select_union_description_diff_var(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
946 |
eid1 = self.qexecute('CWGroup X WHERE X name "managers"')[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
947 |
eid2 = self.qexecute('CWUser X WHERE X login "admin"')[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
948 |
rset = self.qexecute('(Any X WHERE X eid %(x)s)' |
5701
41119f034735
[querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5657
diff
changeset
|
949 |
' UNION ' |
41119f034735
[querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5657
diff
changeset
|
950 |
'(Any Y WHERE Y eid %(y)s)', |
41119f034735
[querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5657
diff
changeset
|
951 |
{'x': eid1, 'y': eid2}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
952 |
self.assertEqual(rset.description[:], [('CWGroup',), ('CWUser',)]) |
5701
41119f034735
[querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5657
diff
changeset
|
953 |
|
0 | 954 |
def test_exists(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
955 |
geid = self.qexecute("INSERT CWGroup X: X name 'lulufanclub'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
956 |
self.qexecute("SET U in_group G WHERE G name 'lulufanclub'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
957 |
peid = self.qexecute("INSERT Personne X: X prenom 'lulu', X nom 'petit'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
958 |
rset = self.qexecute("Any X WHERE X prenom 'lulu'," |
0 | 959 |
"EXISTS (U in_group G, G name 'lulufanclub' OR G name 'managers');") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
960 |
self.assertEqual(rset.rows, [[peid]]) |
0 | 961 |
|
962 |
def test_identity(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
963 |
eid = self.qexecute('Any X WHERE X identity Y, Y eid 1')[0][0] |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
964 |
self.assertEqual(eid, 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
965 |
eid = self.qexecute('Any X WHERE Y identity X, Y eid 1')[0][0] |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
966 |
self.assertEqual(eid, 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
967 |
login = self.qexecute('Any L WHERE X login "admin", X identity Y, Y login L')[0][0] |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
968 |
self.assertEqual(login, 'admin') |
0 | 969 |
|
970 |
def test_select_date_mathexp(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
971 |
rset = self.qexecute('Any X, TODAY - CD WHERE X is CWUser, X creation_date CD') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
972 |
self.assertTrue(rset) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
973 |
self.assertEqual(rset.description[0][1], 'Interval') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
974 |
eid, = self.qexecute("INSERT Personne X: X nom 'bidule'")[0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
975 |
rset = self.qexecute('Any X, NOW - CD WHERE X is Personne, X creation_date CD') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7713
diff
changeset
|
976 |
self.assertEqual(rset.description[0][1], 'Interval') |
0 | 977 |
|
6050
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
978 |
def test_select_subquery_aggregat_1(self): |
0 | 979 |
# percent users by groups |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
980 |
self.qexecute('SET X in_group G WHERE G name "users"') |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
981 |
rset = self.qexecute('Any GN, COUNT(X)*100/T GROUPBY GN ORDERBY 2,1' |
0 | 982 |
' WHERE G name GN, X in_group G' |
1398
5fe84a5f7035
rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents:
1263
diff
changeset
|
983 |
' WITH T BEING (Any COUNT(U) WHERE U is CWUser)') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
984 |
self.assertEqual(rset.rows, [[u'guests', 50], [u'managers', 50], [u'users', 100]]) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
985 |
self.assertEqual(rset.description, [('String', 'Int'), ('String', 'Int'), ('String', 'Int')]) |
0 | 986 |
|
6050
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
987 |
def test_select_subquery_aggregat_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
988 |
expected = self.qexecute('Any X, 0, COUNT(T) GROUPBY X ' |
6050
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
989 |
'WHERE X is Workflow, T transition_of X').rows |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
990 |
rset = self.qexecute(''' |
6050
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
991 |
Any P1,B,E WHERE P1 identity P2 WITH |
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
992 |
P1,B BEING (Any P,COUNT(T) GROUPBY P WHERE P is Workflow, T is Transition, |
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
993 |
T? transition_of P, T type "auto"), |
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
994 |
P2,E BEING (Any P,COUNT(T) GROUPBY P WHERE P is Workflow, T is Transition, |
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
995 |
T? transition_of P, T type "normal")''') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
996 |
self.assertEqual(sorted(rset.rows), sorted(expected)) |
6050
20af96a6fffc
[rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5811
diff
changeset
|
997 |
|
0 | 998 |
def test_select_subquery_const(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
999 |
rset = self.qexecute('Any X WITH X BEING ((Any NULL) UNION (Any "toto"))') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1000 |
self.assertEqual(rset.rows, [[None], ['toto']]) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1001 |
self.assertEqual(rset.description, [(None,), ('String',)]) |
1787 | 1002 |
|
0 | 1003 |
# insertion queries tests ################################################# |
1787 | 1004 |
|
0 | 1005 |
def test_insert_is(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1006 |
eid, = self.qexecute("INSERT Personne X: X nom 'bidule'")[0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1007 |
etype, = self.qexecute("Any TN WHERE X is T, X eid %s, T name TN" % eid)[0] |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1008 |
self.assertEqual(etype, 'Personne') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1009 |
self.qexecute("INSERT Personne X: X nom 'managers'") |
1787 | 1010 |
|
0 | 1011 |
def test_insert_1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1012 |
rset = self.qexecute("INSERT Personne X: X nom 'bidule'") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1013 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1014 |
self.assertEqual(rset.description, [('Personne',)]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1015 |
rset = self.qexecute('Personne X WHERE X nom "bidule"') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1016 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1017 |
self.assertEqual(rset.description, [('Personne',)]) |
0 | 1018 |
|
1019 |
def test_insert_1_multiple(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1020 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1021 |
self.qexecute("INSERT Personne X: X nom 'chouette'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1022 |
rset = self.qexecute("INSERT Societe Y: Y nom N, P travaille Y WHERE P nom N") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1023 |
self.assertEqual(len(rset.rows), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1024 |
self.assertEqual(rset.description, [('Societe',), ('Societe',)]) |
0 | 1025 |
|
1026 |
def test_insert_2(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1027 |
rset = self.qexecute("INSERT Personne X, Personne Y: X nom 'bidule', Y nom 'tutu'") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1028 |
self.assertEqual(rset.description, [('Personne', 'Personne')]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1029 |
rset = self.qexecute('Personne X WHERE X nom "bidule" or X nom "tutu"') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1030 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1031 |
self.assertEqual(rset.description, [('Personne',), ('Personne',)]) |
0 | 1032 |
|
1033 |
def test_insert_3(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1034 |
self.qexecute("INSERT Personne X: X nom Y WHERE U login 'admin', U login Y") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1035 |
rset = self.qexecute('Personne X WHERE X nom "admin"') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1036 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1037 |
self.assertEqual(rset.description, [('Personne',)]) |
0 | 1038 |
|
1039 |
def test_insert_4(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1040 |
self.qexecute("INSERT Societe Y: Y nom 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1041 |
self.qexecute("INSERT Personne X: X nom 'bidule', X travaille Y WHERE Y nom 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1042 |
rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1043 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1044 |
self.assertEqual(rset.description, [('Personne', 'Societe',)]) |
1787 | 1045 |
|
0 | 1046 |
def test_insert_4bis(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1047 |
peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1048 |
seid = self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s", |
0 | 1049 |
{'x': str(peid)})[0][0] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1050 |
self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 1) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1051 |
self.qexecute("INSERT Personne X: X nom 'chouette', X travaille Y WHERE Y eid %(x)s", |
0 | 1052 |
{'x': str(seid)}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1053 |
self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 2) |
1787 | 1054 |
|
0 | 1055 |
def test_insert_4ter(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1056 |
peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1057 |
seid = self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s", |
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
1058 |
{'x': text_type(peid)})[0][0] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1059 |
self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 1) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1060 |
self.qexecute("INSERT Personne X: X nom 'chouette', X travaille Y WHERE Y eid %(x)s", |
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
1061 |
{'x': text_type(seid)}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1062 |
self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 2) |
0 | 1063 |
|
1064 |
def test_insert_5(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1065 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1066 |
self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1067 |
rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1068 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1069 |
self.assertEqual(rset.description, [('Personne', 'Societe',)]) |
0 | 1070 |
|
4765 | 1071 |
def test_insert_5bis(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1072 |
peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1073 |
self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s", |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
1074 |
{'x': peid}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1075 |
rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1076 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1077 |
self.assertEqual(rset.description, [('Personne', 'Societe',)]) |
4765 | 1078 |
|
0 | 1079 |
def test_insert_6(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1080 |
self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto', X travaille Y") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1081 |
rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1082 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1083 |
self.assertEqual(rset.description, [('Personne', 'Societe',)]) |
0 | 1084 |
|
1085 |
def test_insert_7(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1086 |
self.qexecute("INSERT Personne X, Societe Y: X nom N, Y nom 'toto', " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1087 |
"X travaille Y WHERE U login 'admin', U login N") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1088 |
rset = self.qexecute('Any X, Y WHERE X nom "admin", Y nom "toto", X travaille Y') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1089 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1090 |
self.assertEqual(rset.description, [('Personne', 'Societe',)]) |
0 | 1091 |
|
5657
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1092 |
def test_insert_7_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1093 |
self.qexecute("INSERT Personne X, Societe Y: X nom N, Y nom 'toto', " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1094 |
"X travaille Y WHERE U login N") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1095 |
rset = self.qexecute('Any X, Y WHERE Y nom "toto", X travaille Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1096 |
self.assertEqual(len(rset), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1097 |
self.assertEqual(rset.description, [('Personne', 'Societe',), |
5657
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1098 |
('Personne', 'Societe',)]) |
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1099 |
|
0 | 1100 |
def test_insert_8(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1101 |
self.qexecute("INSERT Societe Y, Personne X: Y nom N, X nom 'toto', X travaille Y " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1102 |
"WHERE U login 'admin', U login N") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1103 |
rset = self.qexecute('Any X, Y WHERE X nom "toto", Y nom "admin", X travaille Y') |
10600
180aa08cad48
[tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10591
diff
changeset
|
1104 |
self.assertTrue(rset.rows) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1105 |
self.assertEqual(rset.description, [('Personne', 'Societe',)]) |
0 | 1106 |
|
5657
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1107 |
def test_insert_9(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1108 |
self.qexecute("INSERT Societe X: X nom 'Lo'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1109 |
self.qexecute("INSERT Societe X: X nom 'Gi'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1110 |
self.qexecute("INSERT SubDivision X: X nom 'Lab'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1111 |
rset = self.qexecute("INSERT Personne X: X nom N, X travaille Y, X travaille_subdivision Z " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1112 |
"WHERE Y is Societe, Z is SubDivision, Y nom N") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1113 |
self.assertEqual(len(rset), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1114 |
self.assertEqual(rset.description, [('Personne',), ('Personne',)]) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1115 |
# self.assertSetEqual(set(x.nom for x in rset.entities()), |
5657
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1116 |
# ['Lo', 'Gi']) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1117 |
# self.assertSetEqual(set(y.nom for x in rset.entities() for y in x.travaille), |
5657
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1118 |
# ['Lo', 'Gi']) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1119 |
# self.assertEqual([y.nom for x in rset.entities() for y in x.travaille_subdivision], |
5657
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1120 |
# ['Lab', 'Lab']) |
8f56691f01de
[querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
1121 |
|
0 | 1122 |
def test_insert_query_error(self): |
1123 |
self.assertRaises(Exception, |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1124 |
self.qexecute, |
0 | 1125 |
"INSERT Personne X: X nom 'toto', X is Personne") |
1126 |
self.assertRaises(Exception, |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1127 |
self.qexecute, |
0 | 1128 |
"INSERT Personne X: X nom 'toto', X is_instance_of Personne") |
1129 |
self.assertRaises(QueryError, |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1130 |
self.qexecute, |
0 | 1131 |
"INSERT Personne X: X nom 'toto', X has_text 'tutu'") |
1132 |
||
1133 |
self.assertRaises(QueryError, |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1134 |
self.qexecute, |
1398
5fe84a5f7035
rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents:
1263
diff
changeset
|
1135 |
"INSERT CWUser X: X login 'toto', X eid %s" % cnx.user(self.session).eid) |
0 | 1136 |
|
1137 |
def test_insertion_description_with_where(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1138 |
rset = self.qexecute('INSERT CWUser E, EmailAddress EM: E login "X", E upassword "X", ' |
0 | 1139 |
'E primary_email EM, EM address "X", E in_group G ' |
1140 |
'WHERE G name "managers"') |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1141 |
self.assertEqual(list(rset.description[0]), ['CWUser', 'EmailAddress']) |
1787 | 1142 |
|
0 | 1143 |
# deletion queries tests ################################################## |
1144 |
||
1145 |
def test_delete_1(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1146 |
self.qexecute("INSERT Personne Y: Y nom 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1147 |
rset = self.qexecute('Personne X WHERE X nom "toto"') |
0 | 1148 |
self.assertEqual(len(rset.rows), 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1149 |
drset = self.qexecute("DELETE Personne Y WHERE Y nom 'toto'") |
3648
665c37544060
on entity deletion query, return eids of deleted entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3589
diff
changeset
|
1150 |
self.assertEqual(drset.rows, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1151 |
rset = self.qexecute('Personne X WHERE X nom "toto"') |
0 | 1152 |
self.assertEqual(len(rset.rows), 0) |
1787 | 1153 |
|
0 | 1154 |
def test_delete_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1155 |
rset = self.qexecute("INSERT Personne X, Personne Y, Societe Z : " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1156 |
"X nom 'syt', Y nom 'adim', Z nom 'Logilab', X travaille Z, Y travaille Z") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1157 |
self.assertEqual(len(rset), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1158 |
self.assertEqual(len(rset[0]), 3) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1159 |
self.assertEqual(rset.description[0], ('Personne', 'Personne', 'Societe')) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1160 |
self.assertEqual(self.qexecute('Any N WHERE X nom N, X eid %s'% rset[0][0])[0][0], 'syt') |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1161 |
rset = self.qexecute('Personne X WHERE X travaille Y, Y nom "Logilab"') |
0 | 1162 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1163 |
self.qexecute("DELETE X travaille Y WHERE X is Personne, Y nom 'Logilabo'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1164 |
rset = self.qexecute('Personne X WHERE X travaille Y, Y nom "Logilab"') |
0 | 1165 |
self.assertEqual(len(rset.rows), 2, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1166 |
self.qexecute("DELETE X travaille Y WHERE X is Personne, Y nom 'Logilab'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1167 |
rset = self.qexecute('Personne X WHERE X travaille Y, Y nom "Logilab"') |
0 | 1168 |
self.assertEqual(len(rset.rows), 0, rset.rows) |
1169 |
||
1170 |
def test_delete_3(self): |
|
4674
3d509dbb473a
[test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4467
diff
changeset
|
1171 |
s = self.user_groups_session('users') |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1172 |
with s.new_cnx() as cnx: |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1173 |
peid, = self.o.execute(cnx, "INSERT Personne P: P nom 'toto'")[0] |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1174 |
seid, = self.o.execute(cnx, "INSERT Societe S: S nom 'logilab'")[0] |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1175 |
self.o.execute(cnx, "SET P travaille S") |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1176 |
cnx.commit() |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1177 |
rset = self.qexecute('Personne P WHERE P travaille S') |
0 | 1178 |
self.assertEqual(len(rset.rows), 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1179 |
self.qexecute("DELETE X travaille Y WHERE X eid %s, Y eid %s" % (peid, seid)) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1180 |
rset = self.qexecute('Personne P WHERE P travaille S') |
0 | 1181 |
self.assertEqual(len(rset.rows), 0) |
1182 |
||
4467
0e73d299730a
fix long-waiting symetric typo: should be spelled symmetric. Add auto database migration on schema deserialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4204
diff
changeset
|
1183 |
def test_delete_symmetric(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1184 |
teid1 = self.qexecute("INSERT Folder T: T name 'toto'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1185 |
teid2 = self.qexecute("INSERT Folder T: T name 'tutu'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1186 |
self.qexecute('SET X see_also Y WHERE X eid %s, Y eid %s' % (teid1, teid2)) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1187 |
rset = self.qexecute('Any X,Y WHERE X see_also Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1188 |
self.assertEqual(len(rset) , 2, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1189 |
self.qexecute('DELETE X see_also Y WHERE X eid %s, Y eid %s' % (teid1, teid2)) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1190 |
rset = self.qexecute('Any X,Y WHERE X see_also Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1191 |
self.assertEqual(len(rset) , 0) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1192 |
self.qexecute('SET X see_also Y WHERE X eid %s, Y eid %s' % (teid1, teid2)) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1193 |
rset = self.qexecute('Any X,Y WHERE X see_also Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1194 |
self.assertEqual(len(rset) , 2) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1195 |
self.qexecute('DELETE X see_also Y WHERE X eid %s, Y eid %s' % (teid2, teid1)) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1196 |
rset = self.qexecute('Any X,Y WHERE X see_also Y') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1197 |
self.assertEqual(len(rset) , 0) |
0 | 1198 |
|
1199 |
def test_nonregr_delete_cache(self): |
|
1200 |
"""test that relations are properly cleaned when an entity is deleted |
|
1201 |
(using cachekey on sql generation returned always the same query for an eid, |
|
1202 |
whatever the relation) |
|
1203 |
""" |
|
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1204 |
aeid, = self.qexecute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"')[0] |
0 | 1205 |
# XXX would be nice if the rql below was enough... |
1206 |
#'INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y' |
|
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1207 |
eeid, = self.qexecute('INSERT Email X: X messageid "<1234>", X subject "test", ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1208 |
'X sender Y, X recipients Y WHERE Y is EmailAddress')[0] |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1209 |
self.qexecute("DELETE Email X") |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1210 |
with self.session.new_cnx() as cnx: |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1211 |
sqlc = cnx.cnxset.cu |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1212 |
sqlc.execute('SELECT * FROM recipients_relation') |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1213 |
self.assertEqual(len(sqlc.fetchall()), 0) |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1214 |
sqlc.execute('SELECT * FROM owned_by_relation WHERE eid_from=%s'%eeid) |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1215 |
self.assertEqual(len(sqlc.fetchall()), 0) |
1787 | 1216 |
|
0 | 1217 |
def test_nonregr_delete_cache2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1218 |
eid = self.qexecute("INSERT Folder T: T name 'toto'")[0][0] |
0 | 1219 |
# fill the cache |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1220 |
self.qexecute("Any X WHERE X eid %(x)s", {'x': eid}) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1221 |
self.qexecute("Any X WHERE X eid %s" % eid) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1222 |
self.qexecute("Folder X WHERE X eid %(x)s", {'x': eid}) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1223 |
self.qexecute("Folder X WHERE X eid %s" % eid) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1224 |
self.qexecute("DELETE Folder T WHERE T eid %s" % eid) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1225 |
rset = self.qexecute("Any X WHERE X eid %(x)s", {'x': eid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1226 |
self.assertEqual(rset.rows, []) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1227 |
rset = self.qexecute("Any X WHERE X eid %s" % eid) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1228 |
self.assertEqual(rset.rows, []) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1229 |
rset = self.qexecute("Folder X WHERE X eid %(x)s", {'x': eid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1230 |
self.assertEqual(rset.rows, []) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1231 |
rset = self.qexecute("Folder X WHERE X eid %s" %eid) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1232 |
self.assertEqual(rset.rows, []) |
1787 | 1233 |
|
0 | 1234 |
# update queries tests #################################################### |
1235 |
||
1236 |
def test_update_1(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1237 |
peid = self.qexecute("INSERT Personne Y: Y nom 'toto'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1238 |
rset = self.qexecute('Personne X WHERE X nom "toto"') |
0 | 1239 |
self.assertEqual(len(rset.rows), 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1240 |
rset = self.qexecute("SET X nom 'tutu', X prenom 'original' WHERE X is Personne, X nom 'toto'") |
2921
8e2544e78a5e
test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
1241 |
self.assertEqual(tuplify(rset.rows), [(peid, 'tutu', 'original')]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1242 |
rset = self.qexecute('Any Y, Z WHERE X is Personne, X nom Y, X prenom Z') |
0 | 1243 |
self.assertEqual(tuplify(rset.rows), [('tutu', 'original')]) |
1787 | 1244 |
|
0 | 1245 |
def test_update_2(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1246 |
peid, seid = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'")[0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1247 |
rset = self.qexecute("SET X travaille Y WHERE X nom 'bidule', Y nom 'toto'") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1248 |
self.assertEqual(tuplify(rset.rows), [(peid, seid)]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1249 |
rset = self.qexecute('Any X, Y WHERE X travaille Y') |
0 | 1250 |
self.assertEqual(len(rset.rows), 1) |
1787 | 1251 |
|
0 | 1252 |
def test_update_2bis(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1253 |
rset = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'") |
0 | 1254 |
eid1, eid2 = rset[0][0], rset[0][1] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1255 |
self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s", |
0 | 1256 |
{'x': str(eid1), 'y': str(eid2)}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1257 |
rset = self.qexecute('Any X, Y WHERE X travaille Y') |
0 | 1258 |
self.assertEqual(len(rset.rows), 1) |
4795
f1c8bc628b45
[repo] fix bug introduced by 4757:ec9c20c6b9f7, testing for select.selection is not enough to avoid the substep query, we should check there is no interesting restriction (test added)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4787
diff
changeset
|
1259 |
# test add of an existant relation but with NOT X rel Y protection |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1260 |
self.assertFalse(self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s," |
4795
f1c8bc628b45
[repo] fix bug introduced by 4757:ec9c20c6b9f7, testing for select.selection is not enough to avoid the substep query, we should check there is no interesting restriction (test added)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4787
diff
changeset
|
1261 |
"NOT X travaille Y", |
f1c8bc628b45
[repo] fix bug introduced by 4757:ec9c20c6b9f7, testing for select.selection is not enough to avoid the substep query, we should check there is no interesting restriction (test added)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4787
diff
changeset
|
1262 |
{'x': str(eid1), 'y': str(eid2)})) |
1787 | 1263 |
|
0 | 1264 |
def test_update_2ter(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1265 |
rset = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'") |
0 | 1266 |
eid1, eid2 = rset[0][0], rset[0][1] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1267 |
self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s", |
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
1268 |
{'x': text_type(eid1), 'y': text_type(eid2)}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1269 |
rset = self.qexecute('Any X, Y WHERE X travaille Y') |
0 | 1270 |
self.assertEqual(len(rset.rows), 1) |
1787 | 1271 |
|
0 | 1272 |
def test_update_multiple1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1273 |
peid1 = self.qexecute("INSERT Personne Y: Y nom 'tutu'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1274 |
peid2 = self.qexecute("INSERT Personne Y: Y nom 'toto'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1275 |
self.qexecute("SET X nom 'tutu', Y nom 'toto' WHERE X nom 'toto', Y nom 'tutu'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1276 |
self.assertEqual(self.qexecute('Any X WHERE X nom "toto"').rows, [[peid1]]) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1277 |
self.assertEqual(self.qexecute('Any X WHERE X nom "tutu"').rows, [[peid2]]) |
0 | 1278 |
|
1279 |
def test_update_multiple2(self): |
|
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1280 |
with self.session.new_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1281 |
ueid = cnx.execute("INSERT CWUser X: X login 'bob', X upassword 'toto'")[0][0] |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1282 |
peid1 = cnx.execute("INSERT Personne Y: Y nom 'turlu'")[0][0] |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1283 |
peid2 = cnx.execute("INSERT Personne Y: Y nom 'tutu'")[0][0] |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1284 |
cnx.execute('SET P1 owned_by U, P2 owned_by U ' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1285 |
'WHERE P1 eid %s, P2 eid %s, U eid %s' % (peid1, peid2, ueid)) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1286 |
self.assertTrue(cnx.execute('Any X WHERE X eid %s, X owned_by U, U eid %s' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1287 |
% (peid1, ueid))) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1288 |
self.assertTrue(cnx.execute('Any X WHERE X eid %s, X owned_by U, U eid %s' |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1289 |
% (peid2, ueid))) |
0 | 1290 |
|
1291 |
def test_update_math_expr(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1292 |
orders = [r[0] for r in self.qexecute('Any O ORDERBY O WHERE ST name "Personne", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1293 |
'X from_entity ST, X ordernum O')] |
0 | 1294 |
for i,v in enumerate(orders): |
1295 |
if v != orders[0]: |
|
1296 |
splitidx = i |
|
1297 |
break |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1298 |
self.qexecute('SET X ordernum Y+1 WHERE X from_entity SE, SE name "Personne", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1299 |
'X ordernum Y, X ordernum >= %(order)s', |
0 | 1300 |
{'order': orders[splitidx]}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1301 |
orders2 = [r[0] for r in self.qexecute('Any O ORDERBY O WHERE ST name "Personne", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1302 |
'X from_entity ST, X ordernum O')] |
0 | 1303 |
orders = orders[:splitidx] + [o+1 for o in orders[splitidx:]] |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1304 |
self.assertEqual(orders2, orders) |
0 | 1305 |
|
1306 |
def test_update_string_concat(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1307 |
beid = self.qexecute("INSERT Bookmark Y: Y title 'toto', Y path '/view'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1308 |
self.qexecute('SET X title XN + %(suffix)s WHERE X is Bookmark, X title XN', |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1309 |
{'suffix': u'-moved'}) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1310 |
newname = self.qexecute('Any XN WHERE X eid %(x)s, X title XN', {'x': beid})[0][0] |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1311 |
self.assertEqual(newname, 'toto-moved') |
1787 | 1312 |
|
9206
bf642b50135b
[rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8866
diff
changeset
|
1313 |
def test_update_not_exists(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1314 |
rset = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'") |
9206
bf642b50135b
[rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8866
diff
changeset
|
1315 |
eid1, eid2 = rset[0][0], rset[0][1] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1316 |
rset = self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s, " |
9206
bf642b50135b
[rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8866
diff
changeset
|
1317 |
"NOT EXISTS(Z ecrit_par X)", |
10761
3a455c7f2abd
[server/test] unicode → six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
10651
diff
changeset
|
1318 |
{'x': text_type(eid1), 'y': text_type(eid2)}) |
9206
bf642b50135b
[rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8866
diff
changeset
|
1319 |
self.assertEqual(tuplify(rset.rows), [(eid1, eid2)]) |
bf642b50135b
[rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8866
diff
changeset
|
1320 |
|
0 | 1321 |
def test_update_query_error(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1322 |
self.qexecute("INSERT Personne Y: Y nom 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1323 |
self.assertRaises(Exception, self.qexecute, "SET X nom 'toto', X is Personne") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1324 |
self.assertRaises(QueryError, self.qexecute, "SET X nom 'toto', X has_text 'tutu' " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1325 |
"WHERE X is Personne") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1326 |
self.assertRaises(QueryError, |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1327 |
self.qexecute, |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1328 |
"SET X login 'tutu', X eid %s" % cnx.user(self.session).eid) |
0 | 1329 |
|
9206
bf642b50135b
[rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8866
diff
changeset
|
1330 |
|
8018
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1331 |
# HAVING on write queries test ############################################# |
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1332 |
|
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1333 |
def test_update_having(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1334 |
peid1 = self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 1")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1335 |
peid2 = self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 2")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1336 |
rset = self.qexecute("SET X tel 3 WHERE X tel TEL HAVING TEL&1=1") |
8018
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1337 |
self.assertEqual(tuplify(rset.rows), [(peid1, 3)]) |
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1338 |
|
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1339 |
def test_insert_having(self): |
8019
eb83c52ffa0c
[test] unittest2 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8018
diff
changeset
|
1340 |
self.skipTest('unsupported yet') |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1341 |
self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 1")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1342 |
self.assertFalse(self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 2 " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1343 |
"WHERE X tel XT HAVING XT&2=2")) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1344 |
self.assertTrue(self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 2 " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1345 |
"WHERE X tel XT HAVING XT&1=1")) |
8018
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1346 |
|
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1347 |
def test_delete_having(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1348 |
self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 1")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1349 |
self.assertFalse(self.qexecute("DELETE Personne Y WHERE X tel XT HAVING XT&2=2")) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1350 |
self.assertTrue(self.qexecute("DELETE Personne Y WHERE X tel XT HAVING XT&1=1")) |
8018
f01c80513274
[rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8002
diff
changeset
|
1351 |
|
0 | 1352 |
# upassword encryption tests ################################################# |
1787 | 1353 |
|
0 | 1354 |
def test_insert_upassword(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1355 |
rset = self.qexecute("INSERT CWUser X: X login 'bob', X upassword 'toto', " |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1356 |
"X in_group G WHERE G name 'users'") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1357 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1358 |
self.assertEqual(rset.description, [('CWUser',)]) |
0 | 1359 |
self.assertRaises(Unauthorized, |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1360 |
self.qexecute, "Any P WHERE X is CWUser, X login 'bob', X upassword P") |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1361 |
with self.session.new_cnx() as cnx: |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1362 |
cursor = cnx.cnxset.cu |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1363 |
cursor.execute("SELECT %supassword from %sCWUser WHERE %slogin='bob'" |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1364 |
% (SQL_PREFIX, SQL_PREFIX, SQL_PREFIX)) |
10765
bd2e3c1d1fed
[server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10764
diff
changeset
|
1365 |
passwd = binary_type(cursor.fetchone()[0]) |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1366 |
self.assertEqual(passwd, crypt_password('toto', passwd)) |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1367 |
rset = self.qexecute("Any X WHERE X is CWUser, X login 'bob', X upassword %(pwd)s", |
4199
c9526b1ffb1d
must now properly use Binary for password (see 4180:42247d70105b). XXX Though this is somewhat backend related (eg store password using a binary type), this should be either well document or handled properly in the db helper.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3587
diff
changeset
|
1368 |
{'pwd': Binary(passwd)}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1369 |
self.assertEqual(len(rset.rows), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1370 |
self.assertEqual(rset.description, [('CWUser',)]) |
1787 | 1371 |
|
0 | 1372 |
def test_update_upassword(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1373 |
with self.session.new_cnx() as cnx: |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1374 |
rset = cnx.execute("INSERT CWUser X: X login 'bob', X upassword %(pwd)s", |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1375 |
{'pwd': 'toto'}) |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1376 |
self.assertEqual(rset.description[0][0], 'CWUser') |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1377 |
rset = cnx.execute("SET X upassword %(pwd)s WHERE X is CWUser, X login 'bob'", |
10765
bd2e3c1d1fed
[server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10764
diff
changeset
|
1378 |
{'pwd': b'tutu'}) |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1379 |
cursor = cnx.cnxset.cu |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1380 |
cursor.execute("SELECT %supassword from %sCWUser WHERE %slogin='bob'" |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1381 |
% (SQL_PREFIX, SQL_PREFIX, SQL_PREFIX)) |
10765
bd2e3c1d1fed
[server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10764
diff
changeset
|
1382 |
passwd = binary_type(cursor.fetchone()[0]) |
10365
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1383 |
self.assertEqual(passwd, crypt_password('tutu', passwd)) |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1384 |
rset = cnx.execute("Any X WHERE X is CWUser, X login 'bob', X upassword %(pwd)s", |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1385 |
{'pwd': Binary(passwd)}) |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1386 |
self.assertEqual(len(rset.rows), 1) |
21461f80f348
[connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
10354
diff
changeset
|
1387 |
self.assertEqual(rset.description, [('CWUser',)]) |
0 | 1388 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1389 |
# ZT datetime tests ######################################################## |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1390 |
|
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1391 |
def test_tz_datetime(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1392 |
self.qexecute("INSERT Personne X: X nom 'bob', X tzdatenaiss %(date)s", |
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1393 |
{'date': datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1))}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1394 |
datenaiss = self.qexecute("Any XD WHERE X nom 'bob', X tzdatenaiss XD")[0][0] |
7211
cacff15f847d
[timezone] ensure tzinfo is None
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7166
diff
changeset
|
1395 |
self.assertEqual(datenaiss.tzinfo, None) |
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1396 |
self.assertEqual(datenaiss.utctimetuple()[:5], (1977, 6, 7, 1, 0)) |
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1397 |
|
10643
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1398 |
def test_tz_datetime_cache_nonregr(self): |
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1399 |
datenaiss = datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1)) |
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1400 |
self.qexecute("INSERT Personne X: X nom 'bob', X tzdatenaiss %(date)s", |
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1401 |
{'date': datenaiss}) |
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1402 |
self.assertTrue(self.qexecute("Any X WHERE X tzdatenaiss %(d)s", {'d': datenaiss})) |
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1403 |
self.assertFalse(self.qexecute("Any X WHERE X tzdatenaiss %(d)s", {'d': datenaiss - timedelta(1)})) |
cfded6d0da11
fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10508
diff
changeset
|
1404 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7148
diff
changeset
|
1405 |
# non regression tests ##################################################### |
1787 | 1406 |
|
0 | 1407 |
def test_nonregr_1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1408 |
teid = self.qexecute("INSERT Tag X: X name 'tag'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1409 |
self.qexecute("SET X tags Y WHERE X name 'tag', Y is State, Y name 'activated'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1410 |
rset = self.qexecute('Any X WHERE T tags X') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1411 |
self.assertEqual(len(rset.rows), 1, rset.rows) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1412 |
rset = self.qexecute('Any T WHERE T tags X, X is State') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1413 |
self.assertEqual(rset.rows, [[teid]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1414 |
rset = self.qexecute('Any T WHERE T tags X') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1415 |
self.assertEqual(rset.rows, [[teid]]) |
0 | 1416 |
|
1417 |
def test_nonregr_2(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1418 |
teid = self.qexecute("INSERT Tag X: X name 'tag'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1419 |
geid = self.qexecute("CWGroup G WHERE G name 'users'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1420 |
self.qexecute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s", |
0 | 1421 |
{'g': geid, 't': teid}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1422 |
rset = self.qexecute('Any X WHERE E eid %(x)s, E tags X', |
0 | 1423 |
{'x': teid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1424 |
self.assertEqual(rset.rows, [[geid]]) |
1787 | 1425 |
|
0 | 1426 |
def test_nonregr_3(self): |
1427 |
"""bad sql generated on the second query (destination_state is not |
|
1428 |
detected as an inlined relation) |
|
1429 |
""" |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1430 |
rset = self.qexecute('Any S,ES,T WHERE S state_of WF, WF workflow_of ET, ET name "CWUser",' |
0 | 1431 |
'ES allowed_transition T, T destination_state S') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1432 |
self.assertEqual(len(rset.rows), 2) |
0 | 1433 |
|
1434 |
def test_nonregr_4(self): |
|
1435 |
# fix variables'type, else we get (nb of entity types with a 'name' attribute)**3 |
|
1436 |
# union queries and that make for instance a 266Ko sql query which is refused |
|
1437 |
# by the server (or client lib) |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1438 |
rset = self.qexecute('Any ER,SE,OE WHERE SE name "Comment", ER name "comments", OE name "Comment",' |
1398
5fe84a5f7035
rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents:
1263
diff
changeset
|
1439 |
'ER is CWRType, SE is CWEType, OE is CWEType') |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1440 |
self.assertEqual(len(rset), 1) |
0 | 1441 |
|
1442 |
def test_nonregr_5(self): |
|
1443 |
# jpl #15505: equivalent queries returning different result sets |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1444 |
teid1 = self.qexecute("INSERT Folder X: X name 'hop'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1445 |
teid2 = self.qexecute("INSERT Folder X: X name 'hip'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1446 |
neid = self.qexecute("INSERT Note X: X todo_by U, X filed_under T " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1447 |
"WHERE U login 'admin', T name 'hop'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1448 |
weid = self.qexecute("INSERT Affaire X: X concerne N, X filed_under T " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1449 |
"WHERE N is Note, T name 'hip'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1450 |
rset1 = self.qexecute('Any N,U WHERE N filed_under T, T eid %s,' |
0 | 1451 |
'N todo_by U, W concerne N,' |
1452 |
'W is Affaire, W filed_under A, A eid %s' % (teid1, teid2)) |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1453 |
rset2 = self.qexecute('Any N,U WHERE N filed_under T, T eid %s,' |
0 | 1454 |
'N todo_by U, W concerne N,' |
1455 |
'W filed_under A, A eid %s' % (teid1, teid2)) |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1456 |
rset3 = self.qexecute('Any N,U WHERE N todo_by U, T eid %s,' |
0 | 1457 |
'N filed_under T, W concerne N,' |
1458 |
'W is Affaire, W filed_under A, A eid %s' % (teid1, teid2)) |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1459 |
rset4 = self.qexecute('Any N,U WHERE N todo_by U, T eid %s,' |
0 | 1460 |
'N filed_under T, W concerne N,' |
1461 |
'W filed_under A, A eid %s' % (teid1, teid2)) |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1462 |
self.assertEqual(rset1.rows, rset2.rows) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1463 |
self.assertEqual(rset1.rows, rset3.rows) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1464 |
self.assertEqual(rset1.rows, rset4.rows) |
1787 | 1465 |
|
0 | 1466 |
def test_nonregr_6(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1467 |
self.qexecute('Any N,COUNT(S) GROUPBY N ORDERBY COUNT(N) WHERE S name N, S is State') |
1787 | 1468 |
|
0 | 1469 |
def test_sqlite_encoding(self): |
1470 |
"""XXX this test was trying to show a bug on use of lower which only |
|
1471 |
occurs with non ascii string and misconfigured locale |
|
1472 |
""" |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1473 |
self.qexecute("INSERT Tag X: X name %(name)s," |
0 | 1474 |
"X modification_date %(modification_date)s," |
1475 |
"X creation_date %(creation_date)s", |
|
1476 |
{'name': u'�name0', |
|
1477 |
'modification_date': '2003/03/12 11:00', |
|
1478 |
'creation_date': '2000/07/03 11:00'}) |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1479 |
rset = self.qexecute('Any lower(N) ORDERBY LOWER(N) WHERE X is Tag, X name N,' |
0 | 1480 |
'X owned_by U, U eid %(x)s', |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4848
diff
changeset
|
1481 |
{'x':self.session.user.eid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1482 |
self.assertEqual(rset.rows, [[u'\xe9name0']]) |
0 | 1483 |
|
1484 |
||
1485 |
def test_nonregr_description(self): |
|
1486 |
"""check that a correct description is built in case where infered |
|
1487 |
solutions may be "fusionned" into one by the querier while all solutions |
|
1488 |
are needed to build the result's description |
|
1489 |
""" |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1490 |
self.qexecute("INSERT Personne X: X nom 'bidule'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1491 |
self.qexecute("INSERT Societe Y: Y nom 'toto'") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1492 |
beid = self.qexecute("INSERT Basket B: B name 'mybasket'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1493 |
self.qexecute("SET X in_basket B WHERE X is Personne") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1494 |
self.qexecute("SET X in_basket B WHERE X is Societe") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1495 |
rset = self.qexecute('Any X WHERE X in_basket B, B eid %s' % beid) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1496 |
self.assertEqual(len(rset), 2) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1497 |
self.assertEqual(rset.description, [('Personne',), ('Societe',)]) |
0 | 1498 |
|
1499 |
||
1500 |
def test_nonregr_cache_1(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1501 |
peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1502 |
beid = self.qexecute("INSERT Basket X: X name 'tag'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1503 |
self.qexecute("SET X in_basket Y WHERE X is Personne, Y eid %(y)s", |
0 | 1504 |
{'y': beid}) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1505 |
rset = self.qexecute("Any X WHERE X in_basket B, B eid %(x)s", |
0 | 1506 |
{'x': beid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1507 |
self.assertEqual(rset.rows, [[peid]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1508 |
rset = self.qexecute("Any X WHERE X in_basket B, B eid %(x)s", |
0 | 1509 |
{'x': beid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1510 |
self.assertEqual(rset.rows, [[peid]]) |
0 | 1511 |
|
1512 |
def test_nonregr_has_text_cache(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1513 |
eid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1514 |
eid2 = self.qexecute("INSERT Personne X: X nom 'tag'")[0][0] |
10508
2a578b9e7ad8
[server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents:
10411
diff
changeset
|
1515 |
rset = self.qexecute("Any X WHERE X has_text %(text)s", {'text': u'bidule'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1516 |
self.assertEqual(rset.rows, [[eid1]]) |
10508
2a578b9e7ad8
[server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents:
10411
diff
changeset
|
1517 |
rset = self.qexecute("Any X WHERE X has_text %(text)s", {'text': u'tag'}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1518 |
self.assertEqual(rset.rows, [[eid2]]) |
0 | 1519 |
|
1520 |
def test_nonregr_sortterm_management(self): |
|
1521 |
"""Error: Variable has no attribute 'sql' in rql2sql.py (visit_variable) |
|
1522 |
||
1523 |
cause: old variable ref inserted into a fresh rqlst copy |
|
1524 |
(in RQLSpliter._complex_select_plan) |
|
1950
ab7a41b2cd26
reactivate skipped tests due to sqlite bug which is now fixed (sqlite 3.6.13)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1949
diff
changeset
|
1525 |
|
ab7a41b2cd26
reactivate skipped tests due to sqlite bug which is now fixed (sqlite 3.6.13)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1949
diff
changeset
|
1526 |
need sqlite including http://www.sqlite.org/cvstrac/tktview?tn=3773 fix |
0 | 1527 |
""" |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1528 |
self.qexecute('Any X ORDERBY D DESC WHERE X creation_date D') |
1787 | 1529 |
|
0 | 1530 |
def test_nonregr_extra_joins(self): |
1531 |
ueid = self.session.user.eid |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1532 |
teid1 = self.qexecute("INSERT Folder X: X name 'folder1'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1533 |
teid2 = self.qexecute("INSERT Folder X: X name 'folder2'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1534 |
neid1 = self.qexecute("INSERT Note X: X para 'note1'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1535 |
neid2 = self.qexecute("INSERT Note X: X para 'note2'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1536 |
self.qexecute("SET X filed_under Y WHERE X eid %s, Y eid %s" |
0 | 1537 |
% (neid1, teid1)) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1538 |
self.qexecute("SET X filed_under Y WHERE X eid %s, Y eid %s" |
0 | 1539 |
% (neid2, teid2)) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1540 |
self.qexecute("SET X todo_by Y WHERE X is Note, Y eid %s" % ueid) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1541 |
rset = self.qexecute('Any N WHERE N todo_by U, N is Note, U eid %s, N filed_under T, T eid %s' |
0 | 1542 |
% (ueid, teid1)) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1543 |
self.assertEqual(len(rset), 1) |
0 | 1544 |
|
1545 |
def test_nonregr_XXX(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1546 |
teid = self.qexecute('Transition S WHERE S name "deactivate"')[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1547 |
rset = self.qexecute('Any O WHERE O is State, ' |
0 | 1548 |
'S eid %(x)s, S transition_of ET, O state_of ET', {'x': teid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1549 |
self.assertEqual(len(rset), 2) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1550 |
rset = self.qexecute('Any O WHERE O is State, NOT S destination_state O, ' |
0 | 1551 |
'S eid %(x)s, S transition_of ET, O state_of ET', {'x': teid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1552 |
self.assertEqual(len(rset), 1) |
0 | 1553 |
|
1554 |
||
1555 |
def test_nonregr_set_datetime(self): |
|
1556 |
# huum, psycopg specific |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1557 |
self.qexecute('SET X creation_date %(date)s WHERE X eid 1', {'date': date.today()}) |
1787 | 1558 |
|
0 | 1559 |
def test_nonregr_u_owned_by_u(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1560 |
ueid = self.qexecute("INSERT CWUser X: X login 'bob', X upassword 'toto', X in_group G " |
0 | 1561 |
"WHERE G name 'users'")[0][0] |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1562 |
rset = self.qexecute("CWUser U") |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1563 |
self.assertEqual(len(rset), 3) # bob + admin + anon |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1564 |
rset = self.qexecute("Any U WHERE NOT U owned_by U") |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1565 |
# even admin created at repo initialization time should belong to itself |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1566 |
self.assertEqual(len(rset), 0) |
0 | 1567 |
|
1568 |
def test_nonreg_update_index(self): |
|
1569 |
# this is the kind of queries generated by "cubicweb-ctl db-check -ry" |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1570 |
self.qexecute("SET X description D WHERE X is State, X description D") |
0 | 1571 |
|
1572 |
def test_nonregr_is(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1573 |
uteid = self.qexecute('Any ET WHERE ET name "CWUser"')[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1574 |
self.qexecute('Any X, ET WHERE X is ET, ET eid %s' % uteid) |
0 | 1575 |
|
1576 |
def test_nonregr_orderby(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1577 |
seid = self.qexecute('Any X WHERE X name "activated"')[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1578 |
self.qexecute('Any X,S, MAX(T) GROUPBY X,S ORDERBY S ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1579 |
'WHERE X is CWUser, T tags X, S eid IN(%s), X in_state S' % seid) |
0 | 1580 |
|
1581 |
def test_nonregr_solution_cache(self): |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1582 |
self.skipTest('XXX should be fixed or documented') # (doesn't occur if cache key is provided.) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1583 |
rset = self.qexecute('Any X WHERE X is CWUser, X eid %(x)s', {'x':self.ueid}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1584 |
self.assertEqual(len(rset), 1) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1585 |
rset = self.qexecute('Any X WHERE X is CWUser, X eid %(x)s', {'x':12345}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6209
diff
changeset
|
1586 |
self.assertEqual(len(rset), 0) |
0 | 1587 |
|
1588 |
def test_nonregr_final_norestr(self): |
|
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1589 |
self.assertRaises(BadRQLQuery, self.qexecute, 'Date X') |
0 | 1590 |
|
7394
d11d88bd08e8
[rql2sql] fix generated sql for eid comparison. closes #1638695
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7211
diff
changeset
|
1591 |
def test_nonregr_eid_cmp(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1592 |
peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1593 |
peid2 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1594 |
rset = self.qexecute('Any X,Y WHERE X is Personne, Y is Personne, ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1595 |
'X nom XD, Y nom XD, X eid Z, Y eid > Z') |
7394
d11d88bd08e8
[rql2sql] fix generated sql for eid comparison. closes #1638695
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7211
diff
changeset
|
1596 |
self.assertEqual(rset.rows, [[peid1, peid2]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1597 |
rset = self.qexecute('Any X,Y WHERE X nom XD, Y nom XD, X eid Z, Y eid > Z') |
7394
d11d88bd08e8
[rql2sql] fix generated sql for eid comparison. closes #1638695
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7211
diff
changeset
|
1598 |
self.assertEqual(rset.rows, [[peid1, peid2]]) |
0 | 1599 |
|
7523
f6856231cc51
[rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7394
diff
changeset
|
1600 |
def test_nonregr_has_text_ambiguity_1(self): |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1601 |
peid = self.qexecute("INSERT CWUser X: X login 'bidule', X upassword 'bidule', " |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1602 |
"X in_group G WHERE G name 'users'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1603 |
aeid = self.qexecute("INSERT Affaire X: X ref 'bidule'")[0][0] |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1604 |
rset = self.qexecute('Any X WHERE X is CWUser, X has_text "bidule"') |
7523
f6856231cc51
[rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7394
diff
changeset
|
1605 |
self.assertEqual(rset.rows, [[peid]]) |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1606 |
rset = self.qexecute('Any X WHERE X is CWUser, X has_text "bidule", ' |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1607 |
'X in_state S, S name SN') |
7523
f6856231cc51
[rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7394
diff
changeset
|
1608 |
self.assertEqual(rset.rows, [[peid]]) |
f6856231cc51
[rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7394
diff
changeset
|
1609 |
|
8127
96d343a5e01b
[rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8111
diff
changeset
|
1610 |
|
96d343a5e01b
[rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8111
diff
changeset
|
1611 |
def test_nonregr_sql_cache(self): |
96d343a5e01b
[rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8111
diff
changeset
|
1612 |
# different SQL generated when 'name' is None or not (IS NULL). |
9831
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1613 |
self.assertFalse(self.qexecute('Any X WHERE X is CWEType, X name %(name)s', |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1614 |
{'name': None})) |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1615 |
self.assertTrue(self.qexecute('Any X WHERE X is CWEType, X name %(name)s', |
db4aeba5d336
[test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9543
diff
changeset
|
1616 |
{'name': 'CWEType'})) |
8127
96d343a5e01b
[rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8111
diff
changeset
|
1617 |
|
8348
1a88d201675c
[test] update create_user call
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8347
diff
changeset
|
1618 |
|
8342
7a5271182ef0
[rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8317
diff
changeset
|
1619 |
class NonRegressionTC(CubicWebTC): |
8348
1a88d201675c
[test] update create_user call
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8347
diff
changeset
|
1620 |
|
8342
7a5271182ef0
[rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8317
diff
changeset
|
1621 |
def test_has_text_security_cache_bug(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1622 |
with self.admin_access.repo_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1623 |
self.create_user(cnx, 'user', ('users',)) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1624 |
aff1 = cnx.create_entity('Societe', nom=u'aff1') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1625 |
aff2 = cnx.create_entity('Societe', nom=u'aff2') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1626 |
cnx.commit() |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1627 |
with self.new_access('user').repo_cnx() as cnx: |
10508
2a578b9e7ad8
[server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents:
10411
diff
changeset
|
1628 |
res = cnx.execute('Any X WHERE X has_text %(text)s', {'text': u'aff1'}) |
8342
7a5271182ef0
[rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8317
diff
changeset
|
1629 |
self.assertEqual(res.rows, [[aff1.eid]]) |
10508
2a578b9e7ad8
[server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents:
10411
diff
changeset
|
1630 |
res = cnx.execute('Any X WHERE X has_text %(text)s', {'text': u'aff2'}) |
8342
7a5271182ef0
[rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8317
diff
changeset
|
1631 |
self.assertEqual(res.rows, [[aff2.eid]]) |
8348
1a88d201675c
[test] update create_user call
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8347
diff
changeset
|
1632 |
|
8853
f61755c05c89
[querier] fix eid relations handling in SET queries (closes #2797052)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
8348
diff
changeset
|
1633 |
def test_set_relations_eid(self): |
9833
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1634 |
with self.admin_access.repo_cnx() as cnx: |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1635 |
# create 3 email addresses |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1636 |
a1 = cnx.create_entity('EmailAddress', address=u'a1') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1637 |
a2 = cnx.create_entity('EmailAddress', address=u'a2') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1638 |
a3 = cnx.create_entity('EmailAddress', address=u'a3') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1639 |
# SET relations using '>=' operator on eids |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1640 |
cnx.execute('SET U use_email A WHERE U login "admin", A eid >= %s' % a2.eid) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1641 |
self.assertEqual( |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1642 |
[[a2.eid], [a3.eid]], |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1643 |
cnx.execute('Any A ORDERBY A WHERE U use_email A, U login "admin"').rows) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1644 |
# DELETE |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1645 |
cnx.execute('DELETE U use_email A WHERE U login "admin", A eid > %s' % a2.eid) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1646 |
self.assertEqual( |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1647 |
[[a2.eid]], |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1648 |
cnx.execute('Any A ORDERBY A WHERE U use_email A, U login "admin"').rows) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1649 |
cnx.execute('DELETE U use_email A WHERE U login "admin"') |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1650 |
# SET relations using '<' operator on eids |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1651 |
cnx.execute('SET U use_email A WHERE U login "admin", A eid < %s' % a2.eid) |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1652 |
self.assertEqual( |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1653 |
[[a1.eid]], |
1485aab7ece6
[tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9832
diff
changeset
|
1654 |
cnx.execute('Any A ORDERBY A WHERE U use_email A, U login "admin"').rows) |
8853
f61755c05c89
[querier] fix eid relations handling in SET queries (closes #2797052)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
8348
diff
changeset
|
1655 |
|
0 | 1656 |
if __name__ == '__main__': |
1657 |
unittest_main() |