1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
"""
Tests for the Matomo template tags and filters.
"""
import pytest
from django.contrib.auth.models import User
from django.http import HttpRequest
from django.template import Context
from django.test.utils import override_settings
from utils import TagTestCase
from analytical.templatetags.matomo import MatomoNode
from analytical.utils import AnalyticalException
@override_settings(MATOMO_DOMAIN_PATH='example.com', MATOMO_SITE_ID='345')
class MatomoTagTestCase(TagTestCase):
"""
Tests for the ``matomo`` template tag.
"""
def test_tag(self):
r = self.render_tag('matomo', 'matomo')
assert '"//example.com/"' in r
assert "_paq.push(['setSiteId', 345]);" in r
assert 'img src="//example.com/matomo.php?idsite=345"' in r
def test_node(self):
r = MatomoNode().render(Context({}))
assert '"//example.com/";' in r
assert "_paq.push(['setSiteId', 345]);" in r
assert 'img src="//example.com/matomo.php?idsite=345"' in r
@override_settings(MATOMO_DOMAIN_PATH='example.com/matomo', MATOMO_SITE_ID='345')
def test_domain_path_valid(self):
r = self.render_tag('matomo', 'matomo')
assert '"//example.com/matomo/"' in r
@override_settings(MATOMO_DOMAIN_PATH='example.com:1234', MATOMO_SITE_ID='345')
def test_domain_port_valid(self):
r = self.render_tag('matomo', 'matomo')
assert '"//example.com:1234/";' in r
@override_settings(
MATOMO_DOMAIN_PATH='example.com:1234/matomo', MATOMO_SITE_ID='345'
)
def test_domain_port_path_valid(self):
r = self.render_tag('matomo', 'matomo')
assert '"//example.com:1234/matomo/"' in r
@override_settings(MATOMO_DOMAIN_PATH=None)
def test_no_domain(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_SITE_ID=None)
def test_no_siteid(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_SITE_ID='x')
def test_siteid_not_a_number(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_DOMAIN_PATH='http://www.example.com')
def test_domain_protocol_invalid(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_DOMAIN_PATH='example.com/')
def test_domain_slash_invalid(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_DOMAIN_PATH='example.com:123:456')
def test_domain_multi_port(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_DOMAIN_PATH='example.com:')
def test_domain_incomplete_port(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_DOMAIN_PATH='example.com:/matomo')
def test_domain_uri_incomplete_port(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(MATOMO_DOMAIN_PATH='example.com:12df')
def test_domain_port_invalid(self):
with pytest.raises(AnalyticalException):
MatomoNode()
@override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
def test_render_internal_ip(self):
req = HttpRequest()
req.META['REMOTE_ADDR'] = '1.1.1.1'
context = Context({'request': req})
r = MatomoNode().render(context)
assert r.startswith('<!-- Matomo disabled on internal IP address')
assert r.endswith('-->')
def test_uservars(self):
context = Context(
{
'matomo_vars': [
(1, 'foo', 'foo_val'),
(2, 'bar', 'bar_val', 'page'),
(3, 'spam', 'spam_val', 'visit'),
]
}
)
r = MatomoNode().render(context)
for var_code in [
'_paq.push(["setCustomVariable", 1, "foo", "foo_val", "page"]);',
'_paq.push(["setCustomVariable", 2, "bar", "bar_val", "page"]);',
'_paq.push(["setCustomVariable", 3, "spam", "spam_val", "visit"]);',
]:
assert var_code in r
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_default_usertrack(self):
context = Context(
{'user': User(username='BDFL', first_name='Guido', last_name='van Rossum')}
)
r = MatomoNode().render(context)
var_code = '_paq.push(["setUserId", "BDFL"]);'
assert var_code in r
def test_matomo_usertrack(self):
context = Context({'matomo_identity': 'BDFL'})
r = MatomoNode().render(context)
var_code = '_paq.push(["setUserId", "BDFL"]);'
assert var_code in r
def test_analytical_usertrack(self):
context = Context({'analytical_identity': 'BDFL'})
r = MatomoNode().render(context)
var_code = '_paq.push(["setUserId", "BDFL"]);'
assert var_code in r
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_disable_usertrack(self):
context = Context(
{
'user': User(
username='BDFL', first_name='Guido', last_name='van Rossum'
),
'matomo_identity': None,
}
)
r = MatomoNode().render(context)
var_code = '_paq.push(["setUserId", "BDFL"]);'
assert var_code not in r
@override_settings(MATOMO_DISABLE_COOKIES=True)
def test_disable_cookies(self):
r = MatomoNode().render(Context({}))
assert "_paq.push(['disableCookies']);" in r
|