File: test_tag_matomo.py

package info (click to toggle)
python-django-analytical 3.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 720 kB
  • sloc: python: 4,693; makefile: 7
file content (161 lines) | stat: -rw-r--r-- 5,668 bytes parent folder | download
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