You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

160 lines
3.7 KiB

  1. import unittest, webnotes
  2. class TestNSM(unittest.TestCase):
  3. def setUp(self):
  4. webnotes.conn.sql("delete from `tabItem Group`")
  5. self.data = [
  6. ["t1", None, 1, 20],
  7. ["c0", "t1", 2, 3],
  8. ["c1", "t1", 4, 11],
  9. ["gc1", "c1", 5, 6],
  10. ["gc2", "c1", 7, 8],
  11. ["gc3", "c1", 9, 10],
  12. ["c2", "t1", 12, 17],
  13. ["gc4", "c2", 13, 14],
  14. ["gc5", "c2", 15, 16],
  15. ["c3", "t1", 18, 19]
  16. ]
  17. for d in self.data:
  18. b = webnotes.bean([{
  19. "doctype": "Item Group", "item_group_name": d[0], "parent_item_group": d[1],
  20. "__islocal": 1, "is_group": "Yes"
  21. }])
  22. b.insert()
  23. self.__dict__[d[0]] = b
  24. self.reload_all()
  25. def reload_all(self, data=None):
  26. for d in data or self.data:
  27. self.__dict__[d[0]].load_from_db()
  28. def test_basic_tree(self, data=None):
  29. for d in data or self.data:
  30. self.assertEquals(self.__dict__[d[0]].doc.lft, d[2])
  31. self.assertEquals(self.__dict__[d[0]].doc.rgt, d[3])
  32. def test_validate_loop_move(self):
  33. self.c1.doc.parent_item_group = 'gc3'
  34. self.assertRaises(webnotes.ValidationError, self.c1.save)
  35. def test_rebuild_tree(self):
  36. from webnotes.utils.nestedset import rebuild_tree
  37. rebuild_tree("Item Group", "parent_item_group")
  38. self.test_basic_tree(self.data)
  39. def test_move_group(self):
  40. self.c1.doc.parent_item_group = 'c2'
  41. self.c1.save()
  42. self.reload_all()
  43. new_tree = [
  44. ["t1", None, 1, 20],
  45. ["c0", "t1", 2, 3],
  46. ["c2", "t1", 4, 17],
  47. ["gc4", "c2", 5, 6],
  48. ["gc5", "c2", 7, 8],
  49. ["c1", "t1", 9, 16],
  50. ["gc1", "c1", 10, 11],
  51. ["gc2", "c1", 12, 13],
  52. ["gc3", "c1", 14, 15],
  53. ["c3", "t1", 18, 19]
  54. ]
  55. self.test_basic_tree(new_tree)
  56. # Move back
  57. self.c1.doc.parent_item_group = 'gc4'
  58. self.c1.save()
  59. self.reload_all()
  60. new_tree = [
  61. ["t1", None, 1, 20],
  62. ["c0", "t1", 2, 3],
  63. ["c2", "t1", 4, 17],
  64. ["gc4", "c2", 5, 14],
  65. ["c1", "t1", 6, 13],
  66. ["gc1", "c1", 7, 8],
  67. ["gc2", "c1", 9, 10],
  68. ["gc3", "c1", 11, 12],
  69. ["gc5", "c2", 15, 16],
  70. ["c3", "t1", 18, 19]
  71. ]
  72. self.test_basic_tree(new_tree)
  73. # Move to root
  74. # self.c1.doc.parent_item_group = ''
  75. # self.c1.save()
  76. # self.reload_all()
  77. #
  78. # new_tree = [
  79. # ["t1", None, 1, 12],
  80. # ["c0", "t1", 2, 3],
  81. # ["c2", "t1", 4, 9],
  82. # ["gc4", "c2", 5, 6],
  83. # ["gc5", "c2", 7, 8],
  84. # ["c3", "t1", 10, 11],
  85. # ["c1", "t1", 13, 20],
  86. # ["gc1", "c1", 14, 15],
  87. # ["gc2", "c1", 16, 17],
  88. # ["gc3", "c1", 18, 19],
  89. # ]
  90. # self.test_basic_tree(new_tree)
  91. # move leaf
  92. self.gc3.doc.parent_item_group = 'c2'
  93. self.gc3.save()
  94. self.reload_all()
  95. new_tree = [
  96. ["t1", None, 1, 20],
  97. ["c0", "t1", 2, 3],
  98. ["c2", "t1", 4, 17],
  99. ["gc4", "c2", 5, 12],
  100. ["c1", "t1", 6, 11],
  101. ["gc1", "c1", 7, 8],
  102. ["gc2", "c1", 9, 10],
  103. ["gc5", "c2", 13, 14],
  104. ["gc3", "c2", 15, 16],
  105. ["c3", "t1", 18, 19]
  106. ]
  107. self.test_basic_tree(new_tree)
  108. # delete leaf
  109. from webnotes.model import delete_doc
  110. delete_doc(self.gc2.doc.doctype, self.gc2.doc.name)
  111. new_tree = [
  112. ["t1", None, 1, 18],
  113. ["c0", "t1", 2, 3],
  114. ["c2", "t1", 4, 15],
  115. ["gc4", "c2", 5, 10],
  116. ["c1", "t1", 6, 9],
  117. ["gc1", "c1", 7, 8],
  118. ["gc5", "c2", 11, 12],
  119. ["gc3", "c2", 13, 14],
  120. ["c3", "t1", 16, 17]
  121. ]
  122. del self.__dict__["gc2"]
  123. self.reload_all(new_tree)
  124. self.test_basic_tree(new_tree)
  125. #print webnotes.conn.sql("""select name, parent_item_group, lft, rgt from `tabItem Group`""")
  126. # for testing
  127. # for d in new_tree:
  128. # doc = self.__dict__[d[0]].doc
  129. # print doc.name, doc.lft, doc.rgt
  130. def tearDown(self):
  131. webnotes.conn.rollback()
  132. if __name__=="__main__":
  133. import webnotes
  134. webnotes.connect()
  135. unittest.main()