home · contact · privacy
Refactor Conditions GET/POST testing.
[plomtask] / tests / utils.py
index 13e4f949d177a7d73456d2546db9f49de3e33fb1..86d049dac2387b97f441d228ecc3c33e9bfe6552 100644 (file)
@@ -2,6 +2,7 @@
 from unittest import TestCase
 from threading import Thread
 from http.client import HTTPConnection
+from json import loads as json_loads
 from urllib.parse import urlencode
 from uuid import uuid4
 from os import remove as remove_file
@@ -269,20 +270,29 @@ class TestCaseWithServer(TestCaseWithDB):
                         f'/process?id={id_}')
         return form_data
 
-    @staticmethod
-    def blank_history_keys_in(d: dict[str, object]) -> None:
-        """Re-write "history" object keys to bracketed integer strings."""
-        def walk_tree(d: Any) -> Any:
-            if isinstance(d, dict):
-                if 'history' in d.keys():
-                    vals = d['history'].values()
+    def check_json_get(self, path: str, expected: dict[str, object]) -> None:
+        """Compare JSON on GET path with expected.
+
+        To simplify comparison of VersionedAttribute histories, transforms
+        keys under "history"-named dicts into bracketed integer strings
+        counting upwards in chronology.
+        """
+        def rewrite_history_keys_in(item: Any) -> Any:
+            if isinstance(item, dict):
+                if 'history' in item.keys():
+                    vals = item['history'].values()
                     history = {}
                     for i, val in enumerate(vals):
                         history[f'[{i}]'] = val
-                    d['history'] = history
-                for k in list(d.keys()):
-                    walk_tree(d[k])
-            elif isinstance(d, list):
-                d[:] = [walk_tree(i) for i in d]
-            return d
-        walk_tree(d)
+                    item['history'] = history
+                for k in list(item.keys()):
+                    rewrite_history_keys_in(item[k])
+            elif isinstance(item, list):
+                item[:] = [rewrite_history_keys_in(i) for i in item]
+            return item 
+        self.conn.request('GET', path)
+        response = self.conn.getresponse()
+        self.assertEqual(response.status, 200)
+        retrieved = json_loads(response.read().decode())
+        rewrite_history_keys_in(retrieved)
+        self.assertEqual(expected, retrieved)