diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py index 960af63b22f4406304b9d31631cdadb523e5660f..81fe351f21c172f4650befe516d3833d103e5d3c 100644 --- a/tests/test_issues_server.py +++ b/tests/test_issues_server.py @@ -1178,6 +1178,84 @@ def test_192(): assert count8 == 1 +def test_196a(): + """See https://gitlab.com/caosdb/caosdb-server/-/issues/196""" + admin._insert_role(name=CURATOR_ROLE, description="Desc") + + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Grant", permission="TRANSACTION:*") + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + admin._insert_user(name="TestUser", password="Password1!", status="ACTIVE") + admin._set_roles(username="TestUser", roles=[CURATOR_ROLE]) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + # works + db.RecordType(name="TestRT1").insert() + db.Property(name="TestProp1", datatype=db.TEXT).insert() + + # Deny TRANSACTION:INSERT:PROPERTY + db.configure_connection() + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Deny", permission="TRANSACTION:INSERT:PROPERTY") + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + + # it is still allowed to insert a record type... + db.RecordType(name="TestRT2").insert() + + # fails + with pytest.raises(TransactionError) as cm: + # this should fail because the curator doesn't have TRANSACTION:INSERT:PROPERTY + db.Property(name="TestProp2", datatype=db.TEXT).insert() + assert cm.value.errors[0].msg == "You are not allowed to do this." + + +@pytest.mark.parametrize("deny", ["TRANSACTION:INSERT:", "TRANSACTION:INSERT:*"]) +def test_196b(deny): + """Same as test_196a but we completely deny insertion.""" + admin._insert_role(name=CURATOR_ROLE, description="Desc") + + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Grant", permission="TRANSACTION:*") + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + admin._insert_user(name="TestUser", password="Password1!", status="ACTIVE") + admin._set_roles(username="TestUser", roles=[CURATOR_ROLE]) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + # works + db.RecordType(name="TestRT1").insert() + db.Property(name="TestProp1", datatype=db.TEXT).insert() + + # Deny TRANSACTION:INSERT + db.configure_connection() + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Deny", permission=deny) + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + + # fails (in contrast to test_196a) + with pytest.raises(TransactionError) as cm: + # this should fail because the curator doesn't have TRANSACTION:INSERT:RECORDTYPE + db.RecordType(name="TestRT2").insert() + assert cm.value.errors[0].msg == "You are not allowed to do this." + + # fails + with pytest.raises(TransactionError) as cm: + # this should fail because the curator doesn't have TRANSACTION:INSERT:PROPERTY + db.Property(name="TestProp2", datatype=db.TEXT).insert() + assert cm.value.errors[0].msg == "You are not allowed to do this." + + @pytest.mark.xfail(reason="fix needed") @pytest.mark.parametrize("num", ["1e+23", "5e22", "2e-323"]) def test_143(num): @@ -1225,4 +1303,4 @@ def test_166(): name="RT5").add_parent("notexists").add_property( "exists_property", 234243).insert() - assert [e.msg for e in cm.value.errors] == ["Entity has unqualified parents."] + assert [e.msg for e in cm.value.errors] == ["Entity has unqualified parents."] \ No newline at end of file