Skip to content

Commit

Permalink
Merge pull request #43620 from blaggacao/test/item-group-test-idempot…
Browse files Browse the repository at this point in the history
…ency

test: prepare item group test idempotency
  • Loading branch information
blaggacao authored Oct 12, 2024
2 parents d8b0b92 + 5cc86da commit 727b395
Showing 1 changed file with 46 additions and 44 deletions.
90 changes: 46 additions & 44 deletions erpnext/setup/doctype/item_group/test_item_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,37 +36,22 @@ def test_basic_tree(self, records=None):
parent_lft = min_lft - 1
parent_rgt = max_rgt + 1

self.assertTrue(lft)
self.assertTrue(rgt)
self.assertTrue(lft < rgt)
self.assertTrue(parent_lft < parent_rgt)
self.assertTrue(lft > parent_lft)
self.assertTrue(rgt < parent_rgt)
self.assertTrue(lft >= min_lft)
self.assertTrue(rgt <= max_rgt)

no_of_children = self.get_no_of_children(item_group["item_group_name"])
self.assertTrue(rgt == (lft + 1 + (2 * no_of_children)))

no_of_children = self.get_no_of_children(parent_item_group)
self.assertTrue(parent_rgt == (parent_lft + 1 + (2 * no_of_children)))

def get_no_of_children(self, item_group):
def get_no_of_children(item_groups, no_of_children):
children = []
for ig in item_groups:
children += frappe.db.sql_list(
"""select name from `tabItem Group`
where ifnull(parent_item_group, '')=%s""",
ig or "",
)

if len(children):
return get_no_of_children(children, no_of_children + len(children))
else:
return no_of_children

return get_no_of_children([item_group], 0)
self.assertTrue(lft, "has no lft")
self.assertTrue(rgt, "has no rgt")
self.assertTrue(lft < rgt, "lft >= rgt")
self.assertTrue(parent_lft < parent_rgt, "parent_lft >= parent_rgt")
self.assertTrue(lft > parent_lft, "lft <= parent_lft")
self.assertTrue(rgt < parent_rgt, "rgt >= parent_rgt")
self.assertTrue(lft >= min_lft, "lft < min_lft")
self.assertTrue(rgt <= max_rgt, "rgs > max_rgt")

no_of_children = self._get_no_of_children(item_group["item_group_name"])
self.assertTrue(rgt == (lft + 1 + (2 * no_of_children)), "rgt is not lft + 1 + (2 * #children)")

no_of_children = self._get_no_of_children(parent_item_group)
self.assertTrue(
parent_rgt == (parent_lft + 1 + (2 * no_of_children)), "parent_rgs is not 1 + (2 * #children)"
)

def test_recursion(self):
group_b = frappe.get_doc("Item Group", "_Test Item Group B")
Expand All @@ -81,12 +66,6 @@ def test_rebuild_tree(self):
rebuild_tree("Item Group")
self.test_basic_tree()

def move_it_back(self):
group_b = frappe.get_doc("Item Group", "_Test Item Group B")
group_b.parent_item_group = "All Item Groups"
group_b.save()
self.test_basic_tree()

def test_move_group_into_another(self):
# before move
old_lft, old_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
Expand All @@ -108,7 +87,7 @@ def test_move_group_into_another(self):
# adjacent siblings, hence rgt diff will be 0
self.assertEqual(new_rgt - old_rgt, 0)

self.move_it_back()
self._move_it_back()

def test_move_group_into_root(self):
group_b = frappe.get_doc("Item Group", "_Test Item Group B")
Expand All @@ -118,12 +97,7 @@ def test_move_group_into_root(self):
# trick! works because it hasn't been rolled back :D
self.test_basic_tree()

self.move_it_back()

def print_tree(self):
import json

print(json.dumps(frappe.db.sql("select name, lft, rgt from `tabItem Group` order by lft"), indent=1))
self._move_it_back()

def test_move_leaf_into_another_group(self):
# before move
Expand Down Expand Up @@ -233,3 +207,31 @@ def test_merge_group_into_leaf(self):
"_Test Item Group B - 3",
merge=True,
)

def _move_it_back(self):
group_b = frappe.get_doc("Item Group", "_Test Item Group B")
group_b.parent_item_group = "All Item Groups"
group_b.save()
self.test_basic_tree()

def _get_no_of_children(self, item_group):
def get_no_of_children(item_groups, no_of_children):
children = []
for ig in item_groups:
children += frappe.db.sql_list(
"""select name from `tabItem Group`
where ifnull(parent_item_group, '')=%s""",
ig or "",
)

if len(children):
return get_no_of_children(children, no_of_children + len(children))
else:
return no_of_children

return get_no_of_children([item_group], 0)

def _print_tree(self):
import json

print(json.dumps(frappe.db.sql("select name, lft, rgt from `tabItem Group` order by lft"), indent=1))

0 comments on commit 727b395

Please sign in to comment.