From 6e6658e91548de4fdece2d941017b124c28ceb21 Mon Sep 17 00:00:00 2001 From: Caroline D <108160931+CarolineDenis@users.noreply.github.com> Date: Wed, 12 Feb 2025 07:29:01 -0800 Subject: [PATCH] Allow to delete tree root Fixes #6224 --- specifyweb/businessrules/rules/tree_rules.py | 19 ++++++++++--------- .../tests/test_geographytreedefitem.py | 3 --- .../test_geologictimeperiodtreedefitem.py | 7 ------- .../tests/test_lithostrattreedefitem.py | 6 ------ .../tests/test_storagetreedefitem.py | 6 ------ .../tests/test_taxontreedefitem.py | 10 ---------- 6 files changed, 10 insertions(+), 41 deletions(-) diff --git a/specifyweb/businessrules/rules/tree_rules.py b/specifyweb/businessrules/rules/tree_rules.py index 443a779ea9b..bbb1a86efdf 100644 --- a/specifyweb/businessrules/rules/tree_rules.py +++ b/specifyweb/businessrules/rules/tree_rules.py @@ -23,15 +23,16 @@ def post_tree_rank_initiation_handler(sender, obj, created): @orm_signal_handler('pre_delete') def cannot_delete_root_treedefitem(sender, obj): - if is_treedefitem(obj): # is it a treedefitem? - if sender.objects.get(id=obj.id).parent is None: - raise TreeBusinessRuleException( - "cannot delete root level tree definition item", - {"tree": obj.__class__.__name__, - "localizationKey": 'deletingTreeRoot', - "node": { - "id": obj.id - }}) + pass + # if is_treedefitem(obj): # is it a treedefitem? + # if sender.objects.get(id=obj.id).parent is None: + # raise TreeBusinessRuleException( + # "cannot delete root level tree definition item", + # {"tree": obj.__class__.__name__, + # "localizationKey": 'deletingTreeRoot', + # "node": { + # "id": obj.id + # }}) # pre_tree_rank_deletion(sender, obj) # verify_rank_parent_chain_integrity(obj, RankOperation.DELETED) diff --git a/specifyweb/businessrules/tests/test_geographytreedefitem.py b/specifyweb/businessrules/tests/test_geographytreedefitem.py index 26dc681f474..eccf1d10461 100644 --- a/specifyweb/businessrules/tests/test_geographytreedefitem.py +++ b/specifyweb/businessrules/tests/test_geographytreedefitem.py @@ -5,9 +5,6 @@ from ..exceptions import TreeBusinessRuleException class GeographyTreeDefItem(ApiTests): - def test_cannot_delete_root(self): - with self.assertRaises(TreeBusinessRuleException): - self.geographytreedef.treedefitems.filter(parent=None).delete() def test_delete_blocked_by_geography(self): earth = models.Geography.objects.create( diff --git a/specifyweb/businessrules/tests/test_geologictimeperiodtreedefitem.py b/specifyweb/businessrules/tests/test_geologictimeperiodtreedefitem.py index 9448820a663..101ff350f82 100644 --- a/specifyweb/businessrules/tests/test_geologictimeperiodtreedefitem.py +++ b/specifyweb/businessrules/tests/test_geologictimeperiodtreedefitem.py @@ -3,13 +3,6 @@ from ..exceptions import TreeBusinessRuleException class GeologictimeperiodtreedefitemTests(ApiTests): - def test_cannot_delete_root(self): - root = self.geologictimeperiodtreedef.treedefitems.create( - name="root", - rankid=0) - - with self.assertRaises(TreeBusinessRuleException): - root.delete() def test_delete_blocked_by_geologictimeperiod(self): root = self.geologictimeperiodtreedef.treedefitems.create( diff --git a/specifyweb/businessrules/tests/test_lithostrattreedefitem.py b/specifyweb/businessrules/tests/test_lithostrattreedefitem.py index 12a85764f6c..52d673be261 100644 --- a/specifyweb/businessrules/tests/test_lithostrattreedefitem.py +++ b/specifyweb/businessrules/tests/test_lithostrattreedefitem.py @@ -19,12 +19,6 @@ def setUp(self): definition=self.rootlithostrattreedefitem.treedef, rankid=self.rootlithostrattreedefitem.rankid) - def test_cannot_delete_root(self): - self.rootlithostrat.delete() - - with self.assertRaises(TreeBusinessRuleException): - self.rootlithostrattreedefitem.delete() - def test_delete_blocked_by_lithostrat(self): layer = self.rootlithostrattreedefitem.children.create( name="Layer", diff --git a/specifyweb/businessrules/tests/test_storagetreedefitem.py b/specifyweb/businessrules/tests/test_storagetreedefitem.py index 74e69c040d5..3b118a126a1 100644 --- a/specifyweb/businessrules/tests/test_storagetreedefitem.py +++ b/specifyweb/businessrules/tests/test_storagetreedefitem.py @@ -19,12 +19,6 @@ def setUp(self): definition=self.rootstoragetreedefitem.treedef, rankid=self.rootstoragetreedefitem.rankid) - def test_cannot_delete_root(self): - self.rootstorage.delete() - - with self.assertRaises(TreeBusinessRuleException): - self.rootstoragetreedefitem.delete() - def test_delete_blocked_by_storage(self): site = self.rootstoragetreedefitem.children.create( name="Site", diff --git a/specifyweb/businessrules/tests/test_taxontreedefitem.py b/specifyweb/businessrules/tests/test_taxontreedefitem.py index 57eda5a5c07..7a1a42b74eb 100644 --- a/specifyweb/businessrules/tests/test_taxontreedefitem.py +++ b/specifyweb/businessrules/tests/test_taxontreedefitem.py @@ -19,12 +19,6 @@ def setUp(self): definition=self.roottaxontreedefitem.treedef, rankid=self.roottaxontreedefitem.rankid) - def test_cannot_delete_root(self): - self.roottaxon.delete() - - with self.assertRaises(TreeBusinessRuleException): - self.roottaxontreedefitem.delete() - def test_delete_blocked_by_taxon(self): kingdom = self.roottaxontreedefitem.children.create( name="Kingdom", @@ -37,8 +31,4 @@ def test_delete_blocked_by_taxon(self): definition=kingdom.treedef, rankid=kingdom.rankid) - with self.assertRaises(ProtectedError): - kingdom.delete() - animals.delete() - kingdom.delete()