changeset 6225 | a176e68b7d0d |
parent 6081 | ede33e6400ab |
parent 6209 | e3e5870807e9 |
child 6366 | 1806148d6ce8 |
6182:30de0be8f895 | 6225:a176e68b7d0d |
---|---|
14 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
14 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
15 # details. |
15 # details. |
16 # |
16 # |
17 # You should have received a copy of the GNU Lesser General Public License along |
17 # You should have received a copy of the GNU Lesser General Public License along |
18 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
19 """unit tests for modules cubicweb.server.querier and cubicweb.server.querier_steps |
19 """unit tests for modules cubicweb.server.querier and cubicweb.server.ssplanner |
20 """ |
20 """ |
21 from datetime import date, datetime |
21 from datetime import date, datetime |
22 |
22 |
23 from logilab.common.testlib import TestCase, unittest_main |
23 from logilab.common.testlib import TestCase, unittest_main |
24 from rql import BadRQLQuery, RQLSyntaxError |
24 from rql import BadRQLQuery, RQLSyntaxError |
128 'I': 'Affaire', |
128 'I': 'Affaire', |
129 'J': 'Affaire', |
129 'J': 'Affaire', |
130 'X': 'Affaire', |
130 'X': 'Affaire', |
131 'ET': 'CWEType', 'ETN': 'String'}]) |
131 'ET': 'CWEType', 'ETN': 'String'}]) |
132 rql, solutions = partrqls[1] |
132 rql, solutions = partrqls[1] |
133 self.assertEquals(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Note, Personne, RQLExpression, Societe, State, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
133 self.assertEquals(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUniqueTogetherConstraint, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Note, Personne, RQLExpression, Societe, State, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
134 self.assertListEquals(sorted(solutions), |
134 self.assertListEquals(sorted(solutions), |
135 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
135 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
136 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
136 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
137 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
137 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
138 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
138 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
141 {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
141 {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
142 {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
142 {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
143 {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
143 {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
144 {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
144 {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
145 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
145 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
146 {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
|
147 {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
|
148 {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
|
149 {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
|
150 {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
|
151 {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
|
146 {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
152 {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
147 {'X': 'EmailAddress', 'ETN': 'String', 'ET': 'CWEType'}, |
153 {'X': 'EmailAddress', 'ETN': 'String', 'ET': 'CWEType'}, |
148 {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
154 {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
149 {'X': 'EmailThread', 'ETN': 'String', 'ET': 'CWEType'}, |
155 {'X': 'EmailThread', 'ETN': 'String', 'ET': 'CWEType'}, |
150 {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
|
151 {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
|
152 {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
|
153 {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
|
154 {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
|
155 {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'}, |
156 {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'}, |
156 {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'}, |
157 {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'}, |
157 {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'}, |
158 {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'}, |
158 {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'}, |
159 {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'}, |
159 {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'}, |
160 {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'}, |
491 'HAVING COUNT(RDEF) > 10') |
492 'HAVING COUNT(RDEF) > 10') |
492 self.assertListEquals(rset.rows, |
493 self.assertListEquals(rset.rows, |
493 [[u'description_format', 12], |
494 [[u'description_format', 12], |
494 [u'description', 13], |
495 [u'description', 13], |
495 [u'name', 14], |
496 [u'name', 14], |
496 [u'created_by', 37], |
497 [u'created_by', 38], |
497 [u'creation_date', 37], |
498 [u'creation_date', 38], |
498 [u'cwuri', 37], |
499 [u'cwuri', 38], |
499 [u'in_basket', 37], |
500 [u'in_basket', 38], |
500 [u'is', 37], |
501 [u'is', 38], |
501 [u'is_instance_of', 37], |
502 [u'is_instance_of', 38], |
502 [u'modification_date', 37], |
503 [u'modification_date', 38], |
503 [u'owned_by', 37]]) |
504 [u'owned_by', 38]]) |
504 |
505 |
505 def test_select_aggregat_having_dumb(self): |
506 def test_select_aggregat_having_dumb(self): |
506 # dumb but should not raise an error |
507 # dumb but should not raise an error |
507 rset = self.execute('Any U,COUNT(X) GROUPBY U ' |
508 rset = self.execute('Any U,COUNT(X) GROUPBY U ' |
508 'WHERE U eid %(x)s, X owned_by U ' |
509 'WHERE U eid %(x)s, X owned_by U ' |
689 self.execute("SET S evaluee N WHERE S nom 'bidule', N para 'troc'") |
690 self.execute("SET S evaluee N WHERE S nom 'bidule', N para 'troc'") |
690 rset = self.execute('DISTINCT Any A,N WHERE A concerne S, S evaluee N') |
691 rset = self.execute('DISTINCT Any A,N WHERE A concerne S, S evaluee N') |
691 self.assertEqual(len(rset.rows), 1, rset.rows) |
692 self.assertEqual(len(rset.rows), 1, rset.rows) |
692 |
693 |
693 def test_select_ordered_distinct_1(self): |
694 def test_select_ordered_distinct_1(self): |
694 self.execute("INSERT Affaire X: X sujet 'cool', X ref '1'") |
695 self.assertRaises(BadRQLQuery, |
695 self.execute("INSERT Affaire X: X sujet 'cool', X ref '2'") |
696 self.execute, 'DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R') |
696 rset = self.execute('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R') |
|
697 self.assertEqual(rset.rows, [['cool']]) |
|
698 |
697 |
699 def test_select_ordered_distinct_2(self): |
698 def test_select_ordered_distinct_2(self): |
700 self.execute("INSERT Affaire X: X sujet 'minor'") |
699 self.execute("INSERT Affaire X: X sujet 'minor'") |
701 self.execute("INSERT Affaire X: X sujet 'important'") |
|
702 self.execute("INSERT Affaire X: X sujet 'normal'") |
|
703 self.execute("INSERT Affaire X: X sujet 'zou'") |
700 self.execute("INSERT Affaire X: X sujet 'zou'") |
704 self.execute("INSERT Affaire X: X sujet 'abcd'") |
701 self.execute("INSERT Affaire X: X sujet 'abcd'") |
705 rset = self.execute('DISTINCT Any S ORDERBY S WHERE A is Affaire, A sujet S') |
702 rset = self.execute('DISTINCT Any S ORDERBY S WHERE A is Affaire, A sujet S') |
706 self.assertEqual(rset.rows, [['abcd'], ['important'], ['minor'], ['normal'], ['zou']]) |
703 self.assertEqual(rset.rows, [['abcd'], ['minor'], ['zou']]) |
707 |
704 |
708 def test_select_ordered_distinct_3(self): |
705 def test_select_ordered_distinct_3(self): |
709 rset = self.execute('DISTINCT Any N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N') |
706 rset = self.execute('DISTINCT Any N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N') |
710 self.assertEqual(rset.rows, [['owners'], ['guests'], ['users'], ['managers']]) |
707 self.assertEqual(rset.rows, [['owners'], ['guests'], ['users'], ['managers']]) |
711 |
708 |
1083 def test_nonregr_delete_cache2(self): |
1080 def test_nonregr_delete_cache2(self): |
1084 eid = self.execute("INSERT Folder T: T name 'toto'")[0][0] |
1081 eid = self.execute("INSERT Folder T: T name 'toto'")[0][0] |
1085 self.commit() |
1082 self.commit() |
1086 # fill the cache |
1083 # fill the cache |
1087 self.execute("Any X WHERE X eid %(x)s", {'x': eid}) |
1084 self.execute("Any X WHERE X eid %(x)s", {'x': eid}) |
1088 self.execute("Any X WHERE X eid %s" %eid) |
1085 self.execute("Any X WHERE X eid %s" % eid) |
1089 self.execute("Folder X WHERE X eid %(x)s", {'x': eid}) |
1086 self.execute("Folder X WHERE X eid %(x)s", {'x': eid}) |
1090 self.execute("Folder X WHERE X eid %s" %eid) |
1087 self.execute("Folder X WHERE X eid %s" % eid) |
1091 self.execute("DELETE Folder T WHERE T eid %s"%eid) |
1088 self.execute("DELETE Folder T WHERE T eid %s" % eid) |
1092 self.commit() |
1089 self.commit() |
1093 rset = self.execute("Any X WHERE X eid %(x)s", {'x': eid}) |
1090 rset = self.execute("Any X WHERE X eid %(x)s", {'x': eid}) |
1094 self.assertEquals(rset.rows, []) |
1091 self.assertEquals(rset.rows, []) |
1095 rset = self.execute("Any X WHERE X eid %s" %eid) |
1092 rset = self.execute("Any X WHERE X eid %s" % eid) |
1096 self.assertEquals(rset.rows, []) |
1093 self.assertEquals(rset.rows, []) |
1097 rset = self.execute("Folder X WHERE X eid %(x)s", {'x': eid}) |
1094 rset = self.execute("Folder X WHERE X eid %(x)s", {'x': eid}) |
1098 self.assertEquals(rset.rows, []) |
1095 self.assertEquals(rset.rows, []) |
1099 rset = self.execute("Folder X WHERE X eid %s" %eid) |
1096 rset = self.execute("Folder X WHERE X eid %s" %eid) |
1100 self.assertEquals(rset.rows, []) |
1097 self.assertEquals(rset.rows, []) |