# Copyright 2018 Ivan Yelizariev # Copyright 2018 Kolushov Alexandr # License MIT (https://opensource.org/licenses/MIT). import base64 from odoo.addons.test_mail.tests.test_mail_mail import TestMail class TestRender(TestMail): at_install = True post_install = True def setUp(self): super(TestRender, self).setUp() self.original_email = self.env.user.email self.original_company = self.env.user.company_id self.email = "superadmin@second-website.example" self.assertNotEqual(self.original_email, self.email) self.website = self.env.ref("website.website2") self.company = self.env["res.company"].create({"name": "New Test Website"}) self.website.company_id = self.company self.mail_server_id = self.env["ir.mail_server"].create( {"name": "mail server", "smtp_host": "mail.example.com"} ) self.website.mail_server_id = self.mail_server_id user_admin = self.env.ref("base.user_admin") # copy-paste from mail.tests.test_mail_template self._attachments = [ { "name": "_Test_First", "datas_fname": "first.txt", "datas": base64.b64encode(b"My first attachment"), "res_model": "res.partner", "res_id": user_admin.partner_id.id, }, { "name": "_Test_Second", "datas_fname": "second.txt", "datas": base64.b64encode(b"My second attachment"), "res_model": "res.partner", "res_id": user_admin.partner_id.id, }, ] self.partner_1 = self.env["res.partner"].create({"name": "partner_1"}) self.partner_2 = self.env["res.partner"].create({"name": "partner_2"}) self.email_1 = "test1@example.com" self.email_2 = "test2@example.com" self.email_3 = self.partner_1.email self.email_template = self.env["mail.template"].create( { "model_id": self.env["ir.model"]._get("mail.test").id, "name": "Pigs Template", "subject": "${website.name}", "body_html": "${object.description}", "user_signature": False, "attachment_ids": [ (0, 0, self._attachments[0]), (0, 0, self._attachments[1]), ], "partner_to": "%s,%s" % (self.partner_2.id, self.user_employee.partner_id.id), "email_to": "{}, {}".format(self.email_1, self.email_2), "email_cc": "%s" % self.email_3, } ) def switch_user_website(self): # add website to allowed self.env.user.write( dict( backend_website_ids=[(4, self.website.id)], backend_website_id=self.website.id, company_id=self.company.id, company_ids=[(4, self.company.id)], ) ) def test_website_in_render_variables(self): """Mail values are per website""" self.env.user.backend_website_id = None TestModel = self.env["mail.test"].with_context( {"mail_create_nolog": True, "mail_create_nosubscribe": True} ) self.test_pigs = TestModel.create( { "name": "Pigs", "description": "Fans of Pigs, unite !", "alias_name": "pigs", "alias_contact": "followers", } ) # sending without website mail_id = self.email_template.send_mail(self.test_pigs.id) mail = self.env["mail.mail"].browse(mail_id) self.assertEqual(mail.subject, "") self.assertFalse(mail.mail_server_id) # sending from frontend self.test_pigs.company_id = None mail_id = self.email_template.with_context( wdb=True, website_id=self.website.id ).send_mail(self.test_pigs.id) mail = self.env["mail.mail"].browse(mail_id) self.assertEqual(mail.subject, self.website.name) self.assertEqual(mail.mail_server_id, self.mail_server_id) # copy-pasted tests self.assertEqual(mail.email_to, self.email_template.email_to) # for some reason self.email_template.email_cc might return u'False' self.assertEqual( mail.email_cc or "False", self.email_template.email_cc or "False" ) self.assertEqual( mail.recipient_ids, self.partner_2 | self.user_employee.partner_id ) # sending from frontend self.switch_user_website() mail_id = self.email_template.send_mail(self.test_pigs.id) mail = self.env["mail.mail"].browse(mail_id) self.assertEqual(mail.subject, self.website.name) def _test_message_post_with_template(self): # It's deactivated, because workaround is based on checking host value in get_current_website() """Simulate sending email on eCommerce checkout""" self.switch_user_website() self.env.user.email = self.email self.env.user.invalidate_cache() self.env.user.invalidate_cache() self.assertEqual(self.env.user.email, self.email) # switch admin user back self.env.user.company_id = self.original_company self.env.user.invalidate_cache() self.assertEqual(self.env.user.email, self.original_email) self.test_pigs.with_context( website_id=self.website.id ).message_post_with_template(self.email_template.id) message = self.env["mail.message"].search([], order="id desc", limit=1) self.assertIn("<%s>" % self.email, message.email_from)