From f17c6102b335e41168809db79f96222fc69894f8 Mon Sep 17 00:00:00 2001
From: Alexander Schlemmer <a.schlemmer@indiscale.com>
Date: Fri, 31 Jan 2025 17:47:26 +0100
Subject: [PATCH] TST: fixed tests due to changes to rocrate feature

---
 src/caoscrawler/converters/rocrate.py | 12 ++++++++----
 unittests/test_rocrate_converter.py   | 19 +++++++++++++------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/caoscrawler/converters/rocrate.py b/src/caoscrawler/converters/rocrate.py
index fe40394..f0140fa 100644
--- a/src/caoscrawler/converters/rocrate.py
+++ b/src/caoscrawler/converters/rocrate.py
@@ -200,12 +200,16 @@ class ROCrateEntityConverter(Converter):
                 # This is - according to the standard - only allowed, if it's flat, i.e.
                 # it contains a single element with key == "@id" and the id as value which
                 # is supposed to be dereferenced:
-                if not (len(value) == 1 and "@id" in eprops):
+                if not (len(value) == 1 and "@id" in value):
                     raise RuntimeError("The JSON-LD is not flat.")
-                children.append(
-                    ROCrateEntity(element.folder, element.entity.crate.dereference(
-                        value["@id"])))
                 # TODO: tests missing!
+                dereferenced = element.entity.crate.dereference(value["@id"])
+                if dereferenced is not None:
+                    children.append(
+                        ROCrateEntity(element.folder, dereferenced))
+                else:
+                    # This is just an external ID and will be added  as simple DictElement
+                    children.append(convert_basic_element(value, name))
             else:
                 children.append(convert_basic_element(value, name))
 
diff --git a/unittests/test_rocrate_converter.py b/unittests/test_rocrate_converter.py
index ebf585f..02f0f60 100644
--- a/unittests/test_rocrate_converter.py
+++ b/unittests/test_rocrate_converter.py
@@ -144,8 +144,8 @@ match_properties:
     assert isinstance(children[0], TextElement)
     assert children[0].name == "@id"
     assert children[0].value == "ro-crate-metadata.json"
-    assert isinstance(children[5], DictElement)
-    assert children[5].value == {'@id': 'https://kadi.iam.kit.edu'}
+    assert isinstance(children[5], ROCrateEntity)
+    assert children[5].name == "https://kadi.iam.kit.edu"
 
 
 def test_file(eln_entities):
@@ -184,13 +184,20 @@ match_properties:
     assert match is not None
 
     children = ds_parts.create_children(GeneralStore(), ent_parts)
+    # Number of children = number of properties + number of parts +
+    #                      number of variables measured + number of files
+    assert len(children) == (len(ent_parts.entity.properties()) +
+                             len(ent_parts.entity.properties()["hasPart"]) +
+                             len(ent_parts.entity.properties()["variableMeasured"]))
 
-    # Number of children = number of properties + number of parts:
-    assert len(children) == len(ent_parts.entity.properties()) + 4
     entity_children = [f for f in children if isinstance(f, ROCrateEntity)]
-    assert len(entity_children) == 4
+    assert len(entity_children) == 13
+    file_counter = 0
+
     for f in entity_children:
-        assert isinstance(f.entity, rocrate.model.file.File)
+        if isinstance(f.entity, rocrate.model.file.File):
+            file_counter += 1
+    assert file_counter == 4
 
 
 def test_scanner():
-- 
GitLab