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.

205 lines
7.9 KiB

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