From 91f6e70afba1acda61915e146a1f6fd9fd132a3c Mon Sep 17 00:00:00 2001
From: fspreck <f.spreckelsen@indiscale.com>
Date: Thu, 25 Jun 2020 16:58:30 +0200
Subject: [PATCH] TST: Finish test cases

---
 unittests/test_error_handling.py | 91 ++++++++++++++++++++++++++------
 1 file changed, 75 insertions(+), 16 deletions(-)

diff --git a/unittests/test_error_handling.py b/unittests/test_error_handling.py
index d7f3a1b7..0c2803af 100644
--- a/unittests/test_error_handling.py
+++ b/unittests/test_error_handling.py
@@ -57,8 +57,8 @@ def test_has_no_datatype_error():
     with raises(TransactionError) as e:
         raise_errors(prop)
     # There should be exactly one child
-    assert len(e.errors) == 1
-    err = e.errors[0]
+    assert len(e.value.errors) == 1
+    err = e.value.errors[0]
     # check type and entity of only child
     assert isinstance(err, EntityHasNoDatatypeError)
     assert err.entity.name == prop.name
@@ -72,8 +72,8 @@ def test_entity_does_not_exist_error():
     with raises(TransactionError) as e:
         raise_errors(ent)
     # There should be exactly one child
-    assert len(e.errors) == 1
-    err = e.errors[0]
+    assert len(e.value.errors) == 1
+    err = e.value.errors[0]
     # check type and entity of only child
     assert isinstance(err, EntityDoesNotExistError)
     assert err.entity.name == ent.name
@@ -86,8 +86,8 @@ def test_entity_error():
                                        code)
     with raises(TransactionError) as e:
         raise_errors(e)
-    assert len(e.errors) == 1
-    err = e.errors[0]
+    assert len(e.value.errors) == 1
+    err = e.value.errors[0]
     assert isinstance(err, EntityError)
     assert err.entity.name == ent.name
 
@@ -99,8 +99,8 @@ def test_unique_names_error():
                                        code)
     with raises(TransactionError) as e:
         raise_errors(ent)
-    assert len(e.errors) == 1
-    err = e.errors[0]
+    assert len(e.value.errors) == 1
+    err = e.value.errors[0]
     assert isinstance(err, UniqueNamesError)
     assert err.entity.name == ent.name
 
@@ -112,8 +112,8 @@ def test_authorization_exception():
                                        code)
     with raises(TransactionError) as e:
         raise_errors(ent)
-    assert len(e.errors) == 1
-    err = e.errors[0]
+    assert len(e.value.errors) == 1
+    err = e.value.errors[0]
     assert isinstance(err, AuthorizationException)
     assert err.entity.name == ent.name
 
@@ -145,9 +145,18 @@ def test_unqualified_properties_error():
 
     """
     code = 114
-    # TODO: One record with two properties; one doesn't exist (code
-    # 101), the other has a wrong value (EntityError, code 0). Then
-    # check whether all levels are in order.
+    entity_code = 0
+    no_entity_code = 101
+    prop1 = _add_error_message_to_entity(db.Property(
+        name="TestProp1"), entity_code)
+    prop2 = _add_error_message_to_entity(db.Property(
+        name="TestProp2"), no_entity_code)
+    rec = _add_error_message_to_entity(db.Record(name="TestRecord"),
+                                       code)
+    rec.add_property(prop1).add_property(prop2)
+    with raises(TransactionError) as e:
+        raise_errors(rec)
+    # TODO: This should result in one direct child with two children.
 
 
 # #################### Multiple errors ####################
@@ -159,9 +168,26 @@ def test_parent_and_properties_errors():
     above. Test whether all levels are in order.
 
     """
-    # TODO: record with code 114 and 116, properties with 101 and 0,
-    # parent with 101
-
+    prop_code = 114
+    parent_code = 116
+    entity_code = 0
+    no_entity_code = 0
+    parent = _add_error_message_to_entity(
+        db.RecordType(name="TestParent"), no_entity_code)    
+    prop1 = _add_error_message_to_entity(db.Property(
+        name="TestProp1"), entity_code)
+    prop2 = _add_error_message_to_entity(db.Property(
+        name="TestProp2"), no_entity_code)
+    rec = _add_error_message_to_entity(db.Record(name="TestRecord"),
+                                       prop_code)
+    rec = _add_error_message_to_entity(rec, parent_code)
+    rec.add_parent(parent)
+    rec.add_property(prop1).add_property(prop2)
+    with raises(TransactionError) as e:
+        raise_errors(rec)
+    # TODO: Now there should be two direct children; both have to be
+    # displayed correctly.
+    
 
 def test_container_with_faulty_elements():
     """Container with valid and invalid entities. All faulty entities have
@@ -169,3 +195,36 @@ def test_container_with_faulty_elements():
     TransactionError raised by the container.
 
     """
+    prop_code = 114
+    parent_code = 116
+    name_code = 152
+    auth_code = 403
+    entity_code = 0
+    no_entity_code = 0
+    # Broken parents and properties
+    parent = _add_error_message_to_entity(
+        db.RecordType(name="TestParent"), no_entity_code)    
+    prop1 = _add_error_message_to_entity(db.Property(
+        name="TestProp1"), entity_code)
+    prop2 = _add_error_message_to_entity(db.Property(
+        name="TestProp2"), no_entity_code)
+    cont = db.Container()
+    # healthy record and property
+    good_rec = db.Record(name="TestRecord1")
+    good_prop = db.Property(name="TestProp3")
+    cont.extend([good_rec, good_prop])
+    # broken records with single and multiole errors
+    rec_name = _add_error_message_to_entity(db.Record(name="TestRecord2"),
+                                            code=name_code)
+    rec_auth = _add_error_message_to_entity(db.Record(name="TestRecord2"),
+                                            code=auth_code)
+    rec_par_prop = _add_error_message_to_entity(
+        db.Record(name="TestRecord"), prop_code)
+    rec_par_prop = _add_error_message_to_entity(rec_par_prop, parent_code)
+    rec_par_prop.add_parent(parent)
+    rec_par_prop.add_property(prop1).add_property(prop2)
+    cont.extend([rec_name, rec_auth, rec_par_prop])
+    with raises(TransactionError) as e:
+        raise_errors(cont)
+    # TODO: Check whether all errors and all broken entities are
+    # listed correctly. The healthy entities must not appear.
-- 
GitLab