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.

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