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.
 
 
 
 

62 lines
2.0 KiB

# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from lxml import html
from odoo.tests import SavepointCase
class TestMailInlineStyles(SavepointCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.mail_template = cls.env.ref(
'mail_inline_css.email_template_demo')
cls.demo_user = cls.env.ref('base.user_demo')
def to_xml_node(self, html_):
return html.fragments_fromstring(html_)
def parse_node_style(self, node):
""" Convert node CSS string to Python dict"""
res = {}
for style in node.attrib.get('style', '').split(';'):
l = style.split(':')
res[l[0].strip()] = l[1].strip()
return res
def find_by_id(self, node, html_id):
return node.xpath('//*[@id="{}"]'.format(html_id))
def assertNodeStyle(self, node, expected):
self.assertIn('style', node.attrib)
self.assertEqual(self.parse_node_style(node), expected)
def test_generate_mail(self):
res = self.mail_template.generate_email(
[self.demo_user.id], fields=['body_html']
)
body_html_string = res[self.demo_user.id].get('body_html')
html_node = self.to_xml_node(body_html_string)[0]
expected = {
'main_logo': {
'max-width': '300px'
},
'main_wrapper': {
'max-width': '620px',
'margin': '0 auto',
'border': '1px solid #ccc',
'font-size': '18px',
'font-family': 'verdana',
'color': '#6B6E71'
},
'main_footer': {
'padding-top': '0',
'font-size': '120%',
'padding': '30px 40px'
}
}
for html_id, expected_style in expected.items():
node = self.find_by_id(html_node, html_id)[0]
self.assertNodeStyle(node, expected_style)