Files
odoo_source/addons/link_tracker/tests/test_link_tracker.py
T
std-odoo 5e7297a01a [FIX] link_tracker: add a system parameter to disabled the tracking
Bug
===
If you send a URL (which will be transformed into a link tracker) to
an external website (e.g. in mass mailing, social, ...), the UTM values
will be added in the GET parameters of the URL.

The external website might crash if those parameters are not supported
by it.

We want to add a system parameter `link_tracker.no_external_tracking`
to be able to not add those UTM values in the redirected URL.

This is done only for external website, because it will never be an
issue if the URL redirect to Odoo.

Task-2657413

closes odoo/odoo#78616

X-original-commit: c8363b7bb74ace4e77b593efc3a9104143240141
Signed-off-by: awa-odoo <awa-odoo@users.noreply.github.com>
2021-10-19 13:17:39 +00:00

151 lines
5.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from .common import MockLinkTracker
from odoo.tests import common
from odoo.exceptions import UserError
class TestLinkTracker(common.TransactionCase, MockLinkTracker):
def test_create(self):
link_trackers = self.env['link.tracker'].create([
{
'url': 'odoo.com',
'title': 'Odoo',
}, {
'url': 'example.com',
'title': 'Odoo',
}, {
'url': 'http://test.example.com',
'title': 'Odoo',
},
])
self.assertEqual(
link_trackers.mapped('url'),
['http://odoo.com', 'http://example.com', 'http://test.example.com'],
)
self.assertEqual(len(set(link_trackers.mapped('code'))), 3)
def test_search_or_create(self):
link_tracker_1 = self.env['link.tracker'].create({
'url': 'https://odoo.com',
'title': 'Odoo',
})
link_tracker_2 = self.env['link.tracker'].search_or_create({
'url': 'https://odoo.com',
'title': 'Odoo',
})
self.assertEqual(link_tracker_1, link_tracker_2)
link_tracker_3 = self.env['link.tracker'].search_or_create({
'url': 'https://odoo.be',
'title': 'Odoo',
})
self.assertNotEqual(link_tracker_1, link_tracker_3)
def test_constraint(self):
campaign_id = self.env['utm.campaign'].search([], limit=1)
self.env['link.tracker'].create({
'url': 'https://odoo.com',
'title': 'Odoo',
})
link_1 = self.env['link.tracker'].create({
'url': '2nd url',
'title': 'Odoo',
'campaign_id': campaign_id.id,
})
with self.assertRaises(UserError):
self.env['link.tracker'].create({
'url': 'https://odoo.com',
'title': 'Odoo',
})
with self.assertRaises(UserError):
self.env['link.tracker'].create({
'url': '2nd url',
'title': 'Odoo',
'campaign_id': campaign_id.id,
})
link_2 = self.env['link.tracker'].create({
'url': '2nd url',
'title': 'Odoo',
'campaign_id': campaign_id.id,
'medium_id': self.env['utm.medium'].search([], limit=1).id
})
# test in batch
with self.assertRaises(UserError):
# both link trackers on which we write will have the same values
(link_1 | link_2).write({'campaign_id': False, 'medium_id': False})
with self.assertRaises(UserError):
(link_1 | link_2).write({'medium_id': False})
def test_no_external_tracking(self):
self.env['ir.config_parameter'].set_param('link_tracker.no_external_tracking', '1')
campaign = self.env['utm.campaign'].create({'name': 'campaign'})
source = self.env['utm.source'].create({'name': 'source'})
medium = self.env['utm.medium'].create({'name': 'medium'})
expected_utm_params = {
'utm_campaign': campaign.name,
'utm_source': source.name,
'utm_medium': medium.name,
}
# URL to an external website -> UTM parameters should no be added
# because the system parameter "no_external_tracking" is set
link = self.env['link.tracker'].create({
'url': 'http://external.com/test?a=example.com',
'campaign_id': campaign.id,
'source_id': source.id,
'medium_id': medium.id,
'title': 'Title',
})
self.assertLinkParams(
'http://external.com/test',
link,
{'a': 'example.com'}
)
# URL to the local website -> UTM parameters should be added since we know we handle them
# even though the parameter "no_external_tracking" is enabled
link.url = 'https://test.odoo.com/test?a=example.com'
self.assertLinkParams(
'https://test.odoo.com/test',
link,
{**expected_utm_params, 'a': 'example.com'}
)
# Relative URL to the local website -> UTM parameters should be added since we know we handle them
# even though the parameter "no_external_tracking" is enabled
link.url = '/test?a=example.com'
self.assertLinkParams(
'/test',
link,
{**expected_utm_params, 'a': 'example.com'}
)
# Deactivate the system parameter
self.env['ir.config_parameter'].set_param('link_tracker.no_external_tracking', False)
# URL to an external website -> UTM parameters should be added since
# the system parameter "link_tracker.no_external_tracking" is disabled
link.url = 'http://external.com/test?a=example.com'
self.assertLinkParams(
'http://external.com/test',
link,
{**expected_utm_params, 'a': 'example.com'}
)