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.

180 lines
7.6 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. # Copyright 2020 Coop IT Easy SCRLfs (<http://www.coopiteasy.be>)
  2. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  3. from odoo.exceptions import ValidationError
  4. from odoo.tests.common import TransactionCase
  5. class TestResPartner(TransactionCase):
  6. def setUp(self):
  7. super().setUp()
  8. self.eater1 = self.env.ref("beesdoo_base.eater1")
  9. self.eater2 = self.env.ref("beesdoo_base.eater2")
  10. self.eater3 = self.env.ref("beesdoo_base.eater3")
  11. self.eater4 = self.env.ref("beesdoo_base.eater4")
  12. def test_max_eater_assignment_share_a(self):
  13. """
  14. Test adding eater to a cooperator and raise when max is
  15. reached.
  16. """
  17. coop1 = self.env.ref("beesdoo_base.res_partner_cooperator_1_demo")
  18. coop1.write({"child_eater_ids": [(4, self.eater1.id)]})
  19. self.assertEqual(len(coop1.child_eater_ids), 1)
  20. coop1.write({"child_eater_ids": [(4, self.eater2.id)]})
  21. self.assertEqual(len(coop1.child_eater_ids), 2)
  22. coop1.write({"child_eater_ids": [(4, self.eater3.id)]})
  23. self.assertEqual(len(coop1.child_eater_ids), 3)
  24. with self.assertRaises(ValidationError) as econtext:
  25. coop1.write({"child_eater_ids": [(4, self.eater4.id)]})
  26. self.assertIn("can only set", str(econtext.exception))
  27. # Reset
  28. coop1.write({"child_eater_ids": [(5, None, None)]})
  29. self.assertEqual(len(coop1.child_eater_ids), 0)
  30. # Test by editing parent_eater_id
  31. self.eater1.write({"parent_eater_id": coop1.id})
  32. self.assertEqual(len(coop1.child_eater_ids), 1)
  33. self.eater2.write({"parent_eater_id": coop1.id})
  34. self.assertEqual(len(coop1.child_eater_ids), 2)
  35. self.eater3.write({"parent_eater_id": coop1.id})
  36. self.assertEqual(len(coop1.child_eater_ids), 3)
  37. with self.assertRaises(ValidationError) as econtext:
  38. self.eater4.write({"parent_eater_id": coop1.id})
  39. self.assertIn("can only set", str(econtext.exception))
  40. def test_max_eater_assignment_share_b(self):
  41. """
  42. Test adding eater to a cooperator and raise when max is
  43. reached.
  44. """
  45. coop2 = self.env.ref("beesdoo_base.res_partner_cooperator_2_demo")
  46. coop2.write({"child_eater_ids": [(4, self.eater1.id)]})
  47. self.assertEqual(len(coop2.child_eater_ids), 1)
  48. coop2.write({"child_eater_ids": [(4, self.eater2.id)]})
  49. self.assertEqual(len(coop2.child_eater_ids), 2)
  50. with self.assertRaises(ValidationError) as econtext:
  51. coop2.write({"child_eater_ids": [(4, self.eater3.id)]})
  52. self.assertIn("can only set", str(econtext.exception))
  53. # Reset
  54. coop2.write({"child_eater_ids": [(5, None, None)]})
  55. self.assertEqual(len(coop2.child_eater_ids), 0)
  56. # Test by editing parent_eater_id
  57. self.eater1.write({"parent_eater_id": coop2.id})
  58. self.assertEqual(len(coop2.child_eater_ids), 1)
  59. self.eater2.write({"parent_eater_id": coop2.id})
  60. self.assertEqual(len(coop2.child_eater_ids), 2)
  61. with self.assertRaises(ValidationError) as econtext:
  62. self.eater3.write({"parent_eater_id": coop2.id})
  63. self.assertIn("can only set", str(econtext.exception))
  64. def test_unlimited_eater_assignment_share_c(self):
  65. """
  66. Test that share_c can have an unlimited number of eater.
  67. """
  68. coop3 = self.env.ref("beesdoo_base.res_partner_cooperator_3_demo")
  69. coop3.write({"child_eater_ids": [(4, self.eater1.id)]})
  70. self.assertEqual(len(coop3.child_eater_ids), 1)
  71. coop3.write({"child_eater_ids": [(4, self.eater2.id)]})
  72. self.assertEqual(len(coop3.child_eater_ids), 2)
  73. coop3.write({"child_eater_ids": [(4, self.eater3.id)]})
  74. self.assertEqual(len(coop3.child_eater_ids), 3)
  75. coop3.write({"child_eater_ids": [(4, self.eater4.id)]})
  76. self.assertEqual(len(coop3.child_eater_ids), 4)
  77. def test_share_with_no_eater_assignment_allowed(self):
  78. """
  79. Test that share that doesn't allow eater assignment.
  80. """
  81. share_c = self.env.ref("beesdoo_easy_my_coop.share_c")
  82. share_c.max_nb_eater_allowed = 0
  83. coop3 = self.env.ref("beesdoo_base.res_partner_cooperator_3_demo")
  84. with self.assertRaises(ValidationError) as econtext:
  85. coop3.write({"child_eater_ids": [(4, self.eater3.id)]})
  86. self.assertIn("can only set", str(econtext.exception))
  87. with self.assertRaises(ValidationError) as econtext:
  88. self.eater1.write({"parent_eater_id": coop3.id})
  89. self.assertIn("can only set", str(econtext.exception))
  90. def test_multiple_eater_assignement_share_a(self):
  91. """
  92. Test adding multiple eater in one write.
  93. """
  94. coop1 = self.env.ref("beesdoo_base.res_partner_cooperator_1_demo")
  95. coop1.write(
  96. {
  97. "child_eater_ids": [
  98. (4, self.eater1.id),
  99. (4, self.eater2.id),
  100. (4, self.eater3.id),
  101. ]
  102. }
  103. )
  104. self.assertEqual(len(coop1.child_eater_ids), 3)
  105. def test_parent_assignement_to_eater(self):
  106. """
  107. Test adding a parent to multiple eater in one write from the eater.
  108. """
  109. coop1 = self.env.ref("beesdoo_base.res_partner_cooperator_1_demo")
  110. eaters = self.eater1
  111. eaters |= self.eater2
  112. eaters |= self.eater3
  113. eaters.write({"parent_eater_id": coop1.id})
  114. self.assertEqual(len(coop1.child_eater_ids), 3)
  115. def test_is_worker_share_a(self):
  116. """
  117. Test that a cooperator is a worker based on his share type.
  118. """
  119. coop1 = self.env.ref("beesdoo_base.res_partner_cooperator_1_demo")
  120. # Run computed field
  121. coop1._compute_is_worker()
  122. self.assertEqual(coop1.is_worker, True)
  123. def test_is_worker_share_b(self):
  124. """
  125. Test that a cooperator is a worker based on his share type.
  126. """
  127. coop2 = self.env.ref("beesdoo_base.res_partner_cooperator_2_demo")
  128. # Run computed field
  129. coop2._compute_is_worker()
  130. self.assertEqual(coop2.is_worker, False)
  131. def test_search_worker(self):
  132. """
  133. Test that the search function returns worker based on the
  134. 'is_worker' field.
  135. """
  136. coop1 = self.env.ref("beesdoo_base.res_partner_cooperator_1_demo")
  137. coop2 = self.env.ref("beesdoo_base.res_partner_cooperator_2_demo")
  138. # Run computed field
  139. coop1._compute_is_worker()
  140. coop2._compute_is_worker()
  141. workers = self.env["res.partner"].search([("is_worker", "=", True)])
  142. self.assertIn(coop1, workers)
  143. self.assertNotIn(coop2, workers)
  144. workers = self.env["res.partner"].search([("is_worker", "=", False)])
  145. self.assertNotIn(coop1, workers)
  146. self.assertIn(coop2, workers)
  147. def test_compute_can_shop_share_a(self):
  148. """
  149. Test that a cooperator can shop based on his share type.
  150. """
  151. coop1 = self.env.ref("beesdoo_base.res_partner_cooperator_1_demo")
  152. # Run computed field
  153. coop1._compute_can_shop()
  154. self.assertEqual(coop1.can_shop, True)
  155. # Now unsubscribe the coop
  156. coop1.cooperative_status_ids.status = "resigning"
  157. self.assertEqual(coop1.cooperative_status_ids.can_shop, False)
  158. self.assertEqual(coop1.can_shop, False)
  159. def test_compute_can_shop_share_c(self):
  160. """
  161. Test that a cooperator can shop based on his share type.
  162. """
  163. coop3 = self.env.ref("beesdoo_base.res_partner_cooperator_3_demo")
  164. # Run computed field
  165. coop3._compute_can_shop()
  166. self.assertEqual(coop3.can_shop, False)