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.

170 lines
7.1 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 Simone Orsi <simone.orsi@camptocamp.com>
  3. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
  4. from odoo.tests.common import SavepointCase
  5. class PartnerDomainCase(SavepointCase):
  6. @classmethod
  7. def setUpClass(cls):
  8. super(PartnerDomainCase, cls).setUpClass()
  9. cls.partner_model = cls.env['res.partner']
  10. cls.message_model = cls.env['mail.message']
  11. cls.subtype_model = cls.env['mail.message.subtype']
  12. cls.partner1 = cls.partner_model.with_context(
  13. tracking_disable=1).create({
  14. 'name': 'Partner 1',
  15. 'email': 'partner1@test.foo.com',
  16. })
  17. cls.partner2 = cls.partner_model.with_context(
  18. tracking_disable=1).create({
  19. 'name': 'Partner 2',
  20. 'email': 'partner2@test.foo.com',
  21. })
  22. cls.partner3 = cls.partner_model.with_context(
  23. tracking_disable=1).create({
  24. 'name': 'Partner 3',
  25. 'email': 'partner3@test.foo.com',
  26. })
  27. cls.subtype1 = cls.subtype_model.create({'name': 'Type 1'})
  28. cls.subtype2 = cls.subtype_model.create({'name': 'Type 2'})
  29. def _assert_found(self, domain, not_found=False, partner=None):
  30. partner = partner or self.partner1
  31. if not_found:
  32. self.assertNotIn(partner, self.partner_model.search(domain))
  33. else:
  34. self.assertIn(partner, self.partner_model.search(domain))
  35. def test_notify_domains_always(self):
  36. # we don't set recipients
  37. # because we call `_get_notify_by_email_domain` directly
  38. message = self.message_model.create({'body': 'My Body', })
  39. partner = self.partner1
  40. partner.notify_email = 'always'
  41. domain = partner._get_notify_by_email_domain(message)
  42. self._assert_found(domain)
  43. domain = partner._get_notify_by_email_domain(message, digest=1)
  44. self._assert_found(domain, not_found=1)
  45. def test_notify_domains_only_recipients(self):
  46. # we don't set recipients
  47. # because we call `_get_notify_by_email_domain` directly
  48. self.partner1.notify_email = 'always'
  49. self.partner2.notify_email = 'always'
  50. partners = self.partner1 + self.partner2
  51. # followers
  52. self.partner3.message_subscribe(self.partner2.ids)
  53. # partner1 is the only recipient
  54. message = self.message_model.create({
  55. 'body': 'My Body',
  56. 'res_id': self.partner3.id,
  57. 'model': 'res.partner',
  58. 'partner_ids': [(4, self.partner1.id)]
  59. })
  60. domain = partners._get_notify_by_email_domain(message)
  61. # we find both of them since partner2 is a follower
  62. self._assert_found(domain)
  63. self._assert_found(domain, partner=self.partner2)
  64. # no one here in digest mode
  65. domain = partners._get_notify_by_email_domain(message, digest=1)
  66. self._assert_found(domain, not_found=1)
  67. self._assert_found(domain, not_found=1, partner=self.partner2)
  68. # include only recipients
  69. domain = partners.with_context(
  70. notify_only_recipients=1)._get_notify_by_email_domain(message)
  71. self._assert_found(domain)
  72. self._assert_found(domain, partner=self.partner2, not_found=1)
  73. def test_notify_domains_digest(self):
  74. # we don't set recipients
  75. # because we call `_get_notify_by_email_domain` directly
  76. message = self.message_model.create({'body': 'My Body', })
  77. partner = self.partner1
  78. partner.notify_email = 'digest'
  79. domain = partner._get_notify_by_email_domain(message)
  80. self._assert_found(domain, not_found=1)
  81. domain = partner._get_notify_by_email_domain(message, digest=1)
  82. self._assert_found(domain)
  83. def test_notify_domains_none(self):
  84. message = self.message_model.create({'body': 'My Body', })
  85. partner = self.partner1
  86. partner.notify_email = 'none'
  87. domain = partner._get_notify_by_email_domain(message)
  88. self._assert_found(domain, not_found=1)
  89. domain = partner._get_notify_by_email_domain(message, digest=1)
  90. self._assert_found(domain, not_found=1)
  91. def test_notify_domains_match_type_digest(self):
  92. # Test message subtype matches partner settings.
  93. # The partner can have several `partner.notification.conf` records.
  94. # Each records establish notification rules by type.
  95. # If you don't have any record in it, you allow all subtypes.
  96. # Record `typeX` with `enable=True` enables notification for `typeX`.
  97. # Record `typeX` with `enable=False` disables notification for `typeX`.
  98. partner = self.partner1
  99. # enable digest
  100. partner.notify_email = 'digest'
  101. message_t1 = self.message_model.create({
  102. 'body': 'My Body',
  103. 'subtype_id': self.subtype1.id,
  104. })
  105. message_t2 = self.message_model.create({
  106. 'body': 'My Body',
  107. 'subtype_id': self.subtype2.id,
  108. })
  109. # enable subtype on partner
  110. partner._notify_enable_subtype(self.subtype1)
  111. domain = partner._get_notify_by_email_domain(
  112. message_t1, digest=True)
  113. # notification enabled: we find the partner.
  114. self._assert_found(domain)
  115. # for subtype2 we don't have any explicit rule: we find the partner
  116. domain = partner._get_notify_by_email_domain(
  117. message_t2, digest=True)
  118. self._assert_found(domain)
  119. # enable subtype2: find the partner anyway
  120. partner._notify_enable_subtype(self.subtype2)
  121. domain = partner._get_notify_by_email_domain(
  122. message_t2, digest=True)
  123. self._assert_found(domain)
  124. # disable subtype2: we don't find the partner anymore
  125. partner._notify_disable_subtype(self.subtype2)
  126. domain = partner._get_notify_by_email_domain(
  127. message_t2, digest=True)
  128. self._assert_found(domain, not_found=1)
  129. def test_notify_domains_match_type_always(self):
  130. message_t1 = self.message_model.create({
  131. 'body': 'My Body',
  132. 'subtype_id': self.subtype1.id,
  133. })
  134. message_t2 = self.message_model.create({
  135. 'body': 'My Body',
  136. 'subtype_id': self.subtype2.id,
  137. })
  138. # enable always
  139. partner = self.partner1
  140. partner.notify_email = 'always'
  141. # enable subtype on partner
  142. partner._notify_enable_subtype(self.subtype1)
  143. domain = partner._get_notify_by_email_domain(message_t1)
  144. # notification enabled: we find the partner.
  145. self._assert_found(domain)
  146. # for subtype2 we don't have any explicit rule: we find the partner
  147. domain = partner._get_notify_by_email_domain(message_t2)
  148. self._assert_found(domain)
  149. # enable subtype2: find the partner anyway
  150. partner._notify_enable_subtype(self.subtype2)
  151. domain = partner._get_notify_by_email_domain(message_t2)
  152. self._assert_found(domain)
  153. # disable subtype2: we don't find the partner anymore
  154. partner._notify_disable_subtype(self.subtype2)
  155. domain = partner._get_notify_by_email_domain(message_t2)
  156. self._assert_found(domain, not_found=1)