# Copyright 2018 Ivan Yelizariev # Copyright 2018 Kolushov Alexandr # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). 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': '%s, %s' % (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)