server/test/unittest_msplanner.py
changeset 393 45a675515427
parent 392 bccd9a788f7a
child 1120 1c24cde4bf72
--- a/server/test/unittest_msplanner.py	Tue Jan 13 17:55:29 2009 +0100
+++ b/server/test/unittest_msplanner.py	Tue Jan 13 17:56:02 2009 +0100
@@ -28,8 +28,10 @@
 class FakeCardSource(AbstractSource):
     uri = 'ccc'
     support_entities = {'Card': True, 'Note': True, 'State': True}
-    support_relations = {'in_state': True, 'multisource_rel': True, 'multisource_inlined_rel': True}
+    support_relations = {'in_state': True, 'multisource_rel': True, 'multisource_inlined_rel': True,
+                         'multisource_crossed_rel': True}
     dont_cross_relations = set(('fiche',))
+    cross_relations = set(('multisource_crossed_rel',))
     
     def syntax_tree_search(self, *args, **kwargs):
         return []
@@ -1364,6 +1366,93 @@
                                        [{'X': 'Personne', 'Y': 'Card', 'YT': 'String'}])],
                      None, None, [self.system], {}, [])],
                    {'x': 999999})
+
+
+    # external source w/ .cross_relations == ['multisource_crossed_rel'] ######
+    
+    def test_crossed_relation_eid_1_invariant(self):
+        repo._type_source_cache[999999] = ('Note', 'system', 999999)
+        ueid = self.session.user.eid
+        self._test('Any Y WHERE X eid %(x)s, X multisource_crossed_rel Y',
+                   [('OneFetchStep', [('Any Y WHERE 999999 multisource_crossed_rel Y', [{u'Y': 'Note'}])],
+                      None, None, [self.system], {}, [])
+                    ],
+                   {'x': 999999,})
+
+    def test_crossed_relation_eid_1_needattr(self):
+        repo._type_source_cache[999999] = ('Note', 'system', 999999)
+        ueid = self.session.user.eid
+        self._test('Any Y,T WHERE X eid %(x)s, X multisource_crossed_rel Y, Y type T',
+                   [('FetchStep', [('Any Y,T WHERE Y type T, Y is Note', [{'T': 'String', 'Y': 'Note'}])],
+                     [self.rql, self.system], None,
+                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.type': 'table0.C1'}, []),
+                    ('OneFetchStep', [('Any Y,T WHERE 999999 multisource_crossed_rel Y, Y type T, Y is Note',
+                                       [{'T': 'String', 'Y': 'Note'}])],
+                     None, None, [self.system],
+                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.type': 'table0.C1'}, []),
+                    ],
+                   {'x': 999999,})
+
+    def test_crossed_relation_eid_2_invariant(self):
+        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
+        ueid = self.session.user.eid
+        self._test('Any Y WHERE X eid %(x)s, X multisource_crossed_rel Y',
+                   [('OneFetchStep', [('Any Y WHERE 999999 multisource_crossed_rel Y, Y is Note', [{'Y': 'Note'}])],
+                      None, None, [self.rql, self.system], {}, [])
+                    ],
+                   {'x': 999999,})
+
+    def test_crossed_relation_eid_2_needattr(self):
+        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
+        ueid = self.session.user.eid
+        self._test('Any Y,T WHERE X eid %(x)s, X multisource_crossed_rel Y, Y type T',
+                   [('FetchStep', [('Any Y,T WHERE Y type T, Y is Note', [{'T': 'String', 'Y': 'Note'}])],
+                     [self.rql, self.system], None,
+                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.type': 'table0.C1'}, []),
+                    ('OneFetchStep', [('Any Y,T WHERE 999999 multisource_crossed_rel Y, Y type T, Y is Note',
+                                       [{'T': 'String', 'Y': 'Note'}])],
+                     None, None, [self.rql, self.system],
+                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.type': 'table0.C1'},
+                     [])
+                    ],
+                   {'x': 999999,})
+
+    def test_crossed_relation_eid_not_1(self):
+        repo._type_source_cache[999999] = ('Note', 'system', 999999)
+        ueid = self.session.user.eid
+        self._test('Any Y WHERE X eid %(x)s, NOT X multisource_crossed_rel Y',
+                   [('FetchStep', [('Any Y WHERE Y is Note', [{'Y': 'Note'}])],
+                     [self.rql, self.system], None, {'Y': 'table0.C0'}, []),
+                    ('OneFetchStep', [('Any Y WHERE NOT 999999 multisource_crossed_rel Y, Y is Note',
+                                       [{'Y': 'Note'}])],
+                     None, None, [self.system],
+                     {'Y': 'table0.C0'},  [])],
+                   {'x': 999999,})
+
+#     def test_crossed_relation_eid_not_2(self):
+#         repo._type_source_cache[999999] = ('Note', 'cards', 999999)
+#         ueid = self.session.user.eid
+#         self._test('Any Y WHERE X eid %(x)s, NOT X multisource_crossed_rel Y',
+#                    [],
+#                    {'x': 999999,})
+
+    def test_crossed_relation_base(self):
+        repo._type_source_cache[999999] = ('Note', 'system', 999999)
+        ueid = self.session.user.eid
+        self._test('Any X,Y,T WHERE X multisource_crossed_rel Y, Y type T, X type T',
+                   [('FetchStep', [('Any X,T WHERE X type T, X is Note', [{'T': 'String', 'X': 'Note'}])],
+                     [self.rql, self.system], None,
+                     {'T': 'table0.C1', 'X': 'table0.C0', 'X.type': 'table0.C1'}, []),
+                    ('FetchStep',  [('Any Y,T WHERE Y type T, Y is Note', [{'T': 'String', 'Y': 'Note'}])],
+                     [self.rql, self.system], None,
+                     {'T': 'table1.C1', 'Y': 'table1.C0', 'Y.type': 'table1.C1'},  []),
+                    ('OneFetchStep', [('Any X,Y,T WHERE X multisource_crossed_rel Y, Y type T, X type T, X is Note, Y is Note',
+                                       [{'T': 'String', 'X': 'Note', 'Y': 'Note'}])],
+                     None, None, [self.rql, self.system],
+                     {'T': 'table1.C1', 'X': 'table0.C0', 'X.type': 'table0.C1',
+                      'Y': 'table1.C0', 'Y.type': 'table1.C1'},
+                    [])],
+                    {'x': 999999,})
         
     # edition queries tests ###################################################