From 089b8804e5c3a82936771e851c5c007985dc3e1f Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Thu, 26 Nov 2020 04:41:04 +0100
Subject: [PATCH] WIP: entity state

---
 tests/test_state.py | 43 +++++++++++++++++++++++++++++++++++++++----
 1 file changed, 39 insertions(+), 4 deletions(-)

diff --git a/tests/test_state.py b/tests/test_state.py
index 780f45e..2e520fb 100644
--- a/tests/test_state.py
+++ b/tests/test_state.py
@@ -746,15 +746,14 @@ def test_unauthorized_initial():
         # it is not allowed to "steal" the entity with the state feature
         rec.update(sync = False)
     assert "You are not allowed to do this." in str(exc.value)
-    rec_retrieve = db.Record(id=rec.id).retrieve(flags={"ACL": None})
+    rec_retrieve = db.Record(id=rec.id).retrieve()
     assert rec_retrieve.state is None
 
     # we need to give ownership to "team-leader"
     switch_to_admin_user()
-    rec_update = rec_retrieve
-    print(rec_update.acl)
+    rec_update = db.Record(id=rec.id).retrieve(flags={"ACL": None})
     rec_update.acl.grant(role="team-leader", permission="EDIT:ACL")
-    print(rec_update.acl)
+    rec_update.acl.grant(role="team-leader", permission="RETRIEVE:ACL")
     rec_update.update_acl()
 
     switch_to_test_user("team-leader")
@@ -763,3 +762,39 @@ def test_unauthorized_initial():
 
     rec_retrieve = db.Record(id=rec.id).retrieve()
     assert rec_retrieve.state == db.State(model="Model1", name="State1")
+
+@pytest.mark.xfail(reason="This is a very special corner case bug with low severity")
+def test_transitions_included_after_empty_update():
+    rec = db.Record()
+    rec.description = "old description"
+    rec.add_parent("TestRT")
+    rec.state = db.State(model="Model1", name="State1")
+    rec_insert = rec.insert(sync=False)
+
+    assert rec_insert.state.transitions is not None
+    assert rec_insert.state.transitions == {db.Transition(name="Transition1",
+                                                          from_state="State1",
+                                                          to_state="State2")}
+
+    rec_insert.description = "new_description"
+    rec_insert.state = db.State(model="Model1", name="State2")
+    rec_update = rec_insert.update(sync=False)
+    assert rec_update.state.transitions is not None
+    assert rec_update.state.transitions == {db.Transition(name="Transition2",
+                                                          from_state="State2",
+                                                          to_state="State3"),
+                                            db.Transition(name="Transition4",
+                                                          from_state="State2",
+                                                          to_state="State2")}
+
+
+    rec_update_2 = rec_update.update(sync=False)
+
+    # this fails
+    assert rec_update_2.state.transitions is not None
+    assert rec_update_2.state.transitions == {db.Transition(name="Transition1",
+                                                            from_state="State1",
+                                                            to_state="State2"),
+                                              db.Transition(name="Transition4",
+                                                            from_state="State2",
+                                                            to_state="State2")}
-- 
GitLab