home · contact · privacy
Overhaul as_dict generation to avoid endless nesting of objects.
[plomtask] / tests / conditions.py
index af5f661d809995e26bdcc681c4dcff73f0fdb7a6..7fdd4d44823d5b80b5a788267f82d26a8c53fa12 100644 (file)
@@ -53,9 +53,7 @@ class TestsWithServer(TestCaseWithServer):
              'is_active': is_active,
              '_versioned': {
                  'title': {},
-                 'description': {}
-                 }
-             }
+                 'description': {}}}
         titles = titles if titles else []
         descriptions = descriptions if descriptions else []
         assert isinstance(d['_versioned'], dict)
@@ -80,12 +78,14 @@ class TestsWithServer(TestCaseWithServer):
                            'disabled_processes': [],
                            'enabling_processes': [],
                            'disabling_processes': [],
-                           'condition': cond}
+                           'condition': cond['id'],
+                           '_library': {'Condition': self.as_refs([cond])}}
         self.check_json_get('/condition?id=1', expected_single)
         # … full /conditions
         expected_all: dict[str, object]
-        expected_all = {'conditions': [cond],
-                        'sort_by': 'title', 'pattern': ''}
+        expected_all = {'conditions': self.as_id_list([cond]),
+                        'sort_by': 'title', 'pattern': '',
+                        '_library': {'Condition': self.as_refs([cond])}}
         self.check_json_get('/conditions', expected_all)
         # test effect of invalid POST to existing Condition on /condition
         self.check_post({}, '/condition?id=1', 400)
@@ -93,17 +93,20 @@ class TestsWithServer(TestCaseWithServer):
         # test effect of POST changing title and activeness
         post = {'title': 'bar', 'description': 'oof', 'is_active': True}
         self.check_post(post, '/condition?id=1', 302)
-        assert isinstance(expected_single['condition'], dict)
-        expected_single['condition']['_versioned']['title'][1] = 'bar'
-        expected_single['condition']['is_active'] = True
+        assert isinstance(cond['_versioned'], dict)
+        cond['_versioned']['title'][1] = 'bar'
+        cond['is_active'] = True
         self.check_json_get('/condition?id=1', expected_single)
         # test deletion POST's effect on …
         self.check_post({'delete': ''}, '/condition?id=1', 302, '/conditions')
         cond = self.cond_as_dict()
-        expected_single['condition'] = cond
+        assert isinstance(expected_single['_library'], dict)
+        assert isinstance(expected_single['_library']['Condition'], dict)
+        expected_single['_library']['Condition'] = self.as_refs([cond])
         self.check_json_get('/condition?id=1', expected_single)
         # … full /conditions
         expected_all['conditions'] = []
+        expected_all['_library'] = {}
         self.check_json_get('/conditions', expected_all)
 
     def test_do_GET_condition(self) -> None:
@@ -122,25 +125,29 @@ class TestsWithServer(TestCaseWithServer):
         cond = self.cond_as_dict(titles=['foo'], descriptions=['oof'])
         proc_1 = self.proc_as_dict(conditions=[cond], disables=[cond])
         proc_2 = self.proc_as_dict(2, 'B', blockers=[cond], enables=[cond])
-        expected_single = {'is_new': False,
-                           'enabled_processes': [proc_1],
-                           'disabled_processes': [proc_2],
-                           'enabling_processes': [proc_2],
-                           'disabling_processes': [proc_1],
-                           'condition': cond}
-        self.check_json_get('/condition?id=1', expected_single)
+        expected = {'is_new': False,
+                    'enabled_processes': self.as_id_list([proc_1]),
+                    'disabled_processes': self.as_id_list([proc_2]),
+                    'enabling_processes': self.as_id_list([proc_2]),
+                    'disabling_processes': self.as_id_list([proc_1]),
+                    'condition': cond['id'],
+                    '_library': {'Condition': self.as_refs([cond]),
+                                 'Process': self.as_refs([proc_1, proc_2])}}
+        self.check_json_get('/condition?id=1', expected)
 
     def test_do_GET_conditions(self) -> None:
         """Test GET /conditions."""
         # test empty result on empty DB, default-settings on empty params
         expected_json: dict[str, object] = {'conditions': [],
                                             'sort_by': 'title',
-                                            'pattern': ''}
+                                            'pattern': '',
+                                            '_library': {}}
         self.check_json_get('/conditions', expected_json)
         # test on meaningless non-empty params (incl. entirely un-used key)
         expected_json = {'conditions': [],
                          'sort_by': 'title',  # nonsense "foo" defaulting
-                         'pattern': 'bar'}  # preserved despite zero effect
+                         'pattern': 'bar',  # preserved despite zero effect
+                         '_library': {}}
         self.check_json_get('/conditions?sort_by=foo&pattern=bar&foo=x',
                             expected_json)
         # test non-empty result, automatic (positive) sorting by title
@@ -154,25 +161,32 @@ class TestsWithServer(TestCaseWithServer):
         cond_2 = self.cond_as_dict(2, titles=['bar'], descriptions=['rab'])
         cond_3 = self.cond_as_dict(3, True, ['baz'], ['zab'])
         cons = [cond_2, cond_3, cond_1]
-        expected_json = {'conditions': cons, 'sort_by': 'title', 'pattern': ''}
+        expected_json = {'conditions': self.as_id_list(cons),
+                         'sort_by': 'title',
+                         'pattern': '',
+                         '_library': {'Condition': self.as_refs(cons)}}
         self.check_json_get('/conditions', expected_json)
         # test other sortings
         # (NB: by .is_active has two items of =False, their order currently
         # is not explicitly made predictable, so mail fail until we do)
-        expected_json['conditions'] = [cond_1, cond_3, cond_2]
+        expected_json['conditions'] = self.as_id_list([cond_1, cond_3, cond_2])
         expected_json['sort_by'] = '-title'
         self.check_json_get('/conditions?sort_by=-title', expected_json)
-        expected_json['conditions'] = [cond_1, cond_2, cond_3]
+        expected_json['conditions'] = self.as_id_list([cond_1, cond_2, cond_3])
         expected_json['sort_by'] = 'is_active'
         self.check_json_get('/conditions?sort_by=is_active', expected_json)
-        expected_json['conditions'] = [cond_3, cond_1, cond_2]
+        expected_json['conditions'] = self.as_id_list([cond_3, cond_1, cond_2])
         expected_json['sort_by'] = '-is_active'
         self.check_json_get('/conditions?sort_by=-is_active', expected_json)
         # test pattern matching on title
-        expected_json = {'conditions': [cond_2, cond_3],
-                         'sort_by': 'title', 'pattern': 'ba'}
+        cons = [cond_2, cond_3]
+        expected_json = {'conditions': self.as_id_list(cons),
+                         'sort_by': 'title', 'pattern': 'ba',
+                         '_library': {'Condition': self.as_refs(cons)}}
         self.check_json_get('/conditions?pattern=ba', expected_json)
         # test pattern matching on description
-        expected_json['conditions'] = [cond_1]
+        expected_json['conditions'] = self.as_id_list([cond_1])
+        assert isinstance(expected_json['_library'], dict)
+        expected_json['_library']['Condition'] = self.as_refs([cond_1])
         expected_json['pattern'] = 'oo'
         self.check_json_get('/conditions?pattern=oo', expected_json)