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.

145 lines
5.8 KiB

  1. # Copyright 2018,2020 Ivan Yelizariev <https://it-projects.info/team/yelizariev>
  2. # Copyright 2018 Kolushov Alexandr <https://it-projects.info/team/KolushovAlexandr>
  3. # License MIT (https://opensource.org/licenses/MIT).
  4. # License OPL-1 (https://www.odoo.com/documentation/user/13.0/legal/licenses/licenses.html#odoo-apps) for derivative work.
  5. import base64
  6. from odoo.addons.test_mail.tests.test_mail_mail import TestMail
  7. class TestRender(TestMail):
  8. at_install = True
  9. post_install = True
  10. def setUp(self):
  11. super(TestRender, self).setUp()
  12. self.original_email = self.env.user.email
  13. self.original_company = self.env.user.company_id
  14. self.email = "superadmin@second-website.example"
  15. self.assertNotEqual(self.original_email, self.email)
  16. self.website = self.env.ref("website.website2")
  17. self.company = self.env["res.company"].create({"name": "New Test Website"})
  18. self.website.company_id = self.company
  19. self.mail_server_id = self.env["ir.mail_server"].create(
  20. {"name": "mail server", "smtp_host": "mail.example.com"}
  21. )
  22. self.website.mail_server_id = self.mail_server_id
  23. user_admin = self.env.ref("base.user_admin")
  24. # copy-paste from mail.tests.test_mail_template
  25. self._attachments = [
  26. {
  27. "name": "first.txt",
  28. "datas": base64.b64encode(b"My first attachment"),
  29. "res_model": "res.partner",
  30. "res_id": user_admin.partner_id.id,
  31. },
  32. {
  33. "name": "second.txt",
  34. "datas": base64.b64encode(b"My second attachment"),
  35. "res_model": "res.partner",
  36. "res_id": user_admin.partner_id.id,
  37. },
  38. ]
  39. self.partner_1 = self.env["res.partner"].create({"name": "partner_1"})
  40. self.partner_2 = self.env["res.partner"].create({"name": "partner_2"})
  41. self.email_1 = "test1@example.com"
  42. self.email_2 = "test2@example.com"
  43. self.email_3 = self.partner_1.email
  44. self.email_template = self.env["mail.template"].create(
  45. {
  46. "model_id": self.env["ir.model"]._get("mail.test").id,
  47. "name": "Pigs Template",
  48. "subject": "${website.name}",
  49. "body_html": "${object.description}",
  50. "user_signature": False,
  51. "attachment_ids": [
  52. (0, 0, self._attachments[0]),
  53. (0, 0, self._attachments[1]),
  54. ],
  55. "partner_to": "%s,%s"
  56. % (self.partner_2.id, self.user_employee.partner_id.id),
  57. "email_to": "{}, {}".format(self.email_1, self.email_2),
  58. "email_cc": "%s" % self.email_3,
  59. }
  60. )
  61. def switch_user_website(self):
  62. # add website to allowed
  63. self.env.user.write(
  64. dict(
  65. backend_website_ids=[(4, self.website.id)],
  66. backend_website_id=self.website.id,
  67. company_id=self.company.id,
  68. company_ids=[(4, self.company.id)],
  69. )
  70. )
  71. def test_website_in_render_variables(self):
  72. """Mail values are per website"""
  73. self.env.user.backend_website_id = None
  74. TestModel = self.env["mail.test"].with_context(
  75. {"mail_create_nolog": True, "mail_create_nosubscribe": True}
  76. )
  77. self.test_pigs = TestModel.create(
  78. {
  79. "name": "Pigs",
  80. "description": "Fans of Pigs, unite !",
  81. "alias_name": "pigs",
  82. "alias_contact": "followers",
  83. }
  84. )
  85. # sending without website
  86. mail_id = self.email_template.send_mail(self.test_pigs.id)
  87. mail = self.env["mail.mail"].browse(mail_id)
  88. self.assertEqual(mail.subject, "")
  89. self.assertFalse(mail.mail_server_id)
  90. # sending from frontend
  91. self.test_pigs.company_id = None
  92. mail_id = self.email_template.with_context(
  93. wdb=True, allowed_website_ids=self.website.ids
  94. ).send_mail(self.test_pigs.id)
  95. mail = self.env["mail.mail"].browse(mail_id)
  96. self.assertEqual(mail.subject, self.website.name)
  97. self.assertEqual(mail.mail_server_id, self.mail_server_id)
  98. # copy-pasted tests
  99. self.assertEqual(mail.email_to, self.email_template.email_to)
  100. # for some reason self.email_template.email_cc might return u'False'
  101. self.assertEqual(
  102. mail.email_cc or "False", self.email_template.email_cc or "False"
  103. )
  104. self.assertEqual(
  105. mail.recipient_ids, self.partner_2 | self.user_employee.partner_id
  106. )
  107. # sending from frontend
  108. self.switch_user_website()
  109. mail_id = self.email_template.send_mail(self.test_pigs.id)
  110. mail = self.env["mail.mail"].browse(mail_id)
  111. self.assertEqual(mail.subject, self.website.name)
  112. def _test_message_post_with_template(self):
  113. # It's deactivated, because workaround is based on checking host value in get_current_website()
  114. """Simulate sending email on eCommerce checkout"""
  115. self.switch_user_website()
  116. self.env.user.email = self.email
  117. self.env.user.invalidate_cache()
  118. self.env.user.invalidate_cache()
  119. self.assertEqual(self.env.user.email, self.email)
  120. # switch admin user back
  121. self.env.user.company_id = self.original_company
  122. self.env.user.invalidate_cache()
  123. self.assertEqual(self.env.user.email, self.original_email)
  124. self.test_pigs.with_context(
  125. allowed_website_ids=self.website.ids
  126. ).message_post_with_template(self.email_template.id)
  127. message = self.env["mail.message"].search([], order="id desc", limit=1)
  128. self.assertIn("<%s>" % self.email, message.email_from)