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.

95 lines
4.1 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2016 Therp BV
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from openerp.tests import common
  5. class TestPartnerRelationCommon(common.TransactionCase):
  6. def setUp(self):
  7. super(TestPartnerRelationCommon, self).setUp()
  8. self.partner_model = self.env['res.partner']
  9. self.category_model = self.env['res.partner.category']
  10. self.type_model = self.env['res.partner.relation.type']
  11. self.selection_model = self.env['res.partner.relation.type.selection']
  12. self.relation_model = self.env['res.partner.relation']
  13. self.relation_all_model = self.env['res.partner.relation.all']
  14. self.partner_01_person = self.partner_model.create({
  15. 'name': 'Test User 1',
  16. 'is_company': False,
  17. 'ref': 'PR01'})
  18. self.partner_02_company = self.partner_model.create({
  19. 'name': 'Test Company',
  20. 'is_company': True,
  21. 'ref': 'PR02'})
  22. # Create partners with specific categories:
  23. self.category_01_ngo = self.category_model.create({'name': 'NGO'})
  24. self.partner_03_ngo = self.partner_model.create({
  25. 'name': 'Test NGO',
  26. 'is_company': True,
  27. 'ref': 'PR03',
  28. 'category_id': [(4, self.category_01_ngo.id)]})
  29. self.category_02_volunteer = self.category_model.create({
  30. 'name': 'Volunteer'})
  31. self.partner_04_volunteer = self.partner_model.create({
  32. 'name': 'Test Volunteer',
  33. 'is_company': False,
  34. 'ref': 'PR04',
  35. 'category_id': [(4, self.category_02_volunteer.id)]})
  36. # Create a new relation type withouth categories:
  37. (self.type_company2person,
  38. self.selection_company2person,
  39. self.selection_person2company) = \
  40. self._create_relation_type_selection({
  41. 'name': 'mixed',
  42. 'name_inverse': 'mixed_inverse',
  43. 'contact_type_left': 'c',
  44. 'contact_type_right': 'p'})
  45. # Create a new relation type with categories:
  46. (self.type_ngo2volunteer,
  47. self.selection_ngo2volunteer,
  48. self.selection_volunteer2ngo) = \
  49. self._create_relation_type_selection({
  50. 'name': 'NGO has volunteer',
  51. 'name_inverse': 'volunteer works for NGO',
  52. 'contact_type_left': 'c',
  53. 'contact_type_right': 'p',
  54. 'partner_category_left': self.category_01_ngo.id,
  55. 'partner_category_right': self.category_02_volunteer.id})
  56. def _create_relation_type_selection(self, vals):
  57. """Create relation type and return this with selection types."""
  58. assert 'name' in vals, (
  59. "Name missing in vals to create relation type. Vals: %s."
  60. % vals)
  61. assert 'name' in vals, (
  62. "Name_inverse missing in vals to create relation type. Vals: %s."
  63. % vals)
  64. new_type = self.type_model.create(vals)
  65. self.assertTrue(
  66. new_type,
  67. msg="No relation type created with vals %s." % vals)
  68. selection_types = self.selection_model.search([
  69. ('type_id', '=', new_type.id)])
  70. for st in selection_types:
  71. if st.is_inverse:
  72. inverse_type_selection = st
  73. else:
  74. type_selection = st
  75. self.assertTrue(
  76. inverse_type_selection,
  77. msg="Failed to find inverse type selection based on"
  78. " relation type created with vals %s." % vals)
  79. self.assertTrue(
  80. type_selection,
  81. msg="Failed to find type selection based on"
  82. " relation type created with vals %s." % vals)
  83. return (new_type, type_selection, inverse_type_selection)
  84. def _create_company2person_relation(self):
  85. """Utility function to get a relation from company 2 partner."""
  86. return self.relation_all_model.create({
  87. 'type_selection_id': self.selection_company2person.id,
  88. 'this_partner_id': self.partner_02_company.id,
  89. 'other_partner_id': self.partner_01_person.id})