test/unittest_rqlrewrite.py
branchstable
changeset 8264 a4b009ba92ce
parent 8113 1e8c92202f44
child 8296 f23782a2cdee
equal deleted inserted replaced
8263:a73ad255ff63 8264:a4b009ba92ce
   181         rqlst = parse('Any A,C,T WHERE A documented_by C?, C title T')
   181         rqlst = parse('Any A,C,T WHERE A documented_by C?, C title T')
   182         rewrite(rqlst, {('C', 'X'): (constraint1, constraint2)}, {})
   182         rewrite(rqlst, {('C', 'X'): (constraint1, constraint2)}, {})
   183         self.assertEqual(rqlst.as_string(),
   183         self.assertEqual(rqlst.as_string(),
   184                          "Any A,C,T WHERE A documented_by C?, A is Affaire "
   184                          "Any A,C,T WHERE A documented_by C?, A is Affaire "
   185                          "WITH C,T BEING (Any C,T WHERE C title T, "
   185                          "WITH C,T BEING (Any C,T WHERE C title T, "
   186                          "EXISTS(C in_state B, D in_group F, G require_state B, G name 'read', G require_group F), "
   186                          "(EXISTS(C in_state B, D in_group F, G require_state B, G name 'read', G require_group F)) "
   187                          "D eid %(A)s, C is Card, "
   187                          "OR (EXISTS(C in_state E, E name 'public')), "
   188                          "EXISTS(C in_state E, E name 'public'))")
   188                          "D eid %(A)s, C is Card)")
   189 
   189 
   190     def test_optional_var_4(self):
   190     def test_optional_var_4(self):
   191         constraint1 = 'A created_by U, X documented_by A'
   191         constraint1 = 'A created_by U, X documented_by A'
   192         constraint2 = 'A created_by U, X concerne A'
   192         constraint2 = 'A created_by U, X concerne A'
   193         constraint3 = 'X created_by U'
   193         constraint3 = 'X created_by U'
   197                         ('Y', 'X'): (constraint3,)}, {})
   197                         ('Y', 'X'): (constraint3,)}, {})
   198         self.assertEqual(rqlst.as_string(),
   198         self.assertEqual(rqlst.as_string(),
   199                              u'Any X,LA,Y WHERE LA? documented_by X, LA concerne Y, B eid %(C)s, '
   199                              u'Any X,LA,Y WHERE LA? documented_by X, LA concerne Y, B eid %(C)s, '
   200                              'EXISTS(X created_by B), EXISTS(Y created_by B), '
   200                              'EXISTS(X created_by B), EXISTS(Y created_by B), '
   201                              'X is Card, Y is IN(Division, Note, Societe) '
   201                              'X is Card, Y is IN(Division, Note, Societe) '
   202                              'WITH LA BEING (Any LA WHERE EXISTS(A created_by B, LA documented_by A), '
   202                              'WITH LA BEING (Any LA WHERE (EXISTS(A created_by B, LA documented_by A)) OR (EXISTS(E created_by B, LA concerne E)), '
   203                              'B eid %(D)s, LA is Affaire, EXISTS(E created_by B, LA concerne E))')
   203                              'B eid %(D)s, LA is Affaire)')
   204 
   204 
   205     def test_optional_var_inlined(self):
   205     def test_optional_var_inlined(self):
   206         c1 = ('X require_permission P')
   206         c1 = ('X require_permission P')
   207         c2 = ('X inlined_card O, O require_permission P')
   207         c2 = ('X inlined_card O, O require_permission P')
   208         rqlst = parse('Any C,A,R WHERE A? inlined_card C, A ref R')
   208         rqlst = parse('Any C,A,R WHERE A? inlined_card C, A ref R')
   429         rqlst = rqlhelper.parse('Affaire A WHERE NOT A documented_by C', annotate=False)
   429         rqlst = rqlhelper.parse('Affaire A WHERE NOT A documented_by C', annotate=False)
   430         rewrite(rqlst, {('C', 'X'): (constraint,)}, {}, 'X')
   430         rewrite(rqlst, {('C', 'X'): (constraint,)}, {}, 'X')
   431         self.assertEqual(rqlst.as_string(),
   431         self.assertEqual(rqlst.as_string(),
   432                          u'Any A WHERE NOT EXISTS(A documented_by C, EXISTS(C owned_by B, B login "hop", B is CWUser), C is Card), A is Affaire')
   432                          u'Any A WHERE NOT EXISTS(A documented_by C, EXISTS(C owned_by B, B login "hop", B is CWUser), C is Card), A is Affaire')
   433 
   433 
       
   434     def test_rqlexpr_multiexpr_outerjoin(self):
       
   435         c1 = RRQLExpression('X owned_by Z, Z login "hop"', 'X')
       
   436         c2 = RRQLExpression('X owned_by Z, Z login "hip"', 'X')
       
   437         c3 = RRQLExpression('X owned_by Z, Z login "momo"', 'X')
       
   438         rqlst = rqlhelper.parse('Any A WHERE A documented_by C?', annotate=False)
       
   439         rewrite(rqlst, {('C', 'X'): (c1, c2, c3)}, {}, 'X')
       
   440         self.assertEqual(rqlst.as_string(),
       
   441                          u'Any A WHERE A documented_by C?, A is Affaire '
       
   442                          'WITH C BEING (Any C WHERE ((EXISTS(C owned_by B, B login "hop")) '
       
   443                          'OR (EXISTS(C owned_by D, D login "momo"))) '
       
   444                          'OR (EXISTS(C owned_by A, A login "hip")), C is Card)')
       
   445 
   434 
   446 
   435 if __name__ == '__main__':
   447 if __name__ == '__main__':
   436     unittest_main()
   448     unittest_main()