django-cms-qe 3.5.0__py3-none-any.whl → 3.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. cms_qe/api/constants.py +1 -0
  2. cms_qe/api/permissions.py +12 -0
  3. cms_qe/api/urls.py +32 -0
  4. cms_qe/api/utils.py +14 -0
  5. cms_qe/api/views.py +20 -0
  6. cms_qe/locale/cs/LC_MESSAGES/django.po +12 -0
  7. cms_qe/migrations/0001_api_permissions.py +19 -0
  8. cms_qe/settings/base/app.py +9 -0
  9. cms_qe/templates/admin/index.html +38 -0
  10. cms_qe/urls.py +1 -0
  11. cms_qe_auth/utils.py +6 -2
  12. {django_cms_qe-3.5.0.dist-info → django_cms_qe-3.6.0.dist-info}/METADATA +29 -11
  13. {django_cms_qe-3.5.0.dist-info → django_cms_qe-3.6.0.dist-info}/RECORD +18 -45
  14. {django_cms_qe-3.5.0.dist-info → django_cms_qe-3.6.0.dist-info}/WHEEL +1 -1
  15. cms_qe/static/css/fix-admin.css +0 -14
  16. cms_qe/templates/admin/change_form.html +0 -7
  17. cms_qe/tests/test_errors.py +0 -61
  18. cms_qe/tests/test_export.py +0 -108
  19. cms_qe/tests/test_monitoring.py +0 -15
  20. cms_qe/tests/test_utils.py +0 -77
  21. cms_qe/tests/test_views_security.py +0 -18
  22. cms_qe_analytical/tests/settings.py +0 -24
  23. cms_qe_analytical/tests/templatetags/__init__.py +0 -0
  24. cms_qe_analytical/tests/templatetags/dummy.py +0 -37
  25. cms_qe_analytical/tests/test_tag_google_analytics.py +0 -178
  26. cms_qe_analytical/tests/test_tag_piwik.py +0 -152
  27. cms_qe_analytical/tests/test_utils.py +0 -112
  28. cms_qe_analytical/tests/utils.py +0 -56
  29. cms_qe_auth/tests/__init__.py +0 -0
  30. cms_qe_auth/tests/test_models.py +0 -70
  31. cms_qe_auth/tests/test_utils.py +0 -36
  32. cms_qe_auth/tests/test_view.py +0 -72
  33. cms_qe_auth/tests/utils.py +0 -22
  34. cms_qe_newsletter/tests/__init__.py +0 -0
  35. cms_qe_newsletter/tests/test_mailchimp.py +0 -38
  36. cms_qe_newsletter/tests/test_managment.py +0 -22
  37. cms_qe_newsletter/tests/test_models.py +0 -43
  38. cms_qe_newsletter/tests/test_plugin.py +0 -21
  39. cms_qe_newsletter/tests/test_sync.py +0 -71
  40. cms_qe_newsletter/tests/test_views.py +0 -13
  41. cms_qe_table/tests/__init__.py +0 -0
  42. cms_qe_table/tests/test_models.py +0 -23
  43. cms_qe_table/tests/test_plugin.py +0 -18
  44. cms_qe_table/tests/test_utils.py +0 -90
  45. cms_qe_video/tests/__init__.py +0 -0
  46. cms_qe_video/tests/test_models.py +0 -96
  47. cms_qe_video/tests/test_plugin.py +0 -24
  48. cms_qe_video/tests/test_templatetags.py +0 -20
  49. /cms_qe/{tests → api}/__init__.py +0 -0
  50. {cms_qe_analytical/tests → cms_qe/migrations}/__init__.py +0 -0
  51. {django_cms_qe-3.5.0.dist-info → django_cms_qe-3.6.0.dist-info/licenses}/LICENSE +0 -0
  52. {django_cms_qe-3.5.0.dist-info → django_cms_qe-3.6.0.dist-info}/top_level.txt +0 -0
@@ -1,77 +0,0 @@
1
- from unittest.mock import patch
2
-
3
- import pytest
4
- from django.test import override_settings
5
- from mailqueue.models import MailerMessage
6
- from pytest_data import use_data
7
-
8
- from cms_qe.utils import get_base_url, get_functions, get_module, get_modules
9
-
10
-
11
- @pytest.mark.parametrize('expect,module_name', [
12
- (True, 'views'),
13
- (True, 'views.monitoring'),
14
- (False, 'no_module'),
15
- (False, 'monitoring.get_status'),
16
- ])
17
- def test_get_module(expect, module_name):
18
- module = get_module('cms_qe', module_name)
19
- assert module if expect else module is None
20
-
21
-
22
- def test_get_modules():
23
- modules = get_modules('monitoring')
24
- assert [module for app_name, module in modules if app_name == 'cms_qe']
25
-
26
-
27
- def test_get_functions():
28
- functions = get_functions('monitoring', 'get_status')
29
- assert [function for app_name, function in functions if app_name == 'cms_qe']
30
-
31
-
32
- def test_get_functions_existing_module_without_function():
33
- functions = get_functions('monitoring', 'no_function')
34
- assert not list(functions)
35
-
36
-
37
- @override_settings(META_SITE_PROTOCOL='https', )
38
- def test_get_absolute_url(post_request_empty):
39
- request = post_request_empty
40
- mock_url = 'test.com'
41
- with patch('cms_qe.utils.get_current_site', return_value=mock_url):
42
- base_url = get_base_url(request)
43
- assert base_url == f'https://{mock_url}'
44
-
45
-
46
- def test_sending_email_synchronously(email, mailoutbox):
47
- assert len(mailoutbox) == 0
48
- email.save()
49
- assert len(mailoutbox) == 1
50
- sent_mail = mailoutbox[0]
51
- assert 'Test content' in sent_mail.body
52
- assert 'Test' in sent_mail.subject
53
-
54
-
55
- @override_settings(MAILQUEUE_QUEUE_UP=True)
56
- def test_sending_email_asynchronously(email, mailoutbox):
57
- assert MailerMessage.objects.all().count() == 0
58
- email.save()
59
- assert len(mailoutbox) == 0
60
- assert MailerMessage.objects.all().count() == 1
61
- assert 'Test content' in MailerMessage.objects.all().first().content
62
-
63
-
64
- @use_data(email_data={'to': ['test1@examile.com', 'test2@examile.com']})
65
- def test_sending_email_synchronously_more_addressee(email, mailoutbox):
66
- email.save()
67
- assert len(mailoutbox) == 1
68
- sent_mail = mailoutbox[0]
69
- assert len(sent_mail.to) == 2
70
-
71
-
72
- @use_data(email_data={'to': ['test1@examile.com', 'test2@examile.com']})
73
- @override_settings(MAILQUEUE_QUEUE_UP=True)
74
- def test_sending_email_asynchronously_more_to_addressee(email, mailoutbox):
75
- email.save()
76
- assert MailerMessage.objects.all().count() == 1
77
- assert MailerMessage.objects.all().first().to_address == 'test1@examile.com, test2@examile.com'
@@ -1,18 +0,0 @@
1
- from constance import config
2
- from django.test import TestCase
3
- from django.urls import reverse
4
-
5
-
6
- class SecurityTxtViewTest(TestCase):
7
-
8
- def test_not_content(self):
9
- config.SECURITY_TXT_CONTENT = None
10
- response = self.client.get(reverse('security-txt'))
11
- self.assertRedirects(response, "/en/.well-known/security.txt/",
12
- status_code=302, target_status_code=404)
13
-
14
- def test_content(self):
15
- config.SECURITY_TXT_CONTENT = 'Contact: https://abuse.foo'
16
- response = self.client.get(reverse('security-txt'))
17
- self.assertContains(response, b'Contact: https://abuse.foo')
18
- self.assertEqual(response['Content-Type'], 'text/plain')
@@ -1,24 +0,0 @@
1
- """
2
- django-analytical testing settings.
3
- """
4
-
5
- DATABASES = {
6
- 'default': {
7
- 'ENGINE': 'django.db.backends.sqlite3',
8
- 'NAME': ':memory:',
9
- }
10
- }
11
-
12
- INSTALLED_APPS = [
13
- 'django.contrib.sites',
14
- 'django.contrib.contenttypes',
15
- 'django.contrib.auth',
16
- 'analytical',
17
- ]
18
-
19
- SECRET_KEY = 'testing'
20
-
21
- MIDDLEWARE_CLASSES = (
22
- 'django.middleware.common.CommonMiddleware',
23
- 'django.middleware.csrf.CsrfViewMiddleware',
24
- )
File without changes
@@ -1,37 +0,0 @@
1
- """
2
- Dummy testing template tags and filters.
3
- """
4
-
5
-
6
- from analytical.templatetags.analytical import TAG_LOCATIONS
7
- from django.template import Library, Node, TemplateSyntaxError
8
-
9
- register = Library()
10
-
11
-
12
- def _location_node(location):
13
- class DummyNode(Node):
14
- def render(self, context):
15
- return f"<!-- dummy_{location} -->"
16
- return DummyNode
17
-
18
-
19
- _location_nodes = {loc: _location_node(loc) for loc in TAG_LOCATIONS}
20
-
21
-
22
- def _location_tag(location):
23
- def dummy_tag(parser, token):
24
- bits = token.split_contents()
25
- if len(bits) > 1:
26
- raise TemplateSyntaxError(f"'{bits[0]}' tag takes no arguments")
27
- return _location_nodes[location]
28
- return dummy_tag
29
-
30
-
31
- for loc in TAG_LOCATIONS:
32
- register.tag(f'dummy_{loc}', _location_tag(loc))
33
-
34
-
35
- def contribute_to_analytical(add_node_cls):
36
- for location in TAG_LOCATIONS:
37
- add_node_cls(location, _location_nodes[location])
@@ -1,178 +0,0 @@
1
- """
2
- Tests for the Google Analytics template tags and filters.
3
- """
4
-
5
- from constance.test import override_config
6
- from django.http import HttpRequest
7
- from django.template import Context
8
- from django.test import override_settings
9
-
10
- from ..templatetags.google_analytics import (SCOPE_PAGE, SCOPE_SESSION, SCOPE_VISITOR, TRACK_MULTIPLE_DOMAINS,
11
- TRACK_MULTIPLE_SUBDOMAINS, TRACK_SINGLE_DOMAIN, GoogleAnalyticsNode)
12
- from ..tests.utils import TagTestCase
13
- from ..utils import AnalyticalException
14
-
15
-
16
- @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN)
17
- @override_config(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7')
18
- class GoogleAnalyticsTagTestCase(TagTestCase):
19
- """
20
- Tests for the ``google_analytics`` template tag.
21
- """
22
-
23
- def test_tag(self):
24
- r = self.render_tag('google_analytics', 'google_analytics')
25
- self.assertTrue("_gaq.push(['_setAccount', 'UA-123456-7']);" in r, r)
26
- self.assertTrue("_gaq.push(['_trackPageview']);" in r, r)
27
-
28
- def test_node(self):
29
- r = GoogleAnalyticsNode().render(Context())
30
- self.assertTrue("_gaq.push(['_setAccount', 'UA-123456-7']);" in r, r)
31
- self.assertTrue("_gaq.push(['_trackPageview']);" in r, r)
32
-
33
- @override_config(GOOGLE_ANALYTICS_PROPERTY_ID='wrong')
34
- def test_wrong_property_id(self):
35
- self.assertEqual(GoogleAnalyticsNode().render({}), '')
36
-
37
- @override_settings(
38
- GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS,
39
- GOOGLE_ANALYTICS_DOMAIN='example.com')
40
- def test_track_multiple_subdomains(self):
41
- r = GoogleAnalyticsNode().render(Context())
42
- self.assertTrue("_gaq.push(['_setDomainName', 'example.com']);" in r, r)
43
- self.assertTrue("_gaq.push(['_setAllowHash', false]);" in r, r)
44
-
45
- @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
46
- GOOGLE_ANALYTICS_DOMAIN='example.com')
47
- def test_track_multiple_domains(self):
48
- r = GoogleAnalyticsNode().render(Context())
49
- self.assertTrue("_gaq.push(['_setDomainName', 'example.com']);" in r, r)
50
- self.assertTrue("_gaq.push(['_setAllowHash', false]);" in r, r)
51
- self.assertTrue("_gaq.push(['_setAllowLinker', true]);" in r, r)
52
-
53
- def test_custom_vars(self):
54
- context = Context({
55
- 'google_analytics_var1': ('test1', 'foo'),
56
- 'google_analytics_var2': ('test2', 'bar', SCOPE_VISITOR),
57
- 'google_analytics_var4': ('test4', 'baz', SCOPE_SESSION),
58
- 'google_analytics_var5': ('test5', 'qux', SCOPE_PAGE),
59
- })
60
- r = GoogleAnalyticsNode().render(context)
61
- self.assertTrue("_gaq.push(['_setCustomVar', 1, 'test1', 'foo', 3]);"
62
- in r, r)
63
- self.assertTrue("_gaq.push(['_setCustomVar', 2, 'test2', 'bar', 1]);"
64
- in r, r)
65
- self.assertTrue("_gaq.push(['_setCustomVar', 4, 'test4', 'baz', 2]);"
66
- in r, r)
67
- self.assertTrue("_gaq.push(['_setCustomVar', 5, 'test5', 'qux', 3]);"
68
- in r, r)
69
-
70
- @override_config(GOOGLE_ANALYTICS_SITE_SPEED=True)
71
- def test_track_page_load_time(self):
72
- r = GoogleAnalyticsNode().render(Context())
73
- self.assertTrue("_gaq.push(['_trackPageLoadTime']);" in r, r)
74
-
75
- def test_display_advertising(self):
76
- with override_config(GOOGLE_ANALYTICS_DISPLAY_ADVERTISING=False):
77
- r = GoogleAnalyticsNode().render(Context())
78
- self.assertTrue("google-analytics.com/ga.js" in r, r)
79
- with override_config(GOOGLE_ANALYTICS_DISPLAY_ADVERTISING=True):
80
- r = GoogleAnalyticsNode().render(Context())
81
- self.assertTrue("stats.g.doubleclick.net/dc.js" in r, r)
82
-
83
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
84
- def test_render_internal_ip(self):
85
- req = HttpRequest()
86
- req.META['REMOTE_ADDR'] = '1.1.1.1'
87
- context = Context({'request': req})
88
- r = GoogleAnalyticsNode().render(context)
89
- self.assertTrue(r.startswith(
90
- '<!-- Google Analytics disabled on internal IP address'), r)
91
- self.assertTrue(r.endswith('-->'), r)
92
-
93
- @override_config(GOOGLE_ANALYTICS_ANONYMIZE_IP=True)
94
- def test_anonymize_ip(self):
95
- r = GoogleAnalyticsNode().render(Context())
96
- self.assertTrue("_gaq.push (['_gat._anonymizeIp']);" in r, r)
97
-
98
- @override_config(GOOGLE_ANALYTICS_ANONYMIZE_IP=False)
99
- def test_anonymize_ip_not_present(self):
100
- r = GoogleAnalyticsNode().render(Context())
101
- self.assertFalse("_gaq.push (['_gat._anonymizeIp']);" in r, r)
102
-
103
- @override_config(GOOGLE_ANALYTICS_SAMPLE_RATE=0.0)
104
- def test_set_sample_rate_min(self):
105
- r = GoogleAnalyticsNode().render(Context())
106
- self.assertTrue("_gaq.push (['_setSampleRate', '0.00']);" in r, r)
107
-
108
- @override_config(GOOGLE_ANALYTICS_SAMPLE_RATE='100.00')
109
- def test_set_sample_rate_max(self):
110
- r = GoogleAnalyticsNode().render(Context())
111
- self.assertTrue("_gaq.push (['_setSampleRate', '100.00']);" in r, r)
112
-
113
- #
114
- @override_config(GOOGLE_ANALYTICS_SAMPLE_RATE=-1)
115
- def test_exception_whenset_sample_rate_too_small(self):
116
- context = Context()
117
- self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render,
118
- context)
119
-
120
- @override_config(GOOGLE_ANALYTICS_SAMPLE_RATE=101)
121
- def test_exception_when_set_sample_rate_too_large(self):
122
- context = Context()
123
- self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render,
124
- context)
125
-
126
- @override_config(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=0.0)
127
- def test_set_site_speed_sample_rate_min(self):
128
- r = GoogleAnalyticsNode().render(Context())
129
- self.assertTrue("_gaq.push (['_setSiteSpeedSampleRate', '0.00']);" in r, r)
130
-
131
- @override_config(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE='100.00')
132
- def test_set_site_speed_sample_rate_max(self):
133
- r = GoogleAnalyticsNode().render(Context())
134
- self.assertTrue("_gaq.push (['_setSiteSpeedSampleRate', '100.00']);" in r, r)
135
-
136
- @override_config(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=-1)
137
- def test_exception_whenset_site_speed_sample_rate_too_small(self):
138
- context = Context()
139
- self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render,
140
- context)
141
-
142
- @override_config(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=101)
143
- def test_exception_when_set_site_speed_sample_rate_too_large(self):
144
- context = Context()
145
- self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render,
146
- context)
147
-
148
- @override_config(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT=0)
149
- def test_set_session_cookie_timeout_min(self):
150
- r = GoogleAnalyticsNode().render(Context())
151
- self.assertTrue("_gaq.push (['_setSessionCookieTimeout', '0']);" in r, r)
152
-
153
- @override_config(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT='10000')
154
- def test_set_session_cookie_timeout_as_string(self):
155
- r = GoogleAnalyticsNode().render(Context())
156
- self.assertTrue("_gaq.push (['_setSessionCookieTimeout', '10000']);" in r, r)
157
-
158
- @override_config(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT=-1)
159
- def test_exception_when_set_session_cookie_timeout_too_small(self):
160
- context = Context()
161
- self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render,
162
- context)
163
-
164
- @override_config(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT=0)
165
- def test_set_visitor_cookie_timeout_min(self):
166
- r = GoogleAnalyticsNode().render(Context())
167
- self.assertTrue("_gaq.push (['_setVisitorCookieTimeout', '0']);" in r, r)
168
-
169
- @override_config(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT='10000')
170
- def test_set_visitor_cookie_timeout_as_string(self):
171
- r = GoogleAnalyticsNode().render(Context())
172
- self.assertTrue("_gaq.push (['_setVisitorCookieTimeout', '10000']);" in r, r)
173
-
174
- @override_config(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT=-1)
175
- def test_exception_when_set_visitor_cookie_timeout_too_small(self):
176
- context = Context()
177
- self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render,
178
- context)
@@ -1,152 +0,0 @@
1
- """
2
- Tests for the Piwik template tags and filters.
3
- """
4
-
5
- from constance.test import override_config
6
- from django.contrib.auth import get_user_model
7
- from django.http import HttpRequest
8
- from django.template import Context
9
- from django.test.utils import override_settings
10
-
11
- from ..templatetags.piwik import PiwikNode
12
- from ..tests.utils import TagTestCase
13
-
14
-
15
- @override_config(PIWIK_DOMAIN_PATH='example.com', PIWIK_SITE_ID='345')
16
- class PiwikTagTestCase(TagTestCase):
17
- """
18
- Tests for the ``piwik`` template tag.
19
- """
20
-
21
- def test_tag(self):
22
- r = self.render_tag('piwik', 'piwik')
23
- self.assertTrue(' ? "https" : "http") + "://example.com/";' in r, r)
24
- self.assertTrue("_paq.push(['setSiteId', 345]);" in r, r)
25
- self.assertTrue('img src="http://example.com/matomo.php?idsite=345"'
26
- in r, r)
27
-
28
- def test_node(self):
29
- r = PiwikNode().render(Context({}))
30
- self.assertTrue(' ? "https" : "http") + "://example.com/";' in r, r)
31
- self.assertTrue("_paq.push(['setSiteId', 345]);" in r, r)
32
- self.assertTrue('img src="http://example.com/matomo.php?idsite=345"'
33
- in r, r)
34
-
35
- @override_config(PIWIK_DOMAIN_PATH='example.com/piwik',
36
- PIWIK_SITE_ID='345')
37
- def test_domain_path_valid(self):
38
- r = self.render_tag('piwik', 'piwik')
39
- self.assertTrue(' ? "https" : "http") + "://example.com/piwik/";' in r,
40
- r)
41
-
42
- @override_config(PIWIK_DOMAIN_PATH='example.com:1234',
43
- PIWIK_SITE_ID='345')
44
- def test_domain_port_valid(self):
45
- r = self.render_tag('piwik', 'piwik')
46
- self.assertTrue(' ? "https" : "http") + "://example.com:1234/";' in r,
47
- r)
48
-
49
- @override_config(PIWIK_DOMAIN_PATH='example.com:1234/piwik',
50
- PIWIK_SITE_ID='345')
51
- def test_domain_port_path_valid(self):
52
- r = self.render_tag('piwik', 'piwik')
53
- self.assertTrue(' ? "https" : "http") + "://example.com:1234/piwik/";' in r,
54
- r)
55
-
56
- @override_config(PIWIK_DOMAIN_PATH='')
57
- def test_no_domain(self):
58
- self.assertEqual(PiwikNode().render({}), '')
59
-
60
- @override_config(PIWIK_SITE_ID='')
61
- def test_no_siteid(self):
62
- self.assertEqual(PiwikNode().render({}), '')
63
-
64
- @override_config(PIWIK_SITE_ID='x')
65
- def test_siteid_not_a_number(self):
66
- self.assertEqual(PiwikNode().render({}), '')
67
-
68
- @override_config(PIWIK_DOMAIN_PATH='http://www.example.com')
69
- def test_domain_protocol_invalid(self):
70
- self.assertEqual(PiwikNode().render({}), '')
71
-
72
- @override_config(PIWIK_DOMAIN_PATH='example.com/')
73
- def test_domain_slash_invalid(self):
74
- self.assertEqual(PiwikNode().render({}), '')
75
-
76
- @override_config(PIWIK_DOMAIN_PATH='example.com:123:456')
77
- def test_domain_multi_port(self):
78
- self.assertEqual(PiwikNode().render({}), '')
79
-
80
- @override_config(PIWIK_DOMAIN_PATH='example.com:')
81
- def test_domain_incomplete_port(self):
82
- self.assertEqual(PiwikNode().render({}), '')
83
-
84
- @override_config(PIWIK_DOMAIN_PATH='example.com:/piwik')
85
- def test_domain_uri_incomplete_port(self):
86
- self.assertEqual(PiwikNode().render({}), '')
87
-
88
- @override_config(PIWIK_DOMAIN_PATH='example.com:12df')
89
- def test_domain_port_invalid(self):
90
- self.assertEqual(PiwikNode().render({}), '')
91
-
92
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
93
- def test_render_internal_ip(self):
94
- req = HttpRequest()
95
- req.META['REMOTE_ADDR'] = '1.1.1.1'
96
- context = Context({'request': req})
97
- r = PiwikNode().render(context)
98
- self.assertTrue(r.startswith(
99
- '<!-- Piwik disabled on internal IP address'), r)
100
- self.assertTrue(r.endswith('-->'), r)
101
-
102
- def test_uservars(self):
103
- context = Context({'piwik_vars': [(1, 'foo', 'foo_val'),
104
- (2, 'bar', 'bar_val', 'page'),
105
- (3, 'spam', 'spam_val', 'visit')]})
106
- r = PiwikNode().render(context)
107
- msg = 'Incorrect Piwik custom variable rendering. Expected:\n%s\nIn:\n%s'
108
- for var_code in ['_paq.push(["setCustomVariable", 1, "foo", "foo_val", "page"]);',
109
- '_paq.push(["setCustomVariable", 2, "bar", "bar_val", "page"]);',
110
- '_paq.push(["setCustomVariable", 3, "spam", "spam_val", "visit"]);']:
111
- self.assertIn(var_code, r, msg % (var_code, r))
112
-
113
- @override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
114
- def test_default_usertrack(self):
115
- User = get_user_model()
116
- context = Context({
117
- 'user': User(username='BDFL', first_name='Guido', last_name='van Rossum')
118
- })
119
- r = PiwikNode().render(context)
120
- msg = 'Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s'
121
- var_code = '_paq.push(["setUserId", "BDFL"]);'
122
- self.assertIn(var_code, r, msg % (var_code, r))
123
-
124
- def test_piwik_usertrack(self):
125
- context = Context({
126
- 'piwik_identity': 'BDFL'
127
- })
128
- r = PiwikNode().render(context)
129
- msg = 'Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s'
130
- var_code = '_paq.push(["setUserId", "BDFL"]);'
131
- self.assertIn(var_code, r, msg % (var_code, r))
132
-
133
- def test_analytical_usertrack(self):
134
- context = Context({
135
- 'analytical_identity': 'BDFL'
136
- })
137
- r = PiwikNode().render(context)
138
- msg = 'Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s'
139
- var_code = '_paq.push(["setUserId", "BDFL"]);'
140
- self.assertIn(var_code, r, msg % (var_code, r))
141
-
142
- @override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
143
- def test_disable_usertrack(self):
144
- User = get_user_model()
145
- context = Context({
146
- 'user': User(username='BDFL', first_name='Guido', last_name='van Rossum'),
147
- 'piwik_identity': None
148
- })
149
- r = PiwikNode().render(context)
150
- msg = 'Incorrect Piwik user tracking rendering.\nFound:\n%s\nIn:\n%s'
151
- var_code = '_paq.push(["setUserId", "BDFL"]);'
152
- self.assertNotIn(var_code, r, msg % (var_code, r))
@@ -1,112 +0,0 @@
1
- """
2
- Tests for the analytical.utils module.
3
- """
4
- # import django
5
-
6
- from django.contrib.auth.models import AbstractBaseUser
7
- from django.db import models
8
- from django.http import HttpRequest
9
- from django.template import Context
10
- from django.test.utils import override_settings
11
-
12
- from ..tests.utils import TestCase
13
- from ..utils import AnalyticalException, get_domain, get_identity, get_required_setting, is_internal_ip
14
-
15
-
16
- class SettingDeletedTestCase(TestCase):
17
-
18
- @override_settings(USER_ID=None)
19
- def test_get_required_setting(self):
20
- """
21
- Make sure using get_required_setting fails in the right place.
22
- """
23
-
24
- # available in python >= 3.2
25
- if hasattr(self, 'assertRaisesRegex'):
26
- with self.assertRaisesRegex(AnalyticalException, "USER_ID"):
27
- get_required_setting("USER_ID", r"\d+", "invalid USER_ID")
28
- else:
29
- self.assertRaises(AnalyticalException,
30
- get_required_setting, "USER_ID", r"\d+", "invalid USER_ID")
31
-
32
-
33
- class MyUser(AbstractBaseUser):
34
- identity = models.CharField(max_length=50)
35
- USERNAME_FIELD = 'identity'
36
-
37
-
38
- class GetIdentityTestCase(TestCase):
39
- def test_custom_username_field(self):
40
- get_id = get_identity(Context({}), user=MyUser(identity='fake_id'))
41
- self.assertEqual(get_id, 'fake_id')
42
-
43
-
44
- @override_settings(ANALYTICAL_DOMAIN="example.org")
45
- class GetDomainTestCase(TestCase):
46
- def test_get_service_domain_from_context(self):
47
- context = Context({'test_domain': 'example.com'})
48
- self.assertEqual(get_domain(context, 'test'), 'example.com')
49
-
50
- def test_get_analytical_domain_from_context(self):
51
- context = Context({'analytical_domain': 'example.com'})
52
- self.assertEqual(get_domain(context, 'test'), 'example.com')
53
-
54
- @override_settings(TEST_DOMAIN="example.net")
55
- def test_get_service_domain_from_settings(self):
56
- context = Context()
57
- self.assertEqual(get_domain(context, 'test'), 'example.net')
58
-
59
- def test_get_analytical_domain_from_settings(self):
60
- context = Context()
61
- self.assertEqual(get_domain(context, 'test'), 'example.org')
62
-
63
-
64
- class InternalIpTestCase(TestCase):
65
-
66
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
67
- def test_render_no_internal_ip(self):
68
- context = Context()
69
- self.assertFalse(is_internal_ip(context))
70
-
71
- @override_settings(INTERNAL_IPS=['1.1.1.1'])
72
- @override_settings(ANALYTICAL_INTERNAL_IPS=[])
73
- def test_render_analytical_internal_ips_override_when_empty(self):
74
- req = HttpRequest()
75
- req.META['REMOTE_ADDR'] = '1.1.1.1'
76
- context = Context({'request': req})
77
- self.assertFalse(is_internal_ip(context))
78
-
79
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
80
- def test_render_internal_ip(self):
81
- req = HttpRequest()
82
- req.META['REMOTE_ADDR'] = '1.1.1.1'
83
- context = Context({'request': req})
84
- self.assertTrue(is_internal_ip(context))
85
-
86
- @override_settings(TEST_INTERNAL_IPS=['1.1.1.1'])
87
- def test_render_prefix_internal_ip(self):
88
- req = HttpRequest()
89
- req.META['REMOTE_ADDR'] = '1.1.1.1'
90
- context = Context({'request': req})
91
- self.assertTrue(is_internal_ip(context, 'TEST'))
92
-
93
- @override_settings(INTERNAL_IPS=['1.1.1.1'])
94
- def test_render_internal_ip_fallback(self):
95
- req = HttpRequest()
96
- req.META['REMOTE_ADDR'] = '1.1.1.1'
97
- context = Context({'request': req})
98
- self.assertTrue(is_internal_ip(context))
99
-
100
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
101
- def test_render_internal_ip_forwarded_for(self):
102
- req = HttpRequest()
103
- req.META['HTTP_X_FORWARDED_FOR'] = '1.1.1.1'
104
- context = Context({'request': req})
105
- self.assertTrue(is_internal_ip(context))
106
-
107
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
108
- def test_render_different_internal_ip(self):
109
- req = HttpRequest()
110
- req.META['REMOTE_ADDR'] = '2.2.2.2'
111
- context = Context({'request': req})
112
- self.assertFalse(is_internal_ip(context))
@@ -1,56 +0,0 @@
1
- """
2
- Testing utilities.
3
- """
4
-
5
-
6
- from django.template import Context, RequestContext, Template
7
- from django.test.testcases import TestCase
8
-
9
-
10
- def run_tests():
11
- """
12
- Use the Django test runner to run the tests.
13
-
14
- Sets the return code to the number of failed tests.
15
- """
16
- import sys
17
-
18
- import django
19
- try:
20
- django.setup()
21
- except AttributeError:
22
- pass
23
- try:
24
- from django.test.runner import DiscoverRunner as TestRunner
25
- except ImportError:
26
- from django.test.simple import DjangoTestSuiteRunner as TestRunner
27
- runner = TestRunner()
28
- sys.exit(runner.run_tests(["analytical"]))
29
-
30
-
31
- class TagTestCase(TestCase):
32
- """
33
- Tests for a template tag.
34
-
35
- Adds support methods for testing template tags.
36
- """
37
-
38
- def render_tag(self, library, tag, vars=None, request=None):
39
- if vars is None:
40
- vars = {}
41
- t = Template(f"{{% load {library} %}}{{% {tag} %}}")
42
- if request is not None:
43
- context = RequestContext(request, vars)
44
- else:
45
- context = Context(vars)
46
- return t.render(context)
47
-
48
- def render_template(self, template, vars=None, request=None):
49
- if vars is None:
50
- vars = {}
51
- t = Template(template)
52
- if request is not None:
53
- context = RequestContext(request, vars)
54
- else:
55
- context = Context(vars)
56
- return t.render(context)
File without changes