server/test/unittest_querier.py
changeset 6427 c8a5ac2d1eaa
parent 6366 1806148d6ce8
child 6631 26c303c3f1aa
equal deleted inserted replaced
6426:541659c39f6a 6427:c8a5ac2d1eaa
   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.assertEqual(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)')
   133         self.assertEqual(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, CWSource, 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.assertListEqual(sorted(solutions),
   134         self.assertListEqual(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'},
   145                                       {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'},
   145                                       {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'},
   146                                       {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'},
   146                                       {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'},
   147                                       {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'},
   147                                       {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'},
   148                                       {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'},
   148                                       {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'},
   149                                       {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'},
   149                                       {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'},
       
   150                                       {'X': 'CWSource', 'ETN': 'String', 'ET': 'CWEType'},
   150                                       {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'},
   151                                       {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'},
   151                                       {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'},
   152                                       {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'},
   152                                       {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'},
   153                                       {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'},
   153                                       {'X': 'EmailAddress', 'ETN': 'String', 'ET': 'CWEType'},
   154                                       {'X': 'EmailAddress', 'ETN': 'String', 'ET': 'CWEType'},
   154                                       {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'},
   155                                       {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'},
   249     # selection queries tests #################################################
   250     # selection queries tests #################################################
   250 
   251 
   251     def test_select_1(self):
   252     def test_select_1(self):
   252         rset = self.execute('Any X ORDERBY X WHERE X is CWGroup')
   253         rset = self.execute('Any X ORDERBY X WHERE X is CWGroup')
   253         result, descr = rset.rows, rset.description
   254         result, descr = rset.rows, rset.description
   254         self.assertEqual(tuplify(result), [(1,), (2,), (3,), (4,)])
   255         self.assertEqual(tuplify(result), [(2,), (3,), (4,), (5,)])
   255         self.assertEqual(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   256         self.assertEqual(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   256 
   257 
   257     def test_select_2(self):
   258     def test_select_2(self):
   258         rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N')
   259         rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N')
   259         self.assertEqual(tuplify(rset.rows), [(1,), (2,), (3,), (4,)])
   260         self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)])
   260         self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   261         self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   261         rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N')
   262         rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N')
   262         self.assertEqual(tuplify(rset.rows), [(4,), (3,), (2,), (1,)])
   263         self.assertEqual(tuplify(rset.rows), [(5,), (4,), (3,), (2,)])
   263 
   264 
   264     def test_select_3(self):
   265     def test_select_3(self):
   265         rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N')
   266         rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N')
   266         result, descr = rset.rows, rset.description
   267         result, descr = rset.rows, rset.description
   267         result.sort()
   268         result.sort()
   300         self.assertEqual(rset.rows[0][0], rset1.rows[1][0])
   301         self.assertEqual(rset.rows[0][0], rset1.rows[1][0])
   301         self.assertEqual(len(rset), 5)
   302         self.assertEqual(len(rset), 5)
   302 
   303 
   303     def test_select_5(self):
   304     def test_select_5(self):
   304         rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup')
   305         rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup')
   305         self.assertEqual(tuplify(rset.rows), [(1, 'guests',), (2, 'managers',), (3, 'owners',), (4, 'users',)])
   306         self.assertEqual(tuplify(rset.rows), [(2, 'guests',), (3, 'managers',), (4, 'owners',), (5, 'users',)])
   306         self.assertEqual(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)])
   307         self.assertEqual(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)])
   307 
   308 
   308     def test_select_6(self):
   309     def test_select_6(self):
   309         self.execute("INSERT Personne X: X nom 'bidule'")[0]
   310         self.execute("INSERT Personne X: X nom 'bidule'")[0]
   310         rset = self.execute('Any Y where X name TMP, Y nom in (TMP, "bidule")')
   311         rset = self.execute('Any Y where X name TMP, Y nom in (TMP, "bidule")')
   348         rset = self.execute('Any U,T ORDERBY T DESC WHERE U is CWUser, '
   349         rset = self.execute('Any U,T ORDERBY T DESC WHERE U is CWUser, '
   349                             'N ecrit_par U, N type T')#, {'x': self.ueid})
   350                             'N ecrit_par U, N type T')#, {'x': self.ueid})
   350         self.assertEqual(len(rset.rows), 0)
   351         self.assertEqual(len(rset.rows), 0)
   351 
   352 
   352     def test_select_nonregr_edition_not(self):
   353     def test_select_nonregr_edition_not(self):
   353         groupeids = set((1, 2, 3))
   354         groupeids = set((2, 3, 4))
   354         groupreadperms = set(r[0] for r in self.execute('Any Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), X read_permission Y'))
   355         groupreadperms = set(r[0] for r in self.execute('Any Y WHERE X name "CWGroup", Y eid IN(2, 3, 4), X read_permission Y'))
   355         rset = self.execute('DISTINCT Any Y WHERE X is CWEType, X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y')
   356         rset = self.execute('DISTINCT Any Y WHERE X is CWEType, X name "CWGroup", Y eid IN(2, 3, 4), NOT X read_permission Y')
   356         self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms))
   357         self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms))
   357         rset = self.execute('DISTINCT Any Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y')
   358         rset = self.execute('DISTINCT Any Y WHERE X name "CWGroup", Y eid IN(2, 3, 4), NOT X read_permission Y')
   358         self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms))
   359         self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms))
   359 
   360 
   360     def test_select_outer_join(self):
   361     def test_select_outer_join(self):
   361         peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   362         peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   362         peid2 = self.execute("INSERT Personne X: X nom 'autre'")[0][0]
   363         peid2 = self.execute("INSERT Personne X: X nom 'autre'")[0][0]
   491                             'WHERE RT name N, RDEF relation_type RT '
   492                             'WHERE RT name N, RDEF relation_type RT '
   492                             'HAVING COUNT(RDEF) > 10')
   493                             'HAVING COUNT(RDEF) > 10')
   493         self.assertListEqual(rset.rows,
   494         self.assertListEqual(rset.rows,
   494                               [[u'description_format', 12],
   495                               [[u'description_format', 12],
   495                                [u'description', 13],
   496                                [u'description', 13],
   496                                [u'name', 14],
   497                                [u'name', 15],
   497                                [u'created_by', 38],
   498                                [u'created_by', 40],
   498                                [u'creation_date', 38],
   499                                [u'creation_date', 40],
   499                                [u'cwuri', 38],
   500                                [u'cw_source', 40],
   500                                [u'in_basket', 38],
   501                                [u'cwuri', 40],
   501                                [u'is', 38],
   502                                [u'in_basket', 40],
   502                                [u'is_instance_of', 38],
   503                                [u'is', 40],
   503                                [u'modification_date', 38],
   504                                [u'is_instance_of', 40],
   504                                [u'owned_by', 38]])
   505                                [u'modification_date', 40],
       
   506                                [u'owned_by', 40]])
   505 
   507 
   506     def test_select_aggregat_having_dumb(self):
   508     def test_select_aggregat_having_dumb(self):
   507         # dumb but should not raise an error
   509         # dumb but should not raise an error
   508         rset = self.execute('Any U,COUNT(X) GROUPBY U '
   510         rset = self.execute('Any U,COUNT(X) GROUPBY U '
   509                             'WHERE U eid %(x)s, X owned_by U '
   511                             'WHERE U eid %(x)s, X owned_by U '
   615         self.assertEqual(len(rset.rows), 1, rset.rows)
   617         self.assertEqual(len(rset.rows), 1, rset.rows)
   616 
   618 
   617     def test_select_no_descr(self):
   619     def test_select_no_descr(self):
   618         rset = self.execute('Any X WHERE X is CWGroup', build_descr=0)
   620         rset = self.execute('Any X WHERE X is CWGroup', build_descr=0)
   619         rset.rows.sort()
   621         rset.rows.sort()
   620         self.assertEqual(tuplify(rset.rows), [(1,), (2,), (3,), (4,)])
   622         self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)])
   621         self.assertEqual(rset.description, ())
   623         self.assertEqual(rset.description, ())
   622 
   624 
   623     def test_select_limit_offset(self):
   625     def test_select_limit_offset(self):
   624         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N')
   626         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N')
   625         self.assertEqual(tuplify(rset.rows), [(1,), (2,)])
   627         self.assertEqual(tuplify(rset.rows), [(2,), (3,)])
   626         self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',)])
   628         self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',)])
   627         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N')
   629         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N')
   628         self.assertEqual(tuplify(rset.rows), [(3,), (4,)])
   630         self.assertEqual(tuplify(rset.rows), [(4,), (5,)])
   629 
   631 
   630     def test_select_symmetric(self):
   632     def test_select_symmetric(self):
   631         self.execute("INSERT Personne X: X nom 'machin'")
   633         self.execute("INSERT Personne X: X nom 'machin'")
   632         self.execute("INSERT Personne X: X nom 'bidule'")
   634         self.execute("INSERT Personne X: X nom 'bidule'")
   633         self.execute("INSERT Personne X: X nom 'chouette'")
   635         self.execute("INSERT Personne X: X nom 'chouette'")
   764                                                             'Time'])
   766                                                             'Time'])
   765 
   767 
   766     def test_select_constant(self):
   768     def test_select_constant(self):
   767         rset = self.execute('Any X, "toto" ORDERBY X WHERE X is CWGroup')
   769         rset = self.execute('Any X, "toto" ORDERBY X WHERE X is CWGroup')
   768         self.assertEqual(rset.rows,
   770         self.assertEqual(rset.rows,
   769                           map(list, zip((1,2,3,4), ('toto','toto','toto','toto',))))
   771                           map(list, zip((2,3,4,5), ('toto','toto','toto','toto',))))
   770         self.assertIsInstance(rset[0][1], unicode)
   772         self.assertIsInstance(rset[0][1], unicode)
   771         self.assertEqual(rset.description,
   773         self.assertEqual(rset.description,
   772                           zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'),
   774                           zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'),
   773                               ('String', 'String', 'String', 'String',)))
   775                               ('String', 'String', 'String', 'String',)))
   774         rset = self.execute('Any X, %(value)s ORDERBY X WHERE X is CWGroup', {'value': 'toto'})
   776         rset = self.execute('Any X, %(value)s ORDERBY X WHERE X is CWGroup', {'value': 'toto'})
   775         self.assertEqual(rset.rows,
   777         self.assertEqual(rset.rows,
   776                           map(list, zip((1,2,3,4), ('toto','toto','toto','toto',))))
   778                           map(list, zip((2,3,4,5), ('toto','toto','toto','toto',))))
   777         self.assertIsInstance(rset[0][1], unicode)
   779         self.assertIsInstance(rset[0][1], unicode)
   778         self.assertEqual(rset.description,
   780         self.assertEqual(rset.description,
   779                           zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'),
   781                           zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'),
   780                               ('String', 'String', 'String', 'String',)))
   782                               ('String', 'String', 'String', 'String',)))
   781         rset = self.execute('Any X,GN WHERE X is CWUser, G is CWGroup, X login "syt", X in_group G, G name GN')
   783         rset = self.execute('Any X,GN WHERE X is CWUser, G is CWGroup, X login "syt", X in_group G, G name GN')