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.

199 lines
6.9 KiB

9 years ago
  1. # -*- coding: utf-8 -*-
  2. # Copyright 2015 Camptocamp SA
  3. # Copyright 2016 Therp BV
  4. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  5. from openerp import fields
  6. from openerp.tests import common
  7. from openerp.exceptions import ValidationError
  8. class TestPartnerRelation(common.TransactionCase):
  9. def setUp(self):
  10. super(TestPartnerRelation, self).setUp()
  11. self.partner_model = self.env['res.partner']
  12. self.relation_type_model = self.env['res.partner.relation.type']
  13. self.relation_model = self.env['res.partner.relation']
  14. self.partner_1 = self.partner_model.create({
  15. 'name': 'Test User 1',
  16. 'is_company': False,
  17. })
  18. self.partner_2 = self.partner_model.create({
  19. 'name': 'Test Company',
  20. 'is_company': True,
  21. })
  22. self.relation_allow = self.relation_type_model.create({
  23. 'name': 'allow',
  24. 'name_inverse': 'allow_inverse',
  25. 'contact_type_left': 'p',
  26. 'contact_type_right': 'p',
  27. 'allow_self': True
  28. })
  29. self.relation_disallow = self.relation_type_model.create({
  30. 'name': 'disallow',
  31. 'name_inverse': 'disallow_inverse',
  32. 'contact_type_left': 'p',
  33. 'contact_type_right': 'p',
  34. 'allow_self': False
  35. })
  36. self.relation_default = self.relation_type_model.create({
  37. 'name': 'default',
  38. 'name_inverse': 'default_inverse',
  39. 'contact_type_left': 'p',
  40. 'contact_type_right': 'p',
  41. })
  42. self.relation_mixed = self.relation_type_model.create({
  43. 'name': 'mixed',
  44. 'name_inverse': 'mixed_inverse',
  45. 'contact_type_left': 'c',
  46. 'contact_type_right': 'p',
  47. })
  48. self.relation_symmetric = self.relation_type_model.create({
  49. 'name': 'sym',
  50. 'name_inverse': 'sym',
  51. 'symmetric': True,
  52. })
  53. def test_self_allowed(self):
  54. self.relation_model.create({
  55. 'type_id': self.relation_allow.id,
  56. 'left_partner_id': self.partner_1.id,
  57. 'right_partner_id': self.partner_1.id,
  58. })
  59. def test_self_disallowed(self):
  60. with self.assertRaises(ValidationError):
  61. self.relation_model.create({
  62. 'type_id': self.relation_disallow.id,
  63. 'left_partner_id': self.partner_1.id,
  64. 'right_partner_id': self.partner_1.id,
  65. })
  66. def test_self_default(self):
  67. with self.assertRaises(ValidationError):
  68. self.relation_model.create({
  69. 'type_id': self.relation_default.id,
  70. 'left_partner_id': self.partner_1.id,
  71. 'right_partner_id': self.partner_1.id,
  72. })
  73. def test_self_mixed(self):
  74. with self.assertRaises(ValidationError):
  75. self.relation_model.create({
  76. 'type_id': self.relation_mixed.id,
  77. 'left_partner_id': self.partner_1.id,
  78. 'right_partner_id': self.partner_2.id,
  79. })
  80. def test_searching(self):
  81. relation = self.relation_model.create({
  82. 'type_id': self.relation_mixed.id,
  83. 'left_partner_id': self.partner_2.id,
  84. 'right_partner_id': self.partner_1.id,
  85. })
  86. partners = self.env['res.partner'].search([
  87. ('search_relation_id', '=', relation.type_selection_id.id)
  88. ])
  89. self.assertTrue(self.partner_2 in partners)
  90. partners = self.env['res.partner'].search([
  91. ('search_relation_id', '!=', relation.type_selection_id.id)
  92. ])
  93. self.assertTrue(self.partner_1 in partners)
  94. partners = self.env['res.partner'].search([
  95. ('search_relation_id', '=', self.relation_mixed.name)
  96. ])
  97. self.assertTrue(self.partner_1 in partners)
  98. self.assertTrue(self.partner_2 in partners)
  99. partners = self.env['res.partner'].search([
  100. ('search_relation_id', '=', 'unknown relation')
  101. ])
  102. self.assertFalse(partners)
  103. partners = self.env['res.partner'].search([
  104. ('search_relation_partner_id', '=', self.partner_2.id),
  105. ])
  106. self.assertTrue(self.partner_1 in partners)
  107. partners = self.env['res.partner'].search([
  108. ('search_relation_date', '=', fields.Date.today()),
  109. ])
  110. self.assertTrue(self.partner_1 in partners)
  111. self.assertTrue(self.partner_2 in partners)
  112. def test_ui_functions(self):
  113. relation = self.relation_model.create({
  114. 'type_id': self.relation_mixed.id,
  115. 'left_partner_id': self.partner_2.id,
  116. 'right_partner_id': self.partner_1.id,
  117. })
  118. self.assertEqual(relation.type_selection_id.type_id, relation.type_id)
  119. relation = relation.with_context(
  120. active_id=self.partner_1.id,
  121. active_ids=self.partner_1.ids,
  122. active_model='res.partner.relation',
  123. )
  124. relation.read()
  125. domain = relation._onchange_type_selection_id()['domain']
  126. self.assertTrue(
  127. ('is_company', '=', True) in domain['partner_id_display']
  128. )
  129. relation.write({
  130. 'type_selection_id': relation.type_selection_id.id,
  131. })
  132. action = relation.get_action_related_partners()
  133. self.assertTrue(self.partner_1.id in action['domain'][0][2])
  134. def test_relation_all(self):
  135. relation_all_record = self.env['res.partner.relation.all']\
  136. .with_context(
  137. active_id=self.partner_2.id,
  138. active_ids=self.partner_2.ids,
  139. ).create({
  140. 'other_partner_id': self.partner_1.id,
  141. 'type_selection_id': self.relation_mixed.id * 10,
  142. })
  143. self.assertEqual(
  144. relation_all_record.display_name, '%s %s %s' % (
  145. self.partner_2.name,
  146. 'mixed',
  147. self.partner_1.name,
  148. )
  149. )
  150. domain = relation_all_record.onchange_type_selection_id()['domain']
  151. self.assertTrue(
  152. ('is_company', '=', False) in domain['other_partner_id'])
  153. domain = relation_all_record.onchange_this_partner_id()['domain']
  154. self.assertTrue(
  155. ('contact_type_this', '=', 'c') in domain['type_selection_id'])
  156. relation_all_record.write({
  157. 'type_id': self.relation_mixed.id,
  158. })
  159. relation = relation_all_record.relation_id
  160. relation_all_record.unlink()
  161. self.assertFalse(relation.exists())
  162. def test_symmetric(self):
  163. relation = self.relation_model.create({
  164. 'type_id': self.relation_symmetric.id,
  165. 'left_partner_id': self.partner_2.id,
  166. 'right_partner_id': self.partner_1.id,
  167. })
  168. partners = self.env['res.partner'].search([
  169. ('search_relation_id', '=', relation.type_selection_id.id)
  170. ])
  171. self.assertTrue(self.partner_1 in partners)
  172. self.assertTrue(self.partner_2 in partners)