From 31fa2ba10d7eadd90e853021257e9d6642a8e9e9 Mon Sep 17 00:00:00 2001
From: Florian Spreckelsen <f.spreckelsen@indiscale.com>
Date: Mon, 29 Apr 2024 15:38:21 +0200
Subject: [PATCH] ENH: Test unique keyword for Entity.update_acl

---
 tests/test_permissions.py | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/tests/test_permissions.py b/tests/test_permissions.py
index 7fffb27..17c5d2d 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
-- 
GitLab