diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 7fffb273fc40bec37202d445c32330d2792188a5..17c5d2d07e9fc7a6ab89916305e3548ac5296885 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -1350,3 +1350,33 @@ def test_select_query_with_invisible_reference(): values = select_results.get_property_values(*value_args)[0] assert values[0] is None assert values[1] is None + + +def test_update_acl_with_unique(): + + rt = db.RecordType(name="TestType").insert() + # Name duplicate + rec1 = db.Record(name="TestRec").add_parent(rt).insert() + # This should be invisible to test at first: + rec1.retrieve(flags={"ACL": None}) + rec1.deny(username=test_user, priority=False, permission="RETRIEVE:*") + rec1.update_acl() + rec2 = db.Record(name="TestRec").add_parent(rt).insert(unique=False) + switch_to_test_user() + with raises(db.TransactionError): + # Should be invisible to test user here + rec = db.Record(id=rec1.id).retrieve() + switch_to_admin_user() + rec1.retrieve(flags={"ACL": None}) + rec1.grant(username=test_user, priority=True, permission="RETRIEVE:*") + with raises(db.TransactionError): + # This should fail due to name collision + rec1.update_acl() + # This shouldn't + rec1.update_acl(unique=False) + + # test user should be able to see this + switch_to_test_user() + rec = db.Record(id=rec1.id).retrieve() + assert rec.name == rec1.name + assert rec.name == rec2.name