From 3e8c7b331dab4bec62830794a104b58301ebffa9 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Wed, 14 Dec 2022 15:22:45 +0100
Subject: [PATCH] TST: add xfail test for caosdb-server#181

---
 tests/test_issues_server.py | 57 +++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py
index ddc87b9..3a40609 100644
--- a/tests/test_issues_server.py
+++ b/tests/test_issues_server.py
@@ -1134,3 +1134,60 @@ def test_135():
     r1 = db.Record().add_parent("TestRT1").insert()
     r2 = db.Record().add_parent("TestRT1").add_property("TestProp", r1).insert()
     assert len(db.execute_query("FIND ENTITY WHICH IS REFERENCED BY A TestRT1 AS TestProp")) == 1
+
+
+@pytest.mark.xfail(reason="Fix https://gitlab.com/caosdb/caosdb-server/-/issues/181")
+def test_181():
+    """Upper-case "From" in transistion throws NullPointerException."""
+    def setup_state_machine():
+        db.RecordType("State").insert()
+        db.RecordType("StateModel").insert()
+        db.RecordType("Transition").insert()
+        db.Property(name="From", datatype="State").insert() ## this is the bug:
+        db.Property(name="to", datatype="State").insert()
+        db.Property(name="initial", datatype="State").insert()
+        db.Property(name="final", datatype="State").insert()
+
+
+    def create_transition(name, fro, to):
+        db.Record(name).add_parent("Transition").add_property(
+            "From", fro).add_property("to", to).insert()
+
+
+    def create_state_model(name, transitions, initial, final):
+        m = db.Record(name)
+        m.add_parent("StateModel")
+        m.add_property("Transition",
+                       datatype=db.LIST("Transition"),
+                       value=transitions)
+        m.add_property("initial", initial)
+        m.add_property("final", final)
+        m.insert()
+
+    setup_state_machine()
+
+    # two states
+    db.Record("S1").add_parent("State").insert()
+    db.Record("S2").add_parent("State").insert()
+
+    # three transitions
+    create_transition("t11", "S1", "S1")
+    create_transition("t12", "S1", "S2")
+    create_transition("t21", "S2", "S1")
+
+    create_state_model("Model1", ["t11", "t12", "t21"], "S1", "S1")
+
+    # stateful record type
+    rt = db.RecordType("TestRT")
+    rt.state = db.State(model="Model1", name="S1")
+    rt.insert()
+
+    # record inherits the state from the record type.
+    rec = db.Record().add_parent("TestRT")
+    rec.insert()
+    assert rec.state == db.State(model="Model1", name="S1")
+
+    # now try to update the record without changing the state.
+    p = db.Property("p1", datatype=db.TEXT).insert()
+    rec.add_property(p, value="val1").update()
+
-- 
GitLab