From 6f420b3bf2384a4a4e96bdbd139d382d64b4e08a Mon Sep 17 00:00:00 2001
From: Daniel <d.hornung@indiscale.com>
Date: Thu, 23 Nov 2023 17:32:45 +0100
Subject: [PATCH] ENH: More description in JSX

---
 src/caosadvancedtools/json_schema_exporter.py |  2 +
 unittests/test_json_schema_exporter.py        | 39 +++++++++++--------
 2 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/src/caosadvancedtools/json_schema_exporter.py b/src/caosadvancedtools/json_schema_exporter.py
index 0d9b9bcf..4e24861f 100644
--- a/src/caosadvancedtools/json_schema_exporter.py
+++ b/src/caosadvancedtools/json_schema_exporter.py
@@ -368,6 +368,8 @@ class JsonSchemaExporter:
 
         schema["required"] = self._make_required_list(rt)
         schema["additionalProperties"] = self._additional_properties
+        if rt.description:
+            schema["description"] = rt.description
 
         if rt.name:
             schema["title"] = rt.name
diff --git a/unittests/test_json_schema_exporter.py b/unittests/test_json_schema_exporter.py
index 5b3cd416..343075b8 100644
--- a/unittests/test_json_schema_exporter.py
+++ b/unittests/test_json_schema_exporter.py
@@ -36,14 +36,26 @@ from unittest.mock import Mock, patch
 from caosadvancedtools.json_schema_exporter import recordtype_to_json_schema as rtjs
 from caosadvancedtools.models.parser import parse_model_from_string
 
-RT1 = parse_model_from_string("""
+GLOBAL_MODEL = parse_model_from_string("""
 RT1:
   description: some description
   obligatory_properties:
     some_date:
       datatype: DATETIME
       description: Just some date
-""").get_deep("RT1")
+RT21:
+  obligatory_properties:
+    RT1:
+      datatype: LIST<RT1>
+RT31:
+  obligatory_properties:
+    RT1:
+
+""")
+
+RT1 = GLOBAL_MODEL.get_deep("RT1")
+RT21 = GLOBAL_MODEL.get_deep("RT21")
+RT31 = GLOBAL_MODEL.get_deep("RT31")
 
 
 def _mock_execute_query(query_string, unique=False, **kwargs):
@@ -82,24 +94,15 @@ def _mock_execute_query(query_string, unique=False, **kwargs):
     elif query_string == "FIND RECORDTYPE WITH name='RT1'" and unique is True:
         return RT1
     elif query_string == "FIND RECORDTYPE WITH name='RT21'" and unique is True:
-        model_str = """
-RT1:
-RT21:
-  obligatory_properties:
-    RT1:
-      datatype: LIST<RT1>
-RT3:
-  obligatory_properties:
-    RT21:
-    """
-        model = parse_model_from_string(model_str)
-        return model.get_deep("RT21")
+        return RT21
+    elif query_string == "FIND RECORDTYPE WITH name='RT31'" and unique is True:
+        return RT31
     elif query_string == "SELECT name, id FROM RECORD":
         return all_records
     elif query_string == "SELECT name, id FROM FILE":
         return all_files
     else:
-        # print(f"Query string: {query_string}")
+        print(f"Query string: {query_string}")
         if unique is True:
             return db.Entity()
         return db.Container()
@@ -642,6 +645,7 @@ RT2:
     "some_date"
   ],
   "additionalProperties": true,
+  "description": "some description",
   "title": "RT1",
   "properties": {
     "some_date": {
@@ -658,8 +662,7 @@ RT2:
       ]
     }
   },
-  "$schema": "https://json-schema.org/draft/2020-12/schema",
-  "description": "some description"
+  "$schema": "https://json-schema.org/draft/2020-12/schema"
 }"""
     # Second test: with reference
     rt2_deep = model.get_deep("RT2")
@@ -688,6 +691,7 @@ RT2:
             "some_date"
           ],
           "additionalProperties": true,
+          "description": "some description",
           "title": "Create new",
           "properties": {
             "some_date": {
@@ -958,6 +962,7 @@ RT3:
             == "{'RT1': {'ui:widget': 'checkboxes', 'ui:options': {'inline': True}}}")
 
 
+@patch("linkahead.execute_query", new=Mock(side_effect=_mock_execute_query))
 def test_schema_customization_with_dicts():
     """Testing the ``additional_json_schema`` and ``additional_ui_schema`` parameters."""
     model_str = """
-- 
GitLab