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.
129 lines
5.4 KiB
129 lines
5.4 KiB
# Copyright 2018 Ivan Yelizariev <https://it-projects.info/team/yelizariev>
|
|
# Copyright 2018 Kolushov Alexandr <https://it-projects.info/team/KolushovAlexandr>
|
|
# 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)
|