Files
odoo_source/addons/link_tracker/tests/common.py
T
Thibault Delavallée 7946b42ef5 [IMP] link_tracker, (test_)mass_mailing: improve test tools and clean existing tests
URPOSE

Prepare code cleaning and optimization in mail, mass_mailing and SMS by
cleaning models for readability and code complexity and footprint reduction.

SPECIFICATIONS

Add tool methods and asserts for link tracker tests.

Add tool methods and assets for mass mailing tests, notably about mailing
traces and their link with emails.

Merge existing and duplicated tests and rewrite them a bit.

Rename and improve test_mass_mailing models.

LINKS

Prepares task ID 2238597 (notification and trace models cleaning)
Task ID 1906925 (mass mailing tests cleaning)
PR #50169

Related: odoo/enterprise#10180
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
2020-04-24 15:35:43 +00:00

72 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import werkzeug
from lxml import etree
from unittest.mock import patch
from odoo.tests import common
class MockLinkTracker(common.BaseCase):
def setUp(self):
super(MockLinkTracker, self).setUp()
def _get_title_from_url(url):
return "Test_TITLE"
link_tracker_title_patch = patch('odoo.addons.link_tracker.models.link_tracker.LinkTracker._get_title_from_url', wraps=_get_title_from_url)
link_tracker_title_patch.start()
self.addCleanup(link_tracker_title_patch.stop)
def _get_href_from_anchor_id(self, body, anchor_id):
html = etree.fromstring(body)
return html.xpath("*[@id='%s']" % anchor_id)[0].attrib.get('href')
def _get_tracker_from_short_url(self, short_url):
code = self.env['link.tracker.code'].sudo().search([
('code', '=', short_url.split('/r/')[-1])
])
return code.link_id
def assertLinkShortened(self, body, link_info, link_params=None):
""" Usage
self.assertLinkShortened(
message.body,
('url0', 'http://www.odoo.com', True),
{'utm_campaign': self.utm_c.name, 'utm_medium': self.utm_m.name}
)
"""
(anchor_id, url, is_shortened) = link_info
anchor_href = self._get_href_from_anchor_id(body, anchor_id)
if is_shortened:
self.assertTrue('/r/' in anchor_href, '%s should be shortened: %s' % (anchor_id, anchor_href))
link_tracker = self._get_tracker_from_short_url(anchor_href)
self.assertEqual(url, link_tracker.url)
self.assertLinkParams(url, link_tracker, link_params=link_params)
else:
self.assertTrue('/r/' not in anchor_href, '%s should not be shortened: %s' % (anchor_id, anchor_href))
self.assertEqual(anchor_href, url)
def assertLinkParams(self, url, link_tracker, link_params=None):
""" Usage
self.assertLinkTracker(
'http://www.example.com',
link_tracker,
{'utm_campaign': self.utm_c.name, 'utm_medium': self.utm_m.name}
)
"""
# check UTMS are correctly set on redirect URL
original_url = werkzeug.urls.url_parse(url)
redirect_url = werkzeug.urls.url_parse(link_tracker.redirected_url)
redirect_params = redirect_url.decode_query().to_dict(flat=True)
self.assertEqual(redirect_url.scheme, original_url.scheme)
self.assertEqual(redirect_url.decode_netloc(), original_url.decode_netloc())
self.assertEqual(redirect_url.path, original_url.path)
if link_params:
self.assertEqual(redirect_params, link_params)