160 lines
No EOL
3.7 KiB
Python
160 lines
No EOL
3.7 KiB
Python
import unittest, webnotes
|
|
|
|
class TestNSM(unittest.TestCase):
|
|
def setUp(self):
|
|
webnotes.conn.sql("delete from `tabItem Group`")
|
|
self.data = [
|
|
["t1", None, 1, 20],
|
|
["c0", "t1", 2, 3],
|
|
["c1", "t1", 4, 11],
|
|
["gc1", "c1", 5, 6],
|
|
["gc2", "c1", 7, 8],
|
|
["gc3", "c1", 9, 10],
|
|
["c2", "t1", 12, 17],
|
|
["gc4", "c2", 13, 14],
|
|
["gc5", "c2", 15, 16],
|
|
["c3", "t1", 18, 19]
|
|
]
|
|
|
|
for d in self.data:
|
|
b = webnotes.bean([{
|
|
"doctype": "Item Group", "item_group_name": d[0], "parent_item_group": d[1],
|
|
"__islocal": 1, "is_group": "Yes"
|
|
}])
|
|
b.insert()
|
|
self.__dict__[d[0]] = b
|
|
|
|
|
|
self.reload_all()
|
|
|
|
def reload_all(self, data=None):
|
|
for d in data or self.data:
|
|
self.__dict__[d[0]].load_from_db()
|
|
|
|
def test_basic_tree(self, data=None):
|
|
for d in data or self.data:
|
|
self.assertEquals(self.__dict__[d[0]].doc.lft, d[2])
|
|
self.assertEquals(self.__dict__[d[0]].doc.rgt, d[3])
|
|
|
|
def test_validate_loop_move(self):
|
|
self.c1.doc.parent_item_group = 'gc3'
|
|
self.assertRaises(webnotes.ValidationError, self.c1.save)
|
|
|
|
def test_rebuild_tree(self):
|
|
from webnotes.utils.nestedset import rebuild_tree
|
|
rebuild_tree("Item Group", "parent_item_group")
|
|
self.test_basic_tree(self.data)
|
|
|
|
def test_move_group(self):
|
|
self.c1.doc.parent_item_group = 'c2'
|
|
self.c1.save()
|
|
self.reload_all()
|
|
|
|
new_tree = [
|
|
["t1", None, 1, 20],
|
|
["c0", "t1", 2, 3],
|
|
["c2", "t1", 4, 17],
|
|
["gc4", "c2", 5, 6],
|
|
["gc5", "c2", 7, 8],
|
|
["c1", "t1", 9, 16],
|
|
["gc1", "c1", 10, 11],
|
|
["gc2", "c1", 12, 13],
|
|
["gc3", "c1", 14, 15],
|
|
["c3", "t1", 18, 19]
|
|
]
|
|
self.test_basic_tree(new_tree)
|
|
|
|
# Move back
|
|
|
|
self.c1.doc.parent_item_group = 'gc4'
|
|
self.c1.save()
|
|
self.reload_all()
|
|
|
|
new_tree = [
|
|
["t1", None, 1, 20],
|
|
["c0", "t1", 2, 3],
|
|
["c2", "t1", 4, 17],
|
|
["gc4", "c2", 5, 14],
|
|
["c1", "t1", 6, 13],
|
|
["gc1", "c1", 7, 8],
|
|
["gc2", "c1", 9, 10],
|
|
["gc3", "c1", 11, 12],
|
|
["gc5", "c2", 15, 16],
|
|
["c3", "t1", 18, 19]
|
|
]
|
|
self.test_basic_tree(new_tree)
|
|
|
|
# Move to root
|
|
|
|
# self.c1.doc.parent_item_group = ''
|
|
# self.c1.save()
|
|
# self.reload_all()
|
|
#
|
|
# new_tree = [
|
|
# ["t1", None, 1, 12],
|
|
# ["c0", "t1", 2, 3],
|
|
# ["c2", "t1", 4, 9],
|
|
# ["gc4", "c2", 5, 6],
|
|
# ["gc5", "c2", 7, 8],
|
|
# ["c3", "t1", 10, 11],
|
|
# ["c1", "t1", 13, 20],
|
|
# ["gc1", "c1", 14, 15],
|
|
# ["gc2", "c1", 16, 17],
|
|
# ["gc3", "c1", 18, 19],
|
|
# ]
|
|
# self.test_basic_tree(new_tree)
|
|
|
|
# move leaf
|
|
self.gc3.doc.parent_item_group = 'c2'
|
|
self.gc3.save()
|
|
self.reload_all()
|
|
|
|
new_tree = [
|
|
["t1", None, 1, 20],
|
|
["c0", "t1", 2, 3],
|
|
["c2", "t1", 4, 17],
|
|
["gc4", "c2", 5, 12],
|
|
["c1", "t1", 6, 11],
|
|
["gc1", "c1", 7, 8],
|
|
["gc2", "c1", 9, 10],
|
|
["gc5", "c2", 13, 14],
|
|
["gc3", "c2", 15, 16],
|
|
["c3", "t1", 18, 19]
|
|
]
|
|
self.test_basic_tree(new_tree)
|
|
|
|
# delete leaf
|
|
from webnotes.model import delete_doc
|
|
delete_doc(self.gc2.doc.doctype, self.gc2.doc.name)
|
|
|
|
new_tree = [
|
|
["t1", None, 1, 18],
|
|
["c0", "t1", 2, 3],
|
|
["c2", "t1", 4, 15],
|
|
["gc4", "c2", 5, 10],
|
|
["c1", "t1", 6, 9],
|
|
["gc1", "c1", 7, 8],
|
|
["gc5", "c2", 11, 12],
|
|
["gc3", "c2", 13, 14],
|
|
["c3", "t1", 16, 17]
|
|
]
|
|
|
|
del self.__dict__["gc2"]
|
|
self.reload_all(new_tree)
|
|
self.test_basic_tree(new_tree)
|
|
|
|
#print webnotes.conn.sql("""select name, parent_item_group, lft, rgt from `tabItem Group`""")
|
|
|
|
# for testing
|
|
# for d in new_tree:
|
|
# doc = self.__dict__[d[0]].doc
|
|
# print doc.name, doc.lft, doc.rgt
|
|
|
|
def tearDown(self):
|
|
webnotes.conn.rollback()
|
|
|
|
if __name__=="__main__":
|
|
import webnotes
|
|
webnotes.connect()
|
|
|
|
unittest.main() |