0004-matomo-do-not-abort-if-simulated-first-tracking-visi.patch
hobo/matomo/utils.py | ||
---|---|---|
307 | 307 |
return 'success' |
308 | 308 | |
309 | 309 |
def auto_configure_matomo(): |
310 |
"""main function""" |
|
310 |
"""main function |
|
311 |
may returns MatomoException raised by ping""" |
|
312 |
warning = None |
|
311 | 313 |
tenant_name, site_urls = get_tenant_name_and_public_urls() |
312 | 314 |
if tenant_name is None: |
313 | 315 |
raise MatomoException("no portal-user's url available") |
... | ... | |
317 | 319 |
id_site = upgrade_site(matomo, tenant_name, site_urls) |
318 | 320 |
logme_url = upgrade_user(matomo, tenant_name, id_site) |
319 | 321 |
tracking_js = upgrade_javascript_tag(matomo, id_site) |
320 |
matomo.ping(id_site) |
|
322 | ||
323 |
# simulate a first tracking visit (no matter if it fails) |
|
324 |
try: |
|
325 |
matomo.ping(id_site) |
|
326 |
except MatomoException as exc: |
|
327 |
warning = exc |
|
321 | 328 | |
322 | 329 |
# save matomo's variables |
323 | 330 |
logme_url_var = get_variable('matomo_logme_url') |
324 | 331 |
logme_url_var.value = logme_url |
325 | 332 |
logme_url_var.save() |
326 | 333 |
put_tracking_js(tracking_js) |
327 |
return True |
|
334 |
return warning |
hobo/matomo/views.py | ||
---|---|---|
92 | 92 |
success_url = reverse_lazy('matomo-home') |
93 | 93 | |
94 | 94 |
def form_valid(self, form): |
95 |
warning = None |
|
95 | 96 |
try: |
96 |
auto_configure_matomo() |
|
97 |
warning = auto_configure_matomo()
|
|
97 | 98 |
except MatomoException as exc: |
98 | 99 |
messages.error(self.request, str(exc)) |
100 |
if warning: |
|
101 |
messages.warning(self.request, str(warning)) |
|
99 | 102 |
return super(EnableAutoView, self).form_valid(form) |
100 | 103 | |
101 | 104 |
enable_auto = EnableAutoView.as_view() |
tests/test_matomo_utils.py | ||
---|---|---|
175 | 175 | |
176 | 176 |
# response may be XML or JSON |
177 | 177 |
if content[0] == '{': |
178 |
response.json = mock.MagicMock(return_value = json.loads(content)) |
|
179 |
else: |
|
180 |
response._content = content |
|
178 |
response.json = mock.MagicMock(return_value=json.loads(content)) |
|
179 |
response._content = content |
|
181 | 180 | |
182 | 181 |
response.status_code = 200 |
183 | 182 |
responses.append(response) |
... | ... | |
662 | 661 |
DEL_UNKNOWN_USER, MATOMO_SUCCESS, |
663 | 662 |
JAVASCRIPT_TAG, PING_SUCCESS] |
664 | 663 |
mocked_post.side_effect = requests_post_mocked_replies(contents) |
665 |
assert auto_configure_matomo() is True |
|
664 |
assert auto_configure_matomo() is None |
|
665 |
logme_url_var = get_variable('matomo_logme_url') |
|
666 |
assert logme_url_var.value != '' |
|
667 |
tracking_js_var = get_variable('visits_tracking_js') |
|
668 |
assert tracking_js_var.value == '' |
|
669 |
tracking_js2_var = get_variable('cnil_compliant_visits_tracking_js') |
|
670 |
assert tracking_js2_var.value != '' |
|
671 | ||
672 |
@mock.patch('requests.post') |
|
673 |
def test_auto_configure_matomo_warning(mocked_post): |
|
674 |
tracking_js_var = get_variable('visits_tracking_js', 'js_code') |
|
675 | ||
676 |
Combo.objects.create(base_url='https://combo.dev.publik.love', |
|
677 |
template_name='portal-user') |
|
678 |
Wcs.objects.create(base_url='https://wcs.dev.publik.love') |
|
679 |
Fargo.objects.create(base_url='https://fargo.dev.publik.love') |
|
680 | ||
681 |
with override_settings(MATOMO_SERVER=CONFIG): |
|
682 |
contents = [GET_NO_SITE_FROM_URL, ADD_SITE_SUCCESS, |
|
683 |
DEL_UNKNOWN_USER, MATOMO_SUCCESS, |
|
684 |
JAVASCRIPT_TAG, PING_ERROR] |
|
685 |
mocked_post.side_effect = requests_post_mocked_replies(contents) |
|
686 |
warning = auto_configure_matomo() |
|
687 |
assert 'ping fails' in str(warning) |
|
666 | 688 |
logme_url_var = get_variable('matomo_logme_url') |
667 | 689 |
assert logme_url_var.value != '' |
668 | 690 |
tracking_js_var = get_variable('visits_tracking_js') |
... | ... | |
697 | 719 |
auto_configure_matomo() |
698 | 720 |
tracking_js_var = get_variable('visits_tracking_js') |
699 | 721 |
assert tracking_js_var.value == 'js_code' |
700 | ||
701 |
with override_settings(MATOMO_SERVER=CONFIG): |
|
702 |
contents = [GET_NO_SITE_FROM_URL, ADD_SITE_SUCCESS, |
|
703 |
DEL_UNKNOWN_USER, MATOMO_SUCCESS, |
|
704 |
JAVASCRIPT_TAG, PING_ERROR] |
|
705 |
mocked_post.side_effect = requests_post_mocked_replies(contents) |
|
706 |
with pytest.raises(MatomoError, match='ping fails'): |
|
707 |
auto_configure_matomo() |
|
708 |
tracking_js_var = get_variable('visits_tracking_js') |
|
709 |
assert tracking_js_var.value == 'js_code' |
tests/test_matomo_views.py | ||
---|---|---|
64 | 64 |
""" |
65 | 65 | |
66 | 66 |
PING_SUCCESS = '{"status":"success","tracked":1,"invalid":0}' |
67 |
PING_ERROR = 'somethings else'
|
|
67 |
PING_ERROR = '{"status":"not success"}'
|
|
68 | 68 | |
69 | 69 |
def requests_post_mocked_replies(contents): |
70 | 70 |
"""buid an iterator for mock's side_effect parameter""" |
... | ... | |
74 | 74 | |
75 | 75 |
# response may be XML or JSON |
76 | 76 |
if content[0] == '{': |
77 |
response.json = mock.MagicMock(return_value = json.loads(content)) |
|
78 |
else: |
|
79 |
response._content = content |
|
77 |
response.json = mock.MagicMock(return_value=json.loads(content)) |
|
78 |
response._content = content |
|
80 | 79 | |
81 | 80 |
response.status_code = 200 |
82 | 81 |
responses.append(response) |
... | ... | |
180 | 179 |
assert resp3.body.find('Excellent respect of user rights') != -1 |
181 | 180 | |
182 | 181 |
@mock.patch('requests.post') |
183 |
def test_enable_auto_failure(mocked_post, admin_user): |
|
182 |
def test_enable_auto_warning(mocked_post, admin_user): |
|
183 |
"""succesfull automatic scenario having final ping failure""" |
|
184 |
Combo.objects.create(base_url='https://combo.dev.publik.love', |
|
185 |
template_name='portal-user') |
|
186 |
Wcs.objects.create(base_url='https://wcs.dev.publik.love') |
|
187 |
Fargo.objects.create(base_url='https://fargo.dev.publik.love') |
|
188 | ||
189 |
contents = [GET_NO_SITE_FROM_URL, ADD_SITE_SUCCESS, |
|
190 |
DEL_UNKNOWN_USER, MATOMO_SUCCESS, |
|
191 |
JAVASCRIPT_TAG, PING_ERROR] |
|
192 | ||
193 |
mocked_post.side_effect = requests_post_mocked_replies(contents) |
|
194 |
with override_settings(MATOMO_SERVER=CONFIG): |
|
195 |
app = login(TestApp(application)) |
|
196 |
resp1 = app.get('/matomo/enable-auto', status=200) |
|
197 |
resp2 = resp1.form.submit() |
|
198 | ||
199 |
# call utils.py::auto_configure_matomo() |
|
200 |
resp3 = resp2.follow() |
|
201 |
print resp3.body |
|
202 | ||
203 |
# expect 'ping fails' warning |
|
204 |
assert resp3.body.find('class="warning">ping fails') != -1 |
|
205 | ||
206 |
# expect the CNIL compliance message is displayed |
|
207 |
assert resp3.body.find('Excellent respect of user rights') != -1 |
|
208 | ||
209 |
@mock.patch('requests.post') |
|
210 |
def test_enable_auto_error(mocked_post, admin_user): |
|
184 | 211 |
"""error on automatic scenario""" |
185 | 212 |
Combo.objects.create(base_url='https://combo.dev.publik.love', |
186 | 213 |
template_name='portal-user') |
187 |
- |