From 002737f06005b79d2898d418d4d5455ad925e0a0 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Fri, 20 Nov 2020 01:25:11 +0100 Subject: [PATCH] more transition permission tests --- tests/test_state.py | 62 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/tests/test_state.py b/tests/test_state.py index a7b888e..8741d33 100644 --- a/tests/test_state.py +++ b/tests/test_state.py @@ -55,7 +55,7 @@ def setup_users(): db.administration.PermissionRule( "Grant", "TRANSACTION:*"), db.administration.PermissionRule( - "Grant", "STATE:TRANSITION:*"), + "Grant", "STATE:*"), ]) @@ -701,3 +701,63 @@ def test_automatic_record_state(): rec_retrieve = db.Record(id=rec.id).retrieve() assert rec_retrieve.state == db.State(model="Model1", name="State1") + + +def test_unauthorized_final(): + rec = db.Record().add_parent("TestRT") + rec.state = db.State(model="Model1", name="State1") + rec.insert() + + switch_to_test_user("normal") + rec.state = None + with pytest.raises(db.TransactionError) as exc: + rec.update(sync = False) + assert "You are not allowed to do this." in str(exc.value) + + rec_retrieve = db.Record(id=rec.id).retrieve() + assert rec_retrieve.state == db.State(model="Model1", name="State1") + + switch_to_test_user("team-leader") + rec.update() + + assert rec.state is None + + rec_retrieve = db.Record(id=rec.id).retrieve() + assert rec_retrieve.state is None + + +def test_unauthorized_initial(): + rec = db.Record().add_parent("TestRT") + rec.insert() + + switch_to_test_user("normal") + rec.state = db.State(model="Model1", name="State1") + with pytest.raises(db.TransactionError) as exc: + # normal user lacks the permission for the initial state + rec.update(sync = False) + assert "You are not allowed to do this." in str(exc.value) + rec_retrieve = db.Record(id=rec.id).retrieve() + assert rec_retrieve.state is None + + switch_to_test_user("team-leader") + with pytest.raises(db.TransactionError) as exc: + # 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}) + 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.acl.grant(role="team-leader", permission="EDIT:ACL") + print(rec_update.acl) + rec_update.update_acl() + + switch_to_test_user("team-leader") + rec.update(sync = False) + assert rec.state == db.State(model="Model1", name="State1") + + rec_retrieve = db.Record(id=rec.id).retrieve() + assert rec_retrieve.state == db.State(model="Model1", name="State1") -- GitLab