mirror of
https://github.com/jazzband/django-analytical.git
synced 2026-05-18 20:21:15 +00:00
sort_keys all the things!
This commit is contained in:
parent
a94f0d8bb0
commit
559cd3677f
15 changed files with 38 additions and 58 deletions
|
|
@ -86,7 +86,7 @@ class ChartbeatBottomNode(Node):
|
|||
domain = _get_domain(context)
|
||||
if domain is not None:
|
||||
config['domain'] = domain
|
||||
html = SETUP_CODE % {'config': json.dumps(config)}
|
||||
html = SETUP_CODE % {'config': json.dumps(config, sort_keys=True)}
|
||||
if is_internal_ip(context, 'CHARTBEAT'):
|
||||
html = disable_html(html, 'Chartbeat')
|
||||
return html
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ class ClickyNode(Node):
|
|||
custom.setdefault('session', {})['username'] = identity
|
||||
|
||||
html = TRACKING_CODE % {'site_id': self.site_id,
|
||||
'custom': json.dumps(custom)}
|
||||
'custom': json.dumps(custom, sort_keys=True)}
|
||||
if is_internal_ip(context, 'CLICKY'):
|
||||
html = disable_html(html, 'Clicky')
|
||||
return html
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ class IntercomNode(Node):
|
|||
user = get_user_from_context(context)
|
||||
vars = self._get_custom_attrs(context)
|
||||
vars["app_id"] = self.app_id
|
||||
html = TRACKING_CODE % {"settings_json": json.dumps(vars)}
|
||||
html = TRACKING_CODE % {"settings_json": json.dumps(vars, sort_keys=True)}
|
||||
|
||||
if is_internal_ip(context, 'INTERCOM') or not user or not user.is_authenticated():
|
||||
# Intercom is disabled for non-logged in users.
|
||||
|
|
|
|||
|
|
@ -78,13 +78,13 @@ class KissMetricsNode(Node):
|
|||
try:
|
||||
name, properties = context[EVENT_CONTEXT_KEY]
|
||||
commands.append(EVENT_CODE % {'name': name,
|
||||
'properties': json.dumps(properties)})
|
||||
'properties': json.dumps(properties, sort_keys=True)})
|
||||
except KeyError:
|
||||
pass
|
||||
try:
|
||||
properties = context[PROPERTY_CONTEXT_KEY]
|
||||
commands.append(PROPERTY_CODE % {
|
||||
'properties': json.dumps(properties)})
|
||||
'properties': json.dumps(properties, sort_keys=True)})
|
||||
except KeyError:
|
||||
pass
|
||||
html = TRACKING_CODE % {'api_key': self.api_key,
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ class MixpanelNode(Node):
|
|||
try:
|
||||
name, properties = context[EVENT_CONTEXT_KEY]
|
||||
commands.append(EVENT_CODE % {'name': name,
|
||||
'properties': json.dumps(properties)})
|
||||
'properties': json.dumps(properties, sort_keys=True)})
|
||||
except KeyError:
|
||||
pass
|
||||
html = TRACKING_CODE % {'token': self.token,
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ class OlarkNode(Node):
|
|||
extra_code.append(NICKNAME_CODE % identity)
|
||||
try:
|
||||
extra_code.append(STATUS_CODE %
|
||||
json.dumps(context[STATUS_CONTEXT_KEY]))
|
||||
json.dumps(context[STATUS_CONTEXT_KEY], sort_keys=True))
|
||||
except KeyError:
|
||||
pass
|
||||
extra_code.extend(self._get_configuration(context))
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ class ReinvigorateNode(Node):
|
|||
email = get_identity(context, 'reinvigorate', lambda u: u.email)
|
||||
if email is not None:
|
||||
re_vars['context'] = email
|
||||
tags = " ".join("var re_%s_tag = %s;" % (tag, json.dumps(value))
|
||||
tags = " ".join("var re_%s_tag = %s;" % (tag, json.dumps(value, sort_keys=True))
|
||||
for tag, value in re_vars.items())
|
||||
|
||||
html = TRACKING_CODE % {'tracking_id': self.tracking_id,
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ class UserVoiceNode(Node):
|
|||
# Enable SSO
|
||||
pass
|
||||
html = TRACKING_CODE % {'widget_key': widget_key,
|
||||
'options': json.dumps(options)}
|
||||
'options': json.dumps(options, sort_keys=True)}
|
||||
return html
|
||||
|
||||
|
||||
|
|
@ -103,7 +103,7 @@ class UserVoiceKeyLinkNode(Node):
|
|||
vars = {}
|
||||
if self.widget_key:
|
||||
vars['widget_key'] = self.widget_key.resolve(context)
|
||||
return LINK_CODE % json.dumps(vars)
|
||||
return LINK_CODE % json.dumps(vars, sort_keys=True)
|
||||
|
||||
|
||||
def contribute_to_analytical(add_node):
|
||||
|
|
|
|||
|
|
@ -57,8 +57,8 @@ class WoopraNode(Node):
|
|||
visitor = self._get_visitor(context)
|
||||
|
||||
html = TRACKING_CODE % {
|
||||
'settings': json.dumps(settings),
|
||||
'visitor': json.dumps(visitor),
|
||||
'settings': json.dumps(settings, sort_keys=True),
|
||||
'visitor': json.dumps(visitor, sort_keys=True),
|
||||
}
|
||||
if is_internal_ip(context, 'WOOPRA'):
|
||||
html = disable_html(html, 'Woopra')
|
||||
|
|
|
|||
|
|
@ -54,12 +54,8 @@ class ClickyTagTestCase(TagTestCase):
|
|||
def test_custom(self):
|
||||
r = ClickyNode().render(Context({'clicky_var1': 'val1',
|
||||
'clicky_var2': 'val2'}))
|
||||
self.assertTrue(
|
||||
(re.search('var clicky_custom = {.*'
|
||||
'"var1": "val1", "var2": "val2".*};', r) or
|
||||
re.search('var clicky_custom = {.*'
|
||||
'"var2": "val2", "var1": "val1".*};', r)), r
|
||||
)
|
||||
self.assertTrue(re.search('var clicky_custom = {.*'
|
||||
'"var1": "val1", "var2": "val2".*};', r), r)
|
||||
|
||||
@override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
|
||||
def test_render_internal_ip(self):
|
||||
|
|
|
|||
|
|
@ -34,13 +34,10 @@ class IntercomTagTestCase(TagTestCase):
|
|||
date_joined=now)
|
||||
}))
|
||||
# Because the json isn't predictably ordered, we can't just test the whole thing verbatim.
|
||||
self.assertIn("""<script id="IntercomSettingsScriptTag">
|
||||
window.intercomSettings = {""", rendered_tag)
|
||||
self.assertIn('"app_id": "1234567890abcdef0123456789"', rendered_tag)
|
||||
self.assertIn('"full_name": "Firstname Lastname"', rendered_tag)
|
||||
self.assertIn('"email": "test@example.com"', rendered_tag)
|
||||
self.assertIn('"created_at": 1397074500', rendered_tag)
|
||||
self.assertIn("""</script>
|
||||
self.assertEquals("""
|
||||
<script id="IntercomSettingsScriptTag">
|
||||
window.intercomSettings = {"app_id": "1234567890abcdef0123456789", "created_at": 1397074500, "email": "test@example.com", "full_name": "Firstname Lastname"};
|
||||
</script>
|
||||
<script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://static.intercomcdn.com/intercom.v1.js';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script>
|
||||
""", rendered_tag)
|
||||
|
||||
|
|
@ -57,19 +54,17 @@ class IntercomTagTestCase(TagTestCase):
|
|||
r = IntercomNode().render(Context({'user': User(username='test',
|
||||
first_name='Firstname', last_name='Lastname',
|
||||
email="test@example.com", date_joined=now)}))
|
||||
self.assertTrue("window.intercomSettings = {" in r, r)
|
||||
self.assertTrue('"app_id": "1234567890abcdef0123456789"' in r)
|
||||
self.assertTrue('"full_name": "Firstname Lastname"' in r)
|
||||
self.assertTrue('"email": "test@example.com"' in r)
|
||||
self.assertTrue('"created_at": 1397074500' in r)
|
||||
self.assertTrue(
|
||||
"""window.intercomSettings = {"app_id": "1234567890abcdef0123456789", "created_at": 1397074500, "email": "test@example.com", "full_name": "Firstname Lastname"};"""\
|
||||
in r
|
||||
)
|
||||
|
||||
def test_custom(self):
|
||||
r = IntercomNode().render(Context({
|
||||
'intercom_var1': 'val1',
|
||||
'intercom_var2': 'val2'
|
||||
}))
|
||||
self.assertTrue('"var1": "val1"' in r)
|
||||
self.assertTrue('"var2": "val2"' in r)
|
||||
self.assertTrue('var1": "val1", "var2": "val2"' in r)
|
||||
|
||||
def test_identify_name_and_email(self):
|
||||
r = IntercomNode().render(Context({
|
||||
|
|
@ -78,8 +73,7 @@ class IntercomTagTestCase(TagTestCase):
|
|||
last_name='Lastname',
|
||||
email="test@example.com")
|
||||
}))
|
||||
self.assertTrue('"full_name": "Firstname Lastname"' in r)
|
||||
self.assertTrue('"email": "test@example.com"' in r)
|
||||
self.assertTrue('"email": "test@example.com", "full_name": "Firstname Lastname"' in r)
|
||||
|
||||
def test_identify_username_no_email(self):
|
||||
r = IntercomNode().render(Context({'user': User(username='test')}))
|
||||
|
|
|
|||
|
|
@ -55,19 +55,14 @@ class KissMetricsTagTestCase(TagTestCase):
|
|||
def test_event(self):
|
||||
r = KissMetricsNode().render(Context({'kiss_metrics_event':
|
||||
('test_event', {'prop1': 'val1', 'prop2': 'val2'})}))
|
||||
self.assertTrue(
|
||||
("_kmq.push(['record', 'test_event', "
|
||||
'{"prop1": "val1", "prop2": "val2"}]);' in r or\
|
||||
"_kmq.push(['record', 'test_event', "
|
||||
'{"prop2": "val2", "prop1": "val1"}]);' in r), r)
|
||||
self.assertTrue("_kmq.push(['record', 'test_event', "
|
||||
'{"prop1": "val1", "prop2": "val2"}]);' in r, r)
|
||||
|
||||
def test_property(self):
|
||||
r = KissMetricsNode().render(Context({'kiss_metrics_properties':
|
||||
{'prop1': 'val1', 'prop2': 'val2'}}))
|
||||
self.assertTrue(
|
||||
('_kmq.push([\'set\', {"prop1": "val1", "prop2": "val2"}]);' in r or
|
||||
'_kmq.push([\'set\', {"prop2": "val2", "prop1": "val1"}]);' in r),
|
||||
r)
|
||||
self.assertTrue("_kmq.push([\'set\', "
|
||||
'{"prop1": "val1", "prop2": "val2"}]);' in r, r)
|
||||
|
||||
def test_alias(self):
|
||||
r = KissMetricsNode().render(Context({'kiss_metrics_alias':
|
||||
|
|
|
|||
|
|
@ -54,9 +54,8 @@ class MixpanelTagTestCase(TagTestCase):
|
|||
def test_event(self):
|
||||
r = MixpanelNode().render(Context({'mixpanel_event':
|
||||
('test_event', {'prop1': 'val1', 'prop2': 'val2'})}))
|
||||
self.assertTrue(
|
||||
('mixpanel.track(\'test_event\', {"prop1": "val1", "prop2": "val2"});' in r or
|
||||
'mixpanel.track(\'test_event\', {"prop2": "val2", "prop1": "val1"});' in r), r)
|
||||
self.assertTrue("mixpanel.track(\'test_event\', "
|
||||
'{"prop1": "val1", "prop2": "val2"});' in r, r)
|
||||
|
||||
@override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
|
||||
def test_render_internal_ip(self):
|
||||
|
|
|
|||
|
|
@ -89,6 +89,5 @@ class UserVoiceTagTestCase(TagTestCase):
|
|||
}
|
||||
}
|
||||
r = UserVoiceNode().render(Context(vars))
|
||||
self.assertTrue(
|
||||
('"custom_fields": {"field2": "val2", "field1": "val1"}' in r or
|
||||
'"custom_fields": {"field1": "val1", "field2": "val2"}' in r ), r)
|
||||
self.assertTrue('"custom_fields": {"field1": "val1", "field2": "val2"}'
|
||||
in r , r)
|
||||
|
|
|
|||
|
|
@ -37,25 +37,22 @@ class WoopraTagTestCase(TagTestCase):
|
|||
@override_settings(WOOPRA_IDLE_TIMEOUT=1234)
|
||||
def test_idle_timeout(self):
|
||||
r = WoopraNode().render(Context({}))
|
||||
self.assertTrue(
|
||||
('var woo_settings = {"domain": "example.com", "idle_timeout": "1234"};' in r or
|
||||
'var woo_settings = {"idle_timeout": "1234", "domain": "example.com"};' in r), r)
|
||||
self.assertTrue('var woo_settings = {"domain": "example.com", '
|
||||
'"idle_timeout": "1234"};' in r, r)
|
||||
|
||||
def test_custom(self):
|
||||
r = WoopraNode().render(Context({'woopra_var1': 'val1',
|
||||
'woopra_var2': 'val2'}))
|
||||
self.assertTrue(
|
||||
('var woo_visitor = {"var1": "val1", "var2": "val2"};' in r or
|
||||
'var woo_visitor = {"var2": "val2", "var1": "val1"};' in r), r)
|
||||
self.assertTrue('var woo_visitor = {"var1": "val1", "var2": "val2"};'
|
||||
in r, r)
|
||||
|
||||
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
|
||||
def test_identify_name_and_email(self):
|
||||
r = WoopraNode().render(Context({'user': User(username='test',
|
||||
first_name='Firstname', last_name='Lastname',
|
||||
email="test@example.com")}))
|
||||
self.assertTrue(
|
||||
('var woo_visitor = {"name": "Firstname Lastname", "email": "test@example.com"};' in r or
|
||||
'var woo_visitor = {"email": "test@example.com", "name": "Firstname Lastname"};' in r), r)
|
||||
self.assertTrue('var woo_visitor = {"email": "test@example.com", '
|
||||
'"name": "Firstname Lastname"};' in r, r)
|
||||
|
||||
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
|
||||
def test_identify_username_no_email(self):
|
||||
|
|
|
|||
Loading…
Reference in a new issue