diff --git a/analytical/templatetags/analytical.py b/analytical/templatetags/analytical.py
index bc9c262..2c17471 100644
--- a/analytical/templatetags/analytical.py
+++ b/analytical/templatetags/analytical.py
@@ -3,45 +3,44 @@ Analytical template tags and filters.
"""
import logging
+from importlib import import_module
from django import template
from django.template import Node, TemplateSyntaxError
-from importlib import import_module
from analytical.utils import AnalyticalException
-
-TAG_LOCATIONS = ['head_top', 'head_bottom', 'body_top', 'body_bottom']
-TAG_POSITIONS = ['first', None, 'last']
+TAG_LOCATIONS = ["head_top", "head_bottom", "body_top", "body_bottom"]
+TAG_POSITIONS = ["first", None, "last"]
TAG_MODULES = [
- 'analytical.chartbeat',
- 'analytical.clickmap',
- 'analytical.clicky',
- 'analytical.crazy_egg',
- 'analytical.facebook_pixel',
- 'analytical.gauges',
- 'analytical.google_analytics',
- 'analytical.google_analytics_js',
- 'analytical.google_analytics_gtag',
- 'analytical.gosquared',
- 'analytical.hotjar',
- 'analytical.hubspot',
- 'analytical.intercom',
- 'analytical.kiss_insights',
- 'analytical.kiss_metrics',
- 'analytical.luckyorange',
- 'analytical.matomo',
- 'analytical.mixpanel',
- 'analytical.olark',
- 'analytical.optimizely',
- 'analytical.performable',
- 'analytical.piwik',
- 'analytical.rating_mailru',
- 'analytical.snapengage',
- 'analytical.spring_metrics',
- 'analytical.uservoice',
- 'analytical.woopra',
- 'analytical.yandex_metrica',
+ "analytical.chartbeat",
+ "analytical.clickmap",
+ "analytical.clicky",
+ "analytical.crazy_egg",
+ "analytical.facebook_pixel",
+ "analytical.gauges",
+ "analytical.google_analytics",
+ "analytical.google_analytics_js",
+ "analytical.google_analytics_gtag",
+ "analytical.gosquared",
+ "analytical.hotjar",
+ "analytical.hubspot",
+ "analytical.intercom",
+ "analytical.kiss_insights",
+ "analytical.kiss_metrics",
+ "analytical.luckyorange",
+ "analytical.matomo",
+ "analytical.mixpanel",
+ "analytical.olark",
+ "analytical.optimizely",
+ "analytical.performable",
+ "analytical.piwik",
+ "analytical.rating_mailru",
+ "analytical.snapengage",
+ "analytical.spring_metrics",
+ "analytical.uservoice",
+ "analytical.woopra",
+ "analytical.yandex_metrica",
]
logger = logging.getLogger(__name__)
@@ -59,7 +58,7 @@ def _location_tag(location):
for loc in TAG_LOCATIONS:
- register.tag('analytical_%s' % loc, _location_tag(loc))
+ register.tag("analytical_%s" % loc, _location_tag(loc))
class AnalyticalNode(Node):
@@ -83,13 +82,14 @@ def _load_template_nodes():
except AnalyticalException as e:
logger.debug("not loading tags from '%s': %s", path, e)
for location in TAG_LOCATIONS:
- template_nodes[location] = sum((template_nodes[location][p]
- for p in TAG_POSITIONS), [])
+ template_nodes[location] = sum(
+ (template_nodes[location][p] for p in TAG_POSITIONS), []
+ )
return template_nodes
def _import_tag_module(path):
- app_name, lib_name = path.rsplit('.', 1)
+ app_name, lib_name = path.rsplit(".", 1)
return import_module("%s.templatetags.%s" % (app_name, lib_name))
diff --git a/analytical/templatetags/chartbeat.py b/analytical/templatetags/chartbeat.py
index 1bdb9ab..c7b88c2 100644
--- a/analytical/templatetags/chartbeat.py
+++ b/analytical/templatetags/chartbeat.py
@@ -9,11 +9,12 @@ from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import is_internal_ip, disable_html, get_required_setting
+from analytical.utils import disable_html, get_required_setting, is_internal_ip
-
-USER_ID_RE = re.compile(r'^\d+$')
-INIT_CODE = """"""
+USER_ID_RE = re.compile(r"^\d+$")
+INIT_CODE = (
+ """"""
+)
SETUP_CODE = """
""" # noqa
-DOMAIN_CONTEXT_KEY = 'chartbeat_domain'
+DOMAIN_CONTEXT_KEY = "chartbeat_domain"
register = Library()
@@ -77,24 +78,25 @@ def chartbeat_bottom(parser, token):
class ChartbeatBottomNode(Node):
def __init__(self):
- self.user_id = get_required_setting('CHARTBEAT_USER_ID', USER_ID_RE,
- "must be (a string containing) a number")
+ self.user_id = get_required_setting(
+ "CHARTBEAT_USER_ID", USER_ID_RE, "must be (a string containing) a number"
+ )
def render(self, context):
- config = {'uid': self.user_id}
+ config = {"uid": self.user_id}
domain = _get_domain(context)
if domain is not None:
- config['domain'] = domain
- html = SETUP_CODE % {'config': json.dumps(config, sort_keys=True)}
- if is_internal_ip(context, 'CHARTBEAT'):
- html = disable_html(html, 'Chartbeat')
+ config["domain"] = domain
+ html = SETUP_CODE % {"config": json.dumps(config, sort_keys=True)}
+ if is_internal_ip(context, "CHARTBEAT"):
+ html = disable_html(html, "Chartbeat")
return html
def contribute_to_analytical(add_node):
ChartbeatBottomNode() # ensure properly configured
- add_node('head_top', ChartbeatTopNode, 'first')
- add_node('body_bottom', ChartbeatBottomNode, 'last')
+ add_node("head_top", ChartbeatTopNode, "first")
+ add_node("body_bottom", ChartbeatBottomNode, "last")
def _get_domain(context):
@@ -103,10 +105,11 @@ def _get_domain(context):
if domain is not None:
return domain
else:
- if 'django.contrib.sites' not in settings.INSTALLED_APPS:
+ if "django.contrib.sites" not in settings.INSTALLED_APPS:
return
- elif getattr(settings, 'CHARTBEAT_AUTO_DOMAIN', True):
+ elif getattr(settings, "CHARTBEAT_AUTO_DOMAIN", True):
from django.contrib.sites.models import Site
+
try:
return Site.objects.get_current().domain
except (ImproperlyConfigured, Site.DoesNotExist): # pylint: disable=E1101
diff --git a/analytical/templatetags/clickmap.py b/analytical/templatetags/clickmap.py
index 2cdaf80..3f939c1 100644
--- a/analytical/templatetags/clickmap.py
+++ b/analytical/templatetags/clickmap.py
@@ -6,10 +6,9 @@ import re
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import is_internal_ip, disable_html, get_required_setting
+from analytical.utils import disable_html, get_required_setting, is_internal_ip
-
-CLICKMAP_TRACKER_ID_RE = re.compile(r'^\w+$')
+CLICKMAP_TRACKER_ID_RE = re.compile(r"^\w+$")
TRACKING_CODE = """
'.\
- format(placeholder_url='//dnn506yrbagrg.cloudfront.net/pages/scripts/'
- '%(account_nr_1)s/%(account_nr_2)s.js')
+ACCOUNT_NUMBER_RE = re.compile(r"^\d+$")
+SETUP_CODE = (
+ '".format(
+ placeholder_url="//dnn506yrbagrg.cloudfront.net/pages/scripts/"
+ "%(account_nr_1)s/%(account_nr_2)s.js"
+ )
+)
USERVAR_CODE = "CE2.set(%(varnr)d, '%(value)s');"
@@ -38,29 +40,33 @@ def crazy_egg(parser, token):
class CrazyEggNode(Node):
def __init__(self):
self.account_nr = get_required_setting(
- 'CRAZY_EGG_ACCOUNT_NUMBER',
- ACCOUNT_NUMBER_RE, "must be (a string containing) a number"
+ "CRAZY_EGG_ACCOUNT_NUMBER",
+ ACCOUNT_NUMBER_RE,
+ "must be (a string containing) a number",
)
def render(self, context):
html = SETUP_CODE % {
- 'account_nr_1': self.account_nr[:4],
- 'account_nr_2': self.account_nr[4:],
+ "account_nr_1": self.account_nr[:4],
+ "account_nr_2": self.account_nr[4:],
}
- values = (context.get('crazy_egg_var%d' % i) for i in range(1, 6))
+ values = (context.get("crazy_egg_var%d" % i) for i in range(1, 6))
params = [(i, v) for i, v in enumerate(values, 1) if v is not None]
if params:
- js = " ".join(USERVAR_CODE % {
- 'varnr': varnr,
- 'value': value,
- } for (varnr, value) in params)
- html = '%s\n' \
- '' % (html, js)
- if is_internal_ip(context, 'CRAZY_EGG'):
- html = disable_html(html, 'Crazy Egg')
+ js = " ".join(
+ USERVAR_CODE
+ % {
+ "varnr": varnr,
+ "value": value,
+ }
+ for (varnr, value) in params
+ )
+ html = "%s\n" '' % (html, js)
+ if is_internal_ip(context, "CRAZY_EGG"):
+ html = disable_html(html, "Crazy Egg")
return html
def contribute_to_analytical(add_node):
CrazyEggNode() # ensure properly configured
- add_node('body_bottom', CrazyEggNode)
+ add_node("body_bottom", CrazyEggNode)
diff --git a/analytical/templatetags/facebook_pixel.py b/analytical/templatetags/facebook_pixel.py
index 9ccc9ad..6cf4781 100644
--- a/analytical/templatetags/facebook_pixel.py
+++ b/analytical/templatetags/facebook_pixel.py
@@ -6,8 +6,7 @@ import re
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import get_required_setting, is_internal_ip, disable_html
-
+from analytical.utils import disable_html, get_required_setting, is_internal_ip
FACEBOOK_PIXEL_HEAD_CODE = """\
""" # noqa
IDENTIFY_CODE = "_kiq.push(['identify', '%s']);"
SHOW_SURVEY_CODE = "_kiq.push(['showSurvey', %s]);"
-SHOW_SURVEY_CONTEXT_KEY = 'kiss_insights_show_survey'
+SHOW_SURVEY_CONTEXT_KEY = "kiss_insights_show_survey"
register = Library()
@@ -42,15 +41,19 @@ def kiss_insights(parser, token):
class KissInsightsNode(Node):
def __init__(self):
self.account_number = get_required_setting(
- 'KISS_INSIGHTS_ACCOUNT_NUMBER', ACCOUNT_NUMBER_RE,
- "must be (a string containing) a number")
+ "KISS_INSIGHTS_ACCOUNT_NUMBER",
+ ACCOUNT_NUMBER_RE,
+ "must be (a string containing) a number",
+ )
self.site_code = get_required_setting(
- 'KISS_INSIGHTS_SITE_CODE', SITE_CODE_RE,
- "must be a string containing three characters")
+ "KISS_INSIGHTS_SITE_CODE",
+ SITE_CODE_RE,
+ "must be a string containing three characters",
+ )
def render(self, context):
commands = []
- identity = get_identity(context, 'kiss_insights')
+ identity = get_identity(context, "kiss_insights")
if identity is not None:
commands.append(IDENTIFY_CODE % identity)
try:
@@ -58,13 +61,13 @@ class KissInsightsNode(Node):
except KeyError:
pass
html = SETUP_CODE % {
- 'account_number': self.account_number,
- 'site_code': self.site_code,
- 'commands': " ".join(commands),
+ "account_number": self.account_number,
+ "site_code": self.site_code,
+ "commands": " ".join(commands),
}
return html
def contribute_to_analytical(add_node):
KissInsightsNode() # ensure properly configured
- add_node('body_top', KissInsightsNode)
+ add_node("body_top", KissInsightsNode)
diff --git a/analytical/templatetags/kiss_metrics.py b/analytical/templatetags/kiss_metrics.py
index bf2b4f8..615f779 100644
--- a/analytical/templatetags/kiss_metrics.py
+++ b/analytical/templatetags/kiss_metrics.py
@@ -7,11 +7,14 @@ import re
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import is_internal_ip, disable_html, get_identity, \
- get_required_setting
+from analytical.utils import (
+ disable_html,
+ get_identity,
+ get_required_setting,
+ is_internal_ip,
+)
-
-API_KEY_RE = re.compile(r'^[0-9a-f]{40}$')
+API_KEY_RE = re.compile(r"^[0-9a-f]{40}$")
TRACKING_CODE = """
""" # noqa
NICKNAME_CODE = "olark('api.chat.updateVisitorNickname', {snippet: '%s'});"
-NICKNAME_CONTEXT_KEY = 'olark_nickname'
+NICKNAME_CONTEXT_KEY = "olark_nickname"
FULLNAME_CODE = "olark('api.visitor.updateFullName', {{fullName: '{0}'}});"
-FULLNAME_CONTEXT_KEY = 'olark_fullname'
+FULLNAME_CONTEXT_KEY = "olark_fullname"
EMAIL_CODE = "olark('api.visitor.updateEmailAddress', {{emailAddress: '{0}'}});"
-EMAIL_CONTEXT_KEY = 'olark_email'
+EMAIL_CONTEXT_KEY = "olark_email"
STATUS_CODE = "olark('api.chat.updateVisitorStatus', {snippet: %s});"
-STATUS_CONTEXT_KEY = 'olark_status'
+STATUS_CONTEXT_KEY = "olark_status"
MESSAGE_CODE = "olark.configure('locale.%(key)s', \"%(msg)s\");"
MESSAGE_KEYS = {
- "welcome_title", "chatting_title", "unavailable_title",
- "busy_title", "away_message", "loading_title", "welcome_message",
- "busy_message", "chat_input_text", "name_input_text",
- "email_input_text", "offline_note_message", "send_button_text",
- "offline_note_thankyou_text", "offline_note_error_text",
- "offline_note_sending_text", "operator_is_typing_text",
- "operator_has_stopped_typing_text", "introduction_error_text",
- "introduction_messages", "introduction_submit_button_text",
+ "welcome_title",
+ "chatting_title",
+ "unavailable_title",
+ "busy_title",
+ "away_message",
+ "loading_title",
+ "welcome_message",
+ "busy_message",
+ "chat_input_text",
+ "name_input_text",
+ "email_input_text",
+ "offline_note_message",
+ "send_button_text",
+ "offline_note_thankyou_text",
+ "offline_note_error_text",
+ "offline_note_sending_text",
+ "operator_is_typing_text",
+ "operator_has_stopped_typing_text",
+ "introduction_error_text",
+ "introduction_messages",
+ "introduction_submit_button_text",
}
register = Library()
@@ -57,15 +69,17 @@ def olark(parser, token):
class OlarkNode(Node):
def __init__(self):
self.site_id = get_required_setting(
- 'OLARK_SITE_ID', SITE_ID_RE,
- "must be a string looking like 'XXXX-XXX-XX-XXXX'")
+ "OLARK_SITE_ID",
+ SITE_ID_RE,
+ "must be a string looking like 'XXXX-XXX-XX-XXXX'",
+ )
def render(self, context):
extra_code = []
try:
extra_code.append(NICKNAME_CODE % context[NICKNAME_CONTEXT_KEY])
except KeyError:
- identity = get_identity(context, 'olark', self._get_nickname)
+ identity = get_identity(context, "olark", self._get_nickname)
if identity is not None:
extra_code.append(NICKNAME_CODE % identity)
try:
@@ -77,14 +91,15 @@ class OlarkNode(Node):
except KeyError:
pass
try:
- extra_code.append(STATUS_CODE % json.dumps(context[STATUS_CONTEXT_KEY],
- sort_keys=True))
+ extra_code.append(
+ STATUS_CODE % json.dumps(context[STATUS_CONTEXT_KEY], sort_keys=True)
+ )
except KeyError:
pass
extra_code.extend(self._get_configuration(context))
html = SETUP_CODE % {
- 'site_id': self.site_id,
- 'extra_code': " ".join(extra_code),
+ "site_id": self.site_id,
+ "extra_code": " ".join(extra_code),
}
return html
@@ -99,13 +114,13 @@ class OlarkNode(Node):
code = []
for dict_ in context:
for var, val in dict_.items():
- if var.startswith('olark_'):
+ if var.startswith("olark_"):
key = var[6:]
if key in MESSAGE_KEYS:
- code.append(MESSAGE_CODE % {'key': key, 'msg': val})
+ code.append(MESSAGE_CODE % {"key": key, "msg": val})
return code
def contribute_to_analytical(add_node):
OlarkNode() # ensure properly configured
- add_node('body_bottom', OlarkNode)
+ add_node("body_bottom", OlarkNode)
diff --git a/analytical/templatetags/optimizely.py b/analytical/templatetags/optimizely.py
index d99ca07..d4a8d1b 100644
--- a/analytical/templatetags/optimizely.py
+++ b/analytical/templatetags/optimizely.py
@@ -6,10 +6,9 @@ import re
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import is_internal_ip, disable_html, get_required_setting
+from analytical.utils import disable_html, get_required_setting, is_internal_ip
-
-ACCOUNT_NUMBER_RE = re.compile(r'^\d+$')
+ACCOUNT_NUMBER_RE = re.compile(r"^\d+$")
SETUP_CODE = """"""
@@ -34,16 +33,18 @@ def optimizely(parser, token):
class OptimizelyNode(Node):
def __init__(self):
self.account_number = get_required_setting(
- 'OPTIMIZELY_ACCOUNT_NUMBER', ACCOUNT_NUMBER_RE,
- "must be a string looking like 'XXXXXXX'")
+ "OPTIMIZELY_ACCOUNT_NUMBER",
+ ACCOUNT_NUMBER_RE,
+ "must be a string looking like 'XXXXXXX'",
+ )
def render(self, context):
- html = SETUP_CODE % {'account_number': self.account_number}
- if is_internal_ip(context, 'OPTIMIZELY'):
- html = disable_html(html, 'Optimizely')
+ html = SETUP_CODE % {"account_number": self.account_number}
+ if is_internal_ip(context, "OPTIMIZELY"):
+ html = disable_html(html, "Optimizely")
return html
def contribute_to_analytical(add_node):
OptimizelyNode() # ensure properly configured
- add_node('head_top', OptimizelyNode)
+ add_node("head_top", OptimizelyNode)
diff --git a/analytical/templatetags/performable.py b/analytical/templatetags/performable.py
index 39e6c16..bcf2487 100644
--- a/analytical/templatetags/performable.py
+++ b/analytical/templatetags/performable.py
@@ -7,11 +7,14 @@ import re
from django.template import Library, Node, TemplateSyntaxError
from django.utils.safestring import mark_safe
-from analytical.utils import is_internal_ip, disable_html, get_identity, \
- get_required_setting
+from analytical.utils import (
+ disable_html,
+ get_identity,
+ get_required_setting,
+ is_internal_ip,
+)
-
-API_KEY_RE = re.compile(r'^\w+$')
+API_KEY_RE = re.compile(r"^\w+$")
SETUP_CODE = """
""" # noqa
@@ -53,16 +56,16 @@ def performable(parser, token):
class PerformableNode(Node):
def __init__(self):
self.api_key = get_required_setting(
- 'PERFORMABLE_API_KEY', API_KEY_RE,
- "must be a string looking like 'XXXXX'")
+ "PERFORMABLE_API_KEY", API_KEY_RE, "must be a string looking like 'XXXXX'"
+ )
def render(self, context):
- html = SETUP_CODE % {'api_key': self.api_key}
- identity = get_identity(context, 'performable')
+ html = SETUP_CODE % {"api_key": self.api_key}
+ identity = get_identity(context, "performable")
if identity is not None:
html = "%s%s" % (IDENTIFY_CODE % identity, html)
- if is_internal_ip(context, 'PERFORMABLE'):
- html = disable_html(html, 'Performable')
+ if is_internal_ip(context, "PERFORMABLE"):
+ html = disable_html(html, "Performable")
return html
@@ -71,12 +74,15 @@ def performable_embed(hostname, page_id):
"""
Include a Performable landing page.
"""
- return mark_safe(EMBED_CODE % {
- 'hostname': hostname,
- 'page_id': page_id,
- })
+ return mark_safe(
+ EMBED_CODE
+ % {
+ "hostname": hostname,
+ "page_id": page_id,
+ }
+ )
def contribute_to_analytical(add_node):
PerformableNode() # ensure properly configured
- add_node('body_bottom', PerformableNode)
+ add_node("body_bottom", PerformableNode)
diff --git a/analytical/templatetags/piwik.py b/analytical/templatetags/piwik.py
index 8855a61..38522b7 100644
--- a/analytical/templatetags/piwik.py
+++ b/analytical/templatetags/piwik.py
@@ -2,23 +2,26 @@
Piwik template tags and filters.
"""
+import re
+import warnings
from collections import namedtuple
from itertools import chain
-import re
from django.conf import settings
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import (is_internal_ip, disable_html,
- get_required_setting, get_identity)
-
-import warnings
+from analytical.utils import (
+ disable_html,
+ get_identity,
+ get_required_setting,
+ is_internal_ip,
+)
# domain name (characters separated by a dot), optional port, optional URI path, no slash
-DOMAINPATH_RE = re.compile(r'^(([^./?#@:]+\.)*[^./?#@:]+)+(:[0-9]+)?(/[^/?#@:]+)*$')
+DOMAINPATH_RE = re.compile(r"^(([^./?#@:]+\.)*[^./?#@:]+)+(:[0-9]+)?(/[^/?#@:]+)*$")
# numeric ID
-SITEID_RE = re.compile(r'^\d+$')
+SITEID_RE = re.compile(r"^\d+$")
TRACKING_CODE = """
""" # noqa
DOMAIN_CODE = 'SnapABug.setDomain("%s");'
-SECURE_CONNECTION_CODE = 'SnapABug.setSecureConnexion();'
+SECURE_CONNECTION_CODE = "SnapABug.setSecureConnexion();"
INIT_CODE = 'SnapABug.init("%s");'
-ADDBUTTON_CODE = 'SnapABug.addButton("%(id)s","%(location)s","%(offset)s"%(dynamic_tail)s);'
+ADDBUTTON_CODE = (
+ 'SnapABug.addButton("%(id)s","%(location)s","%(offset)s"%(dynamic_tail)s);'
+)
SETBUTTON_CODE = 'SnapABug.setButton("%s");'
SETEMAIL_CODE = 'SnapABug.setUserEmail("%s"%s);'
SETLOCALE_CODE = 'SnapABug.setLocale("%s");'
FORM_POSITION_CODE = 'SnapABug.setChatFormPosition("%s");'
-FORM_TOP_POSITION_CODE = 'SnapABug.setFormTopPosition(%d);'
+FORM_TOP_POSITION_CODE = "SnapABug.setFormTopPosition(%d);"
BUTTONEFFECT_CODE = 'SnapABug.setButtonEffect("%s");'
-DISABLE_OFFLINE_CODE = 'SnapABug.allowOffline(false);'
-DISABLE_SCREENSHOT_CODE = 'SnapABug.allowScreenshot(false);'
-DISABLE_OFFLINE_SCREENSHOT_CODE = 'SnapABug.showScreenshotOption(false);'
-DISABLE_PROACTIVE_CHAT_CODE = 'SnapABug.allowProactiveChat(false);'
-DISABLE_SOUNDS_CODE = 'SnapABug.allowChatSound(false);'
+DISABLE_OFFLINE_CODE = "SnapABug.allowOffline(false);"
+DISABLE_SCREENSHOT_CODE = "SnapABug.allowScreenshot(false);"
+DISABLE_OFFLINE_SCREENSHOT_CODE = "SnapABug.showScreenshotOption(false);"
+DISABLE_PROACTIVE_CHAT_CODE = "SnapABug.allowProactiveChat(false);"
+DISABLE_SOUNDS_CODE = "SnapABug.allowChatSound(false);"
register = Library()
@@ -67,83 +71,95 @@ def snapengage(parser, token):
class SnapEngageNode(Node):
def __init__(self):
self.widget_id = get_required_setting(
- 'SNAPENGAGE_WIDGET_ID', WIDGET_ID_RE,
- "must be a string looking like this: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'")
+ "SNAPENGAGE_WIDGET_ID",
+ WIDGET_ID_RE,
+ "must be a string looking like this: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'",
+ )
def render(self, context):
settings_code = []
- domain = self._get_setting(context, 'snapengage_domain',
- 'SNAPENGAGE_DOMAIN')
+ domain = self._get_setting(context, "snapengage_domain", "SNAPENGAGE_DOMAIN")
if domain is not None:
settings_code.append(DOMAIN_CODE % domain)
- secure_connection = self._get_setting(context,
- 'snapengage_secure_connection',
- 'SNAPENGAGE_SECURE_CONNECTION',
- False)
+ secure_connection = self._get_setting(
+ context,
+ "snapengage_secure_connection",
+ "SNAPENGAGE_SECURE_CONNECTION",
+ False,
+ )
if secure_connection:
settings_code.append(SECURE_CONNECTION_CODE)
- email = context.get('snapengage_email')
+ email = context.get("snapengage_email")
if email is None:
- email = get_identity(context, 'snapengage', lambda u: u.email)
+ email = get_identity(context, "snapengage", lambda u: u.email)
if email is not None:
- if self._get_setting(context, 'snapengage_readonly_email',
- 'SNAPENGAGE_READONLY_EMAIL', False):
- readonly_tail = ',true'
+ if self._get_setting(
+ context, "snapengage_readonly_email", "SNAPENGAGE_READONLY_EMAIL", False
+ ):
+ readonly_tail = ",true"
else:
- readonly_tail = ''
+ readonly_tail = ""
settings_code.append(SETEMAIL_CODE % (email, readonly_tail))
- locale = self._get_setting(context, 'snapengage_locale',
- 'SNAPENGAGE_LOCALE')
+ locale = self._get_setting(context, "snapengage_locale", "SNAPENGAGE_LOCALE")
if locale is None:
locale = translation.to_locale(translation.get_language())
settings_code.append(SETLOCALE_CODE % locale)
- form_position = self._get_setting(context,
- 'snapengage_form_position', 'SNAPENGAGE_FORM_POSITION')
+ form_position = self._get_setting(
+ context, "snapengage_form_position", "SNAPENGAGE_FORM_POSITION"
+ )
if form_position is not None:
settings_code.append(FORM_POSITION_CODE % form_position)
- form_top_position = self._get_setting(context,
- 'snapengage_form_top_position',
- 'SNAPENGAGE_FORM_TOP_POSITION')
+ form_top_position = self._get_setting(
+ context, "snapengage_form_top_position", "SNAPENGAGE_FORM_TOP_POSITION"
+ )
if form_top_position is not None:
settings_code.append(FORM_TOP_POSITION_CODE % form_top_position)
- show_offline = self._get_setting(context, 'snapengage_show_offline',
- 'SNAPENGAGE_SHOW_OFFLINE', True)
+ show_offline = self._get_setting(
+ context, "snapengage_show_offline", "SNAPENGAGE_SHOW_OFFLINE", True
+ )
if not show_offline:
settings_code.append(DISABLE_OFFLINE_CODE)
- screenshots = self._get_setting(context, 'snapengage_screenshots',
- 'SNAPENGAGE_SCREENSHOTS', True)
+ screenshots = self._get_setting(
+ context, "snapengage_screenshots", "SNAPENGAGE_SCREENSHOTS", True
+ )
if not screenshots:
settings_code.append(DISABLE_SCREENSHOT_CODE)
- offline_screenshots = self._get_setting(context,
- 'snapengage_offline_screenshots',
- 'SNAPENGAGE_OFFLINE_SCREENSHOTS', True)
+ offline_screenshots = self._get_setting(
+ context,
+ "snapengage_offline_screenshots",
+ "SNAPENGAGE_OFFLINE_SCREENSHOTS",
+ True,
+ )
if not offline_screenshots:
settings_code.append(DISABLE_OFFLINE_SCREENSHOT_CODE)
- if not context.get('snapengage_proactive_chat', True):
+ if not context.get("snapengage_proactive_chat", True):
settings_code.append(DISABLE_PROACTIVE_CHAT_CODE)
- sounds = self._get_setting(context, 'snapengage_sounds',
- 'SNAPENGAGE_SOUNDS', True)
+ sounds = self._get_setting(
+ context, "snapengage_sounds", "SNAPENGAGE_SOUNDS", True
+ )
if not sounds:
settings_code.append(DISABLE_SOUNDS_CODE)
- button_effect = self._get_setting(context, 'snapengage_button_effect',
- 'SNAPENGAGE_BUTTON_EFFECT')
+ button_effect = self._get_setting(
+ context, "snapengage_button_effect", "SNAPENGAGE_BUTTON_EFFECT"
+ )
if button_effect is not None:
settings_code.append(BUTTONEFFECT_CODE % button_effect)
- button = self._get_setting(context, 'snapengage_button',
- 'SNAPENGAGE_BUTTON', BUTTON_STYLE_DEFAULT)
+ button = self._get_setting(
+ context, "snapengage_button", "SNAPENGAGE_BUTTON", BUTTON_STYLE_DEFAULT
+ )
if button == BUTTON_STYLE_NONE:
settings_code.append(INIT_CODE % self.widget_id)
else:
@@ -152,21 +168,28 @@ class SnapEngageNode(Node):
settings_code.append(SETBUTTON_CODE % button)
button_location = self._get_setting(
context,
- 'snapengage_button_location', 'SNAPENGAGE_BUTTON_LOCATION',
- BUTTON_LOCATION_LEFT)
+ "snapengage_button_location",
+ "SNAPENGAGE_BUTTON_LOCATION",
+ BUTTON_LOCATION_LEFT,
+ )
button_offset = self._get_setting(
context,
- 'snapengage_button_location_offset',
- 'SNAPENGAGE_BUTTON_LOCATION_OFFSET', '55%')
- settings_code.append(ADDBUTTON_CODE % {
- 'id': self.widget_id,
- 'location': button_location,
- 'offset': button_offset,
- 'dynamic_tail': ',true' if (button == BUTTON_STYLE_LIVE) else '',
- })
+ "snapengage_button_location_offset",
+ "SNAPENGAGE_BUTTON_LOCATION_OFFSET",
+ "55%",
+ )
+ settings_code.append(
+ ADDBUTTON_CODE
+ % {
+ "id": self.widget_id,
+ "location": button_location,
+ "offset": button_offset,
+ "dynamic_tail": ",true" if (button == BUTTON_STYLE_LIVE) else "",
+ }
+ )
html = SETUP_CODE % {
- 'widget_id': self.widget_id,
- 'settings_code': " ".join(settings_code),
+ "widget_id": self.widget_id,
+ "settings_code": " ".join(settings_code),
}
return html
@@ -182,4 +205,4 @@ class SnapEngageNode(Node):
def contribute_to_analytical(add_node):
SnapEngageNode() # ensure properly configured
- add_node('body_bottom', SnapEngageNode)
+ add_node("body_bottom", SnapEngageNode)
diff --git a/analytical/templatetags/spring_metrics.py b/analytical/templatetags/spring_metrics.py
index d402846..a50e58f 100644
--- a/analytical/templatetags/spring_metrics.py
+++ b/analytical/templatetags/spring_metrics.py
@@ -6,11 +6,14 @@ import re
from django.template import Library, Node, TemplateSyntaxError
-from analytical.utils import get_identity, is_internal_ip, disable_html, \
- get_required_setting
+from analytical.utils import (
+ disable_html,
+ get_identity,
+ get_required_setting,
+ is_internal_ip,
+)
-
-TRACKING_ID_RE = re.compile(r'^[0-9a-f]+$')
+TRACKING_ID_RE = re.compile(r"^[0-9a-f]+$")
TRACKING_CODE = """
-""", self.render_tag('gauges', 'gauges'))
+""",
+ self.render_tag("gauges", "gauges"),
+ )
def test_node(self):
self.assertEqual(
- """
+ """
-""", GaugesNode().render(Context()))
+""",
+ GaugesNode().render(Context()),
+ )
@override_settings(GAUGES_SITE_ID=None)
def test_no_account_number(self):
self.assertRaises(AnalyticalException, GaugesNode)
- @override_settings(GAUGES_SITE_ID='123abQ')
+ @override_settings(GAUGES_SITE_ID="123abQ")
def test_wrong_account_number(self):
self.assertRaises(AnalyticalException, GaugesNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = GaugesNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(r.startswith(""), r)
diff --git a/tests/unit/test_tag_google_analytics.py b/tests/unit/test_tag_google_analytics.py
index da73996..bba8de4 100644
--- a/tests/unit/test_tag_google_analytics.py
+++ b/tests/unit/test_tag_google_analytics.py
@@ -5,23 +5,31 @@ Tests for the Google Analytics template tags and filters.
from django.http import HttpRequest
from django.template import Context
from django.test.utils import override_settings
+from utils import TagTestCase, TestCase
-from analytical.templatetags.google_analytics import GoogleAnalyticsNode, \
- TRACK_SINGLE_DOMAIN, TRACK_MULTIPLE_DOMAINS, TRACK_MULTIPLE_SUBDOMAINS,\
- SCOPE_VISITOR, SCOPE_SESSION, SCOPE_PAGE
-from utils import TestCase, TagTestCase
+from analytical.templatetags.google_analytics import (
+ SCOPE_PAGE,
+ SCOPE_SESSION,
+ SCOPE_VISITOR,
+ TRACK_MULTIPLE_DOMAINS,
+ TRACK_MULTIPLE_SUBDOMAINS,
+ TRACK_SINGLE_DOMAIN,
+ GoogleAnalyticsNode,
+)
from analytical.utils import AnalyticalException
-@override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7',
- GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN)
+@override_settings(
+ GOOGLE_ANALYTICS_PROPERTY_ID="UA-123456-7",
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN,
+)
class GoogleAnalyticsTagTestCase(TagTestCase):
"""
Tests for the ``google_analytics`` template tag.
"""
def test_tag(self):
- r = self.render_tag('google_analytics', 'google_analytics')
+ r = self.render_tag("google_analytics", "google_analytics")
self.assertTrue("_gaq.push(['_setAccount', 'UA-123456-7']);" in r, r)
self.assertTrue("_gaq.push(['_trackPageview']);" in r, r)
@@ -34,19 +42,23 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
def test_no_property_id(self):
self.assertRaises(AnalyticalException, GoogleAnalyticsNode)
- @override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='wrong')
+ @override_settings(GOOGLE_ANALYTICS_PROPERTY_ID="wrong")
def test_wrong_property_id(self):
self.assertRaises(AnalyticalException, GoogleAnalyticsNode)
- @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS,
- GOOGLE_ANALYTICS_DOMAIN='example.com')
+ @override_settings(
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS,
+ GOOGLE_ANALYTICS_DOMAIN="example.com",
+ )
def test_track_multiple_subdomains(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setDomainName', 'example.com']);" in r, r)
self.assertTrue("_gaq.push(['_setAllowHash', false]);" in r, r)
- @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
- GOOGLE_ANALYTICS_DOMAIN='example.com')
+ @override_settings(
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
+ GOOGLE_ANALYTICS_DOMAIN="example.com",
+ )
def test_track_multiple_domains(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setDomainName', 'example.com']);" in r, r)
@@ -54,12 +66,14 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
self.assertTrue("_gaq.push(['_setAllowLinker', true]);" in r, r)
def test_custom_vars(self):
- context = Context({
- 'google_analytics_var1': ('test1', 'foo'),
- 'google_analytics_var2': ('test2', 'bar', SCOPE_VISITOR),
- 'google_analytics_var4': ('test4', 'baz', SCOPE_SESSION),
- 'google_analytics_var5': ('test5', 'qux', SCOPE_PAGE),
- })
+ context = Context(
+ {
+ "google_analytics_var1": ("test1", "foo"),
+ "google_analytics_var2": ("test2", "bar", SCOPE_VISITOR),
+ "google_analytics_var4": ("test4", "baz", SCOPE_SESSION),
+ "google_analytics_var5": ("test5", "qux", SCOPE_PAGE),
+ }
+ )
r = GoogleAnalyticsNode().render(context)
self.assertTrue("_gaq.push(['_setCustomVar', 1, 'test1', 'foo', 3]);" in r, r)
self.assertTrue("_gaq.push(['_setCustomVar', 2, 'test2', 'bar', 1]);" in r, r)
@@ -79,21 +93,22 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("stats.g.doubleclick.net/dc.js" in r, r)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = GoogleAnalyticsNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
@override_settings(GOOGLE_ANALYTICS_ANONYMIZE_IP=True)
def test_anonymize_ip(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_gat._anonymizeIp']);" in r, r)
- self.assertTrue(r.index('_gat._anonymizeIp') < r.index('_trackPageview'), r)
+ self.assertTrue(r.index("_gat._anonymizeIp") < r.index("_trackPageview"), r)
@override_settings(GOOGLE_ANALYTICS_ANONYMIZE_IP=False)
def test_anonymize_ip_not_present(self):
@@ -105,7 +120,7 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setSampleRate', '0.00']);" in r, r)
- @override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE='100.00')
+ @override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE="100.00")
def test_set_sample_rate_max(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setSampleRate', '100.00']);" in r, r)
@@ -125,7 +140,7 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setSiteSpeedSampleRate', '0.00']);" in r, r)
- @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE='100.00')
+ @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE="100.00")
def test_set_site_speed_sample_rate_max(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setSiteSpeedSampleRate', '100.00']);" in r, r)
@@ -145,7 +160,7 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setSessionCookieTimeout', '0']);" in r, r)
- @override_settings(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT='10000')
+ @override_settings(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT="10000")
def test_set_session_cookie_timeout_as_string(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setSessionCookieTimeout', '10000']);" in r, r)
@@ -160,7 +175,7 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setVisitorCookieTimeout', '0']);" in r, r)
- @override_settings(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT='10000')
+ @override_settings(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT="10000")
def test_set_visitor_cookie_timeout_as_string(self):
r = GoogleAnalyticsNode().render(Context())
self.assertTrue("_gaq.push(['_setVisitorCookieTimeout', '10000']);" in r, r)
@@ -171,10 +186,12 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context)
-@override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7',
- GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
- GOOGLE_ANALYTICS_DOMAIN=None,
- ANALYTICAL_DOMAIN=None)
+@override_settings(
+ GOOGLE_ANALYTICS_PROPERTY_ID="UA-123456-7",
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
+ GOOGLE_ANALYTICS_DOMAIN=None,
+ ANALYTICAL_DOMAIN=None,
+)
class NoDomainTestCase(TestCase):
def test_exception_without_domain(self):
context = Context()
diff --git a/tests/unit/test_tag_google_analytics_gtag.py b/tests/unit/test_tag_google_analytics_gtag.py
index c81368f..157f926 100644
--- a/tests/unit/test_tag_google_analytics_gtag.py
+++ b/tests/unit/test_tag_google_analytics_gtag.py
@@ -6,23 +6,25 @@ 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.google_analytics_gtag import GoogleAnalyticsGTagNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID='UA-123456-7')
+@override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID="UA-123456-7")
class GoogleAnalyticsTagTestCase(TagTestCase):
"""
Tests for the ``google_analytics_js`` template tag.
"""
def test_tag(self):
- r = self.render_tag('google_analytics_gtag', 'google_analytics_gtag')
+ r = self.render_tag("google_analytics_gtag", "google_analytics_gtag")
self.assertTrue(
''
- in r, r)
+ in r,
+ r,
+ )
self.assertTrue("gtag('js', new Date());" in r, r)
self.assertTrue("gtag('config', 'UA-123456-7');" in r, r)
@@ -30,7 +32,9 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
r = GoogleAnalyticsGTagNode().render(Context())
self.assertTrue(
''
- in r, r)
+ in r,
+ r,
+ )
self.assertTrue("gtag('js', new Date());" in r, r)
self.assertTrue("gtag('config', 'UA-123456-7');" in r, r)
@@ -38,51 +42,64 @@ class GoogleAnalyticsTagTestCase(TagTestCase):
def test_no_property_id(self):
self.assertRaises(AnalyticalException, GoogleAnalyticsGTagNode)
- @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID='wrong')
+ @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID="wrong")
def test_wrong_property_id(self):
self.assertRaises(AnalyticalException, GoogleAnalyticsGTagNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = GoogleAnalyticsGTagNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify(self):
- r = GoogleAnalyticsGTagNode().render(Context({'user': User(username='test')}))
+ r = GoogleAnalyticsGTagNode().render(Context({"user": User(username="test")}))
self.assertTrue("gtag('set', {'user_id': 'test'});" in r, r)
- @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID='G-12345678')
+ @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID="G-12345678")
def test_tag_with_measurement_id(self):
- r = self.render_tag('google_analytics_gtag', 'google_analytics_gtag')
+ r = self.render_tag("google_analytics_gtag", "google_analytics_gtag")
self.assertTrue(
- ('')
- in r, r)
+ (
+ ''
+ )
+ in r,
+ r,
+ )
self.assertTrue("gtag('js', new Date());" in r, r)
self.assertTrue("gtag('config', 'G-12345678');" in r, r)
- @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID='AW-1234567890')
+ @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID="AW-1234567890")
def test_tag_with_conversion_id(self):
- r = self.render_tag('google_analytics_gtag', 'google_analytics_gtag')
+ r = self.render_tag("google_analytics_gtag", "google_analytics_gtag")
self.assertTrue(
- ('')
- in r, r)
+ (
+ ''
+ )
+ in r,
+ r,
+ )
self.assertTrue("gtag('js', new Date());" in r, r)
self.assertTrue("gtag('config', 'AW-1234567890');" in r, r)
- @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID='DC-12345678')
+ @override_settings(GOOGLE_ANALYTICS_GTAG_PROPERTY_ID="DC-12345678")
def test_tag_with_advertiser_id(self):
- r = self.render_tag('google_analytics_gtag', 'google_analytics_gtag')
+ r = self.render_tag("google_analytics_gtag", "google_analytics_gtag")
self.assertTrue(
- ('')
- in r, r)
+ (
+ ''
+ )
+ in r,
+ r,
+ )
self.assertTrue("gtag('js', new Date());" in r, r)
self.assertTrue("gtag('config', 'DC-12345678');" in r, r)
diff --git a/tests/unit/test_tag_google_analytics_js.py b/tests/unit/test_tag_google_analytics_js.py
index 1009fbb..c95325f 100644
--- a/tests/unit/test_tag_google_analytics_js.py
+++ b/tests/unit/test_tag_google_analytics_js.py
@@ -5,35 +5,49 @@ Tests for the Google Analytics template tags and filters, using the new analytic
from django.http import HttpRequest
from django.template import Context
from django.test.utils import override_settings
+from utils import TagTestCase, TestCase
-from analytical.templatetags.google_analytics_js import GoogleAnalyticsJsNode, \
- TRACK_SINGLE_DOMAIN, TRACK_MULTIPLE_DOMAINS, TRACK_MULTIPLE_SUBDOMAINS
-from utils import TestCase, TagTestCase
+from analytical.templatetags.google_analytics_js import (
+ TRACK_MULTIPLE_DOMAINS,
+ TRACK_MULTIPLE_SUBDOMAINS,
+ TRACK_SINGLE_DOMAIN,
+ GoogleAnalyticsJsNode,
+)
from analytical.utils import AnalyticalException
-@override_settings(GOOGLE_ANALYTICS_JS_PROPERTY_ID='UA-123456-7',
- GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN)
+@override_settings(
+ GOOGLE_ANALYTICS_JS_PROPERTY_ID="UA-123456-7",
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN,
+)
class GoogleAnalyticsTagTestCase(TagTestCase):
"""
Tests for the ``google_analytics_js`` template tag.
"""
def test_tag(self):
- r = self.render_tag('google_analytics_js', 'google_analytics_js')
- self.assertTrue("""(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ r = self.render_tag("google_analytics_js", "google_analytics_js")
+ self.assertTrue(
+ """(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');""" in r, r)
+})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');"""
+ in r,
+ r,
+ )
self.assertTrue("ga('create', 'UA-123456-7', 'auto', {});" in r, r)
self.assertTrue("ga('send', 'pageview');" in r, r)
def test_node(self):
r = GoogleAnalyticsJsNode().render(Context())
- self.assertTrue("""(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ self.assertTrue(
+ """(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');""" in r, r)
+})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');"""
+ in r,
+ r,
+ )
self.assertTrue("ga('create', 'UA-123456-7', 'auto', {});" in r, r)
self.assertTrue("ga('send', 'pageview');" in r, r)
@@ -41,32 +55,41 @@ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
def test_no_property_id(self):
self.assertRaises(AnalyticalException, GoogleAnalyticsJsNode)
- @override_settings(GOOGLE_ANALYTICS_JS_PROPERTY_ID='wrong')
+ @override_settings(GOOGLE_ANALYTICS_JS_PROPERTY_ID="wrong")
def test_wrong_property_id(self):
self.assertRaises(AnalyticalException, GoogleAnalyticsJsNode)
- @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS,
- GOOGLE_ANALYTICS_DOMAIN='example.com')
+ @override_settings(
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS,
+ GOOGLE_ANALYTICS_DOMAIN="example.com",
+ )
def test_track_multiple_subdomains(self):
r = GoogleAnalyticsJsNode().render(Context())
self.assertTrue(
- """ga('create', 'UA-123456-7', 'auto', {"legacyCookieDomain": "example.com"}""" in r, r)
+ """ga('create', 'UA-123456-7', 'auto', {"legacyCookieDomain": "example.com"}"""
+ in r,
+ r,
+ )
- @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
- GOOGLE_ANALYTICS_DOMAIN='example.com')
+ @override_settings(
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
+ GOOGLE_ANALYTICS_DOMAIN="example.com",
+ )
def test_track_multiple_domains(self):
r = GoogleAnalyticsJsNode().render(Context())
self.assertTrue("ga('create', 'UA-123456-7', 'auto', {" in r, r)
self.assertTrue('"legacyCookieDomain": "example.com"' in r, r)
- self.assertTrue('"allowLinker\": true' in r, r)
+ self.assertTrue('"allowLinker": true' in r, r)
def test_custom_vars(self):
- context = Context({
- 'google_analytics_var1': ('test1', 'foo'),
- 'google_analytics_var2': ('test2', 'bar'),
- 'google_analytics_var4': ('test4', 1),
- 'google_analytics_var5': ('test5', 2.2),
- })
+ context = Context(
+ {
+ "google_analytics_var1": ("test1", "foo"),
+ "google_analytics_var2": ("test2", "bar"),
+ "google_analytics_var4": ("test4", 1),
+ "google_analytics_var5": ("test5", 2.2),
+ }
+ )
r = GoogleAnalyticsJsNode().render(context)
self.assertTrue("ga('set', 'test1', 'foo');" in r, r)
self.assertTrue("ga('set', 'test2', 'bar');" in r, r)
@@ -76,19 +99,24 @@ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
def test_display_advertising(self):
with override_settings(GOOGLE_ANALYTICS_DISPLAY_ADVERTISING=True):
r = GoogleAnalyticsJsNode().render(Context())
- self.assertTrue("""ga('create', 'UA-123456-7', 'auto', {});
+ self.assertTrue(
+ """ga('create', 'UA-123456-7', 'auto', {});
ga('require', 'displayfeatures');
-ga('send', 'pageview');""" in r, r)
+ga('send', 'pageview');"""
+ in r,
+ r,
+ )
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = GoogleAnalyticsJsNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
@override_settings(GOOGLE_ANALYTICS_ANONYMIZE_IP=True)
def test_anonymize_ip(self):
@@ -103,12 +131,16 @@ ga('send', 'pageview');""" in r, r)
@override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE=0.0)
def test_set_sample_rate_min(self):
r = GoogleAnalyticsJsNode().render(Context())
- self.assertTrue("""ga('create', 'UA-123456-7', 'auto', {"sampleRate": 0});""" in r, r)
+ self.assertTrue(
+ """ga('create', 'UA-123456-7', 'auto', {"sampleRate": 0});""" in r, r
+ )
- @override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE='100.00')
+ @override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE="100.00")
def test_set_sample_rate_max(self):
r = GoogleAnalyticsJsNode().render(Context())
- self.assertTrue("""ga('create', 'UA-123456-7', 'auto', {"sampleRate": 100});""" in r, r)
+ self.assertTrue(
+ """ga('create', 'UA-123456-7', 'auto', {"sampleRate": 100});""" in r, r
+ )
@override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE=-1)
def test_exception_whenset_sample_rate_too_small(self):
@@ -124,13 +156,18 @@ ga('send', 'pageview');""" in r, r)
def test_set_site_speed_sample_rate_min(self):
r = GoogleAnalyticsJsNode().render(Context())
self.assertTrue(
- """ga('create', 'UA-123456-7', 'auto', {"siteSpeedSampleRate": 0});""" in r, r)
+ """ga('create', 'UA-123456-7', 'auto', {"siteSpeedSampleRate": 0});""" in r,
+ r,
+ )
- @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE='100.00')
+ @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE="100.00")
def test_set_site_speed_sample_rate_max(self):
r = GoogleAnalyticsJsNode().render(Context())
self.assertTrue(
- """ga('create', 'UA-123456-7', 'auto', {"siteSpeedSampleRate": 100});""" in r, r)
+ """ga('create', 'UA-123456-7', 'auto', {"siteSpeedSampleRate": 100});"""
+ in r,
+ r,
+ )
@override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=-1)
def test_exception_whenset_site_speed_sample_rate_too_small(self):
@@ -145,13 +182,16 @@ ga('send', 'pageview');""" in r, r)
@override_settings(GOOGLE_ANALYTICS_COOKIE_EXPIRATION=0)
def test_set_cookie_expiration_min(self):
r = GoogleAnalyticsJsNode().render(Context())
- self.assertTrue("""ga('create', 'UA-123456-7', 'auto', {"cookieExpires": 0});""" in r, r)
+ self.assertTrue(
+ """ga('create', 'UA-123456-7', 'auto', {"cookieExpires": 0});""" in r, r
+ )
- @override_settings(GOOGLE_ANALYTICS_COOKIE_EXPIRATION='10000')
+ @override_settings(GOOGLE_ANALYTICS_COOKIE_EXPIRATION="10000")
def test_set_cookie_expiration_as_string(self):
r = GoogleAnalyticsJsNode().render(Context())
self.assertTrue(
- """ga('create', 'UA-123456-7', 'auto', {"cookieExpires": 10000});""" in r, r)
+ """ga('create', 'UA-123456-7', 'auto', {"cookieExpires": 10000});""" in r, r
+ )
@override_settings(GOOGLE_ANALYTICS_COOKIE_EXPIRATION=-1)
def test_exception_when_set_cookie_expiration_too_small(self):
@@ -159,10 +199,12 @@ ga('send', 'pageview');""" in r, r)
self.assertRaises(AnalyticalException, GoogleAnalyticsJsNode().render, context)
-@override_settings(GOOGLE_ANALYTICS_JS_PROPERTY_ID='UA-123456-7',
- GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
- GOOGLE_ANALYTICS_DOMAIN=None,
- ANALYTICAL_DOMAIN=None)
+@override_settings(
+ GOOGLE_ANALYTICS_JS_PROPERTY_ID="UA-123456-7",
+ GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS,
+ GOOGLE_ANALYTICS_DOMAIN=None,
+ ANALYTICAL_DOMAIN=None,
+)
class NoDomainTestCase(TestCase):
def test_exception_without_domain(self):
context = Context()
diff --git a/tests/unit/test_tag_gosquared.py b/tests/unit/test_tag_gosquared.py
index 444420f..e06581c 100644
--- a/tests/unit/test_tag_gosquared.py
+++ b/tests/unit/test_tag_gosquared.py
@@ -2,24 +2,24 @@
Tests for the GoSquared template tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, 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.gosquared import GoSquaredNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(GOSQUARED_SITE_TOKEN='ABC-123456-D')
+@override_settings(GOSQUARED_SITE_TOKEN="ABC-123456-D")
class GoSquaredTagTestCase(TagTestCase):
"""
Tests for the ``gosquared`` template tag.
"""
def test_tag(self):
- r = self.render_tag('gosquared', 'gosquared')
+ r = self.render_tag("gosquared", "gosquared")
self.assertTrue('GoSquared.acct = "ABC-123456-D";' in r, r)
def test_node(self):
@@ -30,36 +30,45 @@ class GoSquaredTagTestCase(TagTestCase):
def test_no_token(self):
self.assertRaises(AnalyticalException, GoSquaredNode)
- @override_settings(GOSQUARED_SITE_TOKEN='this is not a token')
+ @override_settings(GOSQUARED_SITE_TOKEN="this is not a token")
def test_wrong_token(self):
self.assertRaises(AnalyticalException, GoSquaredNode)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_auto_identify(self):
- r = GoSquaredNode().render(Context({
- 'user': User(username='test', first_name='Test', last_name='User'),
- }))
+ r = GoSquaredNode().render(
+ Context(
+ {
+ "user": User(username="test", first_name="Test", last_name="User"),
+ }
+ )
+ )
self.assertTrue('GoSquared.UserName = "Test User";' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_manual_identify(self):
- r = GoSquaredNode().render(Context({
- 'user': User(username='test', first_name='Test', last_name='User'),
- 'gosquared_identity': 'test_identity',
- }))
+ r = GoSquaredNode().render(
+ Context(
+ {
+ "user": User(username="test", first_name="Test", last_name="User"),
+ "gosquared_identity": "test_identity",
+ }
+ )
+ )
self.assertTrue('GoSquared.UserName = "test_identity";' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = GoSquaredNode().render(Context({'user': AnonymousUser()}))
- self.assertFalse('GoSquared.UserName = ' in r, r)
+ r = GoSquaredNode().render(Context({"user": AnonymousUser()}))
+ self.assertFalse("GoSquared.UserName = " in r, r)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = GoSquaredNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_tag_hotjar.py b/tests/unit/test_tag_hotjar.py
index d5978b8..a4d3ddd 100644
--- a/tests/unit/test_tag_hotjar.py
+++ b/tests/unit/test_tag_hotjar.py
@@ -4,13 +4,12 @@ Tests for the Hotjar template tags.
from django.http import HttpRequest
from django.template import Context, Template, TemplateSyntaxError
from django.test import override_settings
+from utils import TagTestCase
from analytical.templatetags.analytical import _load_template_nodes
from analytical.templatetags.hotjar import HotjarNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-
expected_html = """\
-""" % {'user_id': user.pk}, rendered_tag) # noqa
+""" # noqa
+ % {"user_id": user.pk},
+ rendered_tag,
+ )
@override_settings(INTERCOM_APP_ID=None)
def test_no_account_number(self):
self.assertRaises(AnalyticalException, IntercomNode)
- @override_settings(INTERCOM_APP_ID='123abQ')
+ @override_settings(INTERCOM_APP_ID="123abQ")
def test_wrong_account_number(self):
self.assertRaises(AnalyticalException, IntercomNode)
def test_identify_name_email_and_created_at(self):
now = datetime.datetime(2014, 4, 9, 15, 15, 0)
user = User.objects.create(
- username='test',
- first_name='Firstname',
- last_name='Lastname',
+ username="test",
+ first_name="Firstname",
+ last_name="Lastname",
email="test@example.com",
date_joined=now,
)
- r = IntercomNode().render(Context({
- 'user': user,
- }))
- self.assertTrue('window.intercomSettings = {'
- '"app_id": "abc123xyz", "created_at": 1397074500, '
- '"email": "test@example.com", "name": "Firstname Lastname", '
- '"user_id": %(user_id)s'
- '};' % {'user_id': user.pk} in r, msg=r)
+ r = IntercomNode().render(
+ Context(
+ {
+ "user": user,
+ }
+ )
+ )
+ self.assertTrue(
+ "window.intercomSettings = {"
+ '"app_id": "abc123xyz", "created_at": 1397074500, '
+ '"email": "test@example.com", "name": "Firstname Lastname", '
+ '"user_id": %(user_id)s'
+ "};" % {"user_id": user.pk} in r,
+ msg=r,
+ )
def test_custom(self):
- r = IntercomNode().render(Context({
- 'intercom_var1': 'val1',
- 'intercom_var2': 'val2'
- }))
+ r = IntercomNode().render(
+ Context({"intercom_var1": "val1", "intercom_var2": "val2"})
+ )
self.assertTrue('var1": "val1", "var2": "val2"' in r)
def test_identify_name_and_email(self):
- r = IntercomNode().render(Context({
- 'user': User(
- username='test',
- first_name='Firstname',
- last_name='Lastname',
- email="test@example.com"),
- }))
- self.assertTrue('"email": "test@example.com", "name": "Firstname Lastname"' in r)
+ r = IntercomNode().render(
+ Context(
+ {
+ "user": User(
+ username="test",
+ first_name="Firstname",
+ last_name="Lastname",
+ email="test@example.com",
+ ),
+ }
+ )
+ )
+ self.assertTrue(
+ '"email": "test@example.com", "name": "Firstname Lastname"' in r
+ )
def test_identify_username_no_email(self):
- r = IntercomNode().render(Context({'user': User(username='test')}))
+ r = IntercomNode().render(Context({"user": User(username="test")}))
self.assertTrue('"name": "test"' in r, r)
def test_no_identify_when_explicit_name(self):
- r = IntercomNode().render(Context({
- 'intercom_name': 'explicit',
- 'user': User(username='implicit'),
- }))
+ r = IntercomNode().render(
+ Context(
+ {
+ "intercom_name": "explicit",
+ "user": User(username="implicit"),
+ }
+ )
+ )
self.assertTrue('"name": "explicit"' in r, r)
def test_no_identify_when_explicit_email(self):
- r = IntercomNode().render(Context({
- 'intercom_email': 'explicit',
- 'user': User(username='implicit'),
- }))
+ r = IntercomNode().render(
+ Context(
+ {
+ "intercom_email": "explicit",
+ "user": User(username="implicit"),
+ }
+ )
+ )
self.assertTrue('"email": "explicit"' in r, r)
- @override_settings(INTERCOM_HMAC_SECRET_KEY='secret')
+ @override_settings(INTERCOM_HMAC_SECRET_KEY="secret")
def test_user_hash__without_user_details(self):
"""
No `user_hash` without `user_id` or `email`.
"""
attrs = IntercomNode()._get_custom_attrs(Context())
- self.assertEqual({
- 'created_at': None,
- }, attrs)
+ self.assertEqual(
+ {
+ "created_at": None,
+ },
+ attrs,
+ )
- @override_settings(INTERCOM_HMAC_SECRET_KEY='secret')
+ @override_settings(INTERCOM_HMAC_SECRET_KEY="secret")
def test_user_hash__with_user(self):
"""
'user_hash' of default `user_id`.
"""
user = User.objects.create(
- email='test@example.com',
+ email="test@example.com",
) # type: User
- attrs = IntercomNode()._get_custom_attrs(Context({'user': user}))
- self.assertEqual({
- 'created_at': int(user.date_joined.timestamp()),
- 'email': 'test@example.com',
- 'name': '',
- 'user_hash': intercom_user_hash(str(user.pk)),
- 'user_id': user.pk,
- }, attrs)
+ attrs = IntercomNode()._get_custom_attrs(Context({"user": user}))
+ self.assertEqual(
+ {
+ "created_at": int(user.date_joined.timestamp()),
+ "email": "test@example.com",
+ "name": "",
+ "user_hash": intercom_user_hash(str(user.pk)),
+ "user_id": user.pk,
+ },
+ attrs,
+ )
- @override_settings(INTERCOM_HMAC_SECRET_KEY='secret')
+ @override_settings(INTERCOM_HMAC_SECRET_KEY="secret")
def test_user_hash__with_explicit_user_id(self):
"""
'user_hash' of context-provided `user_id`.
"""
- attrs = IntercomNode()._get_custom_attrs(Context({
- 'intercom_email': 'test@example.com',
- 'intercom_user_id': '5',
- }))
- self.assertEqual({
- 'created_at': None,
- 'email': 'test@example.com',
- # HMAC for user_id:
- 'user_hash': 'd3123a7052b42272d9b520235008c248a5aff3221cc0c530b754702ad91ab102',
- 'user_id': '5',
- }, attrs)
+ attrs = IntercomNode()._get_custom_attrs(
+ Context(
+ {
+ "intercom_email": "test@example.com",
+ "intercom_user_id": "5",
+ }
+ )
+ )
+ self.assertEqual(
+ {
+ "created_at": None,
+ "email": "test@example.com",
+ # HMAC for user_id:
+ "user_hash": "d3123a7052b42272d9b520235008c248a5aff3221cc0c530b754702ad91ab102",
+ "user_id": "5",
+ },
+ attrs,
+ )
- @override_settings(INTERCOM_HMAC_SECRET_KEY='secret')
+ @override_settings(INTERCOM_HMAC_SECRET_KEY="secret")
def test_user_hash__with_explicit_email(self):
"""
'user_hash' of context-provided `email`.
"""
- attrs = IntercomNode()._get_custom_attrs(Context({
- 'intercom_email': 'test@example.com',
- }))
- self.assertEqual({
- 'created_at': None,
- 'email': 'test@example.com',
- # HMAC for email:
- 'user_hash': '49e43229ee99dca2565241719b8341b04e71dd4de0628f991b5bea30a526e153',
- }, attrs)
+ attrs = IntercomNode()._get_custom_attrs(
+ Context(
+ {
+ "intercom_email": "test@example.com",
+ }
+ )
+ )
+ self.assertEqual(
+ {
+ "created_at": None,
+ "email": "test@example.com",
+ # HMAC for email:
+ "user_hash": "49e43229ee99dca2565241719b8341b04e71dd4de0628f991b5bea30a526e153",
+ },
+ attrs,
+ )
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = IntercomNode().render(context)
- self.assertTrue(r.startswith(''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_tag_kiss_insights.py b/tests/unit/test_tag_kiss_insights.py
index dc627d1..94d0252 100644
--- a/tests/unit/test_tag_kiss_insights.py
+++ b/tests/unit/test_tag_kiss_insights.py
@@ -2,23 +2,23 @@
Tests for the KISSinsights template tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, User
from django.template import Context
from django.test.utils import override_settings
+from utils import TagTestCase
from analytical.templatetags.kiss_insights import KissInsightsNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER='12345', KISS_INSIGHTS_SITE_CODE='abc')
+@override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER="12345", KISS_INSIGHTS_SITE_CODE="abc")
class KissInsightsTagTestCase(TagTestCase):
"""
Tests for the ``kiss_insights`` template tag.
"""
def test_tag(self):
- r = self.render_tag('kiss_insights', 'kiss_insights')
+ r = self.render_tag("kiss_insights", "kiss_insights")
self.assertTrue("//s3.amazonaws.com/ki.js/12345/abc.js" in r, r)
def test_node(self):
@@ -33,24 +33,24 @@ class KissInsightsTagTestCase(TagTestCase):
def test_no_site_code(self):
self.assertRaises(AnalyticalException, KissInsightsNode)
- @override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER='abcde')
+ @override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER="abcde")
def test_wrong_account_number(self):
self.assertRaises(AnalyticalException, KissInsightsNode)
- @override_settings(KISS_INSIGHTS_SITE_CODE='abc def')
+ @override_settings(KISS_INSIGHTS_SITE_CODE="abc def")
def test_wrong_site_id(self):
self.assertRaises(AnalyticalException, KissInsightsNode)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify(self):
- r = KissInsightsNode().render(Context({'user': User(username='test')}))
+ r = KissInsightsNode().render(Context({"user": User(username="test")}))
self.assertTrue("_kiq.push(['identify', 'test']);" in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = KissInsightsNode().render(Context({'user': AnonymousUser()}))
+ r = KissInsightsNode().render(Context({"user": AnonymousUser()}))
self.assertFalse("_kiq.push(['identify', " in r, r)
def test_show_survey(self):
- r = KissInsightsNode().render(Context({'kiss_insights_show_survey': 1234}))
+ r = KissInsightsNode().render(Context({"kiss_insights_show_survey": 1234}))
self.assertTrue("_kiq.push(['showSurvey', 1234]);" in r, r)
diff --git a/tests/unit/test_tag_kiss_metrics.py b/tests/unit/test_tag_kiss_metrics.py
index d3e885f..e19f189 100644
--- a/tests/unit/test_tag_kiss_metrics.py
+++ b/tests/unit/test_tag_kiss_metrics.py
@@ -2,80 +2,106 @@
Tests for the KISSmetrics tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, 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.kiss_metrics import KissMetricsNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef01234567')
+@override_settings(KISS_METRICS_API_KEY="0123456789abcdef0123456789abcdef01234567")
class KissMetricsTagTestCase(TagTestCase):
"""
Tests for the ``kiss_metrics`` template tag.
"""
def test_tag(self):
- r = self.render_tag('kiss_metrics', 'kiss_metrics')
- self.assertTrue("//doug1izaerwt3.cloudfront.net/"
- "0123456789abcdef0123456789abcdef01234567.1.js" in r, r)
+ r = self.render_tag("kiss_metrics", "kiss_metrics")
+ self.assertTrue(
+ "//doug1izaerwt3.cloudfront.net/"
+ "0123456789abcdef0123456789abcdef01234567.1.js" in r,
+ r,
+ )
def test_node(self):
r = KissMetricsNode().render(Context())
- self.assertTrue("//doug1izaerwt3.cloudfront.net/"
- "0123456789abcdef0123456789abcdef01234567.1.js" in r, r)
+ self.assertTrue(
+ "//doug1izaerwt3.cloudfront.net/"
+ "0123456789abcdef0123456789abcdef01234567.1.js" in r,
+ r,
+ )
@override_settings(KISS_METRICS_API_KEY=None)
def test_no_api_key(self):
self.assertRaises(AnalyticalException, KissMetricsNode)
- @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef0123456')
+ @override_settings(KISS_METRICS_API_KEY="0123456789abcdef0123456789abcdef0123456")
def test_api_key_too_short(self):
self.assertRaises(AnalyticalException, KissMetricsNode)
- @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef012345678')
+ @override_settings(KISS_METRICS_API_KEY="0123456789abcdef0123456789abcdef012345678")
def test_api_key_too_long(self):
self.assertRaises(AnalyticalException, KissMetricsNode)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify(self):
- r = KissMetricsNode().render(Context({'user': User(username='test')}))
+ r = KissMetricsNode().render(Context({"user": User(username="test")}))
self.assertTrue("_kmq.push(['identify', 'test']);" in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = KissMetricsNode().render(Context({'user': AnonymousUser()}))
+ r = KissMetricsNode().render(Context({"user": AnonymousUser()}))
self.assertFalse("_kmq.push(['identify', " in r, r)
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, r)
+ 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,
+ 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, r)
+ r = KissMetricsNode().render(
+ Context(
+ {
+ "kiss_metrics_properties": {"prop1": "val1", "prop2": "val2"},
+ }
+ )
+ )
+ self.assertTrue(
+ "_kmq.push(['set', " '{"prop1": "val1", "prop2": "val2"}]);' in r, r
+ )
def test_alias(self):
- r = KissMetricsNode().render(Context({
- 'kiss_metrics_alias': {'test': 'test_alias'},
- }))
+ r = KissMetricsNode().render(
+ Context(
+ {
+ "kiss_metrics_alias": {"test": "test_alias"},
+ }
+ )
+ )
self.assertTrue("_kmq.push(['alias', 'test', 'test_alias']);" in r, r)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = KissMetricsNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_tag_luckyorange.py b/tests/unit/test_tag_luckyorange.py
index a4e082b..7357e7e 100644
--- a/tests/unit/test_tag_luckyorange.py
+++ b/tests/unit/test_tag_luckyorange.py
@@ -4,13 +4,12 @@ Tests for the Lucky Orange template tags.
from django.http import HttpRequest
from django.template import Context, Template, TemplateSyntaxError
from django.test import override_settings
+from utils import TagTestCase
from analytical.templatetags.analytical import _load_template_nodes
from analytical.templatetags.luckyorange import LuckyOrangeNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-
expected_html = """\
',
- self.render_tag('optimizely', 'optimizely'))
+ '',
+ self.render_tag("optimizely", "optimizely"),
+ )
def test_node(self):
self.assertEqual(
- '',
- OptimizelyNode().render(Context()))
+ '',
+ OptimizelyNode().render(Context()),
+ )
@override_settings(OPTIMIZELY_ACCOUNT_NUMBER=None)
def test_no_account_number(self):
self.assertRaises(AnalyticalException, OptimizelyNode)
- @override_settings(OPTIMIZELY_ACCOUNT_NUMBER='123abc')
+ @override_settings(OPTIMIZELY_ACCOUNT_NUMBER="123abc")
def test_wrong_account_number(self):
self.assertRaises(AnalyticalException, OptimizelyNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = OptimizelyNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_tag_performable.py b/tests/unit/test_tag_performable.py
index 24e20c8..713e3be 100644
--- a/tests/unit/test_tag_performable.py
+++ b/tests/unit/test_tag_performable.py
@@ -2,56 +2,57 @@
Tests for the Performable template tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, 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.performable import PerformableNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(PERFORMABLE_API_KEY='123ABC')
+@override_settings(PERFORMABLE_API_KEY="123ABC")
class PerformableTagTestCase(TagTestCase):
"""
Tests for the ``performable`` template tag.
"""
def test_tag(self):
- r = self.render_tag('performable', 'performable')
- self.assertTrue('/performable/pax/123ABC.js' in r, r)
+ r = self.render_tag("performable", "performable")
+ self.assertTrue("/performable/pax/123ABC.js" in r, r)
def test_node(self):
r = PerformableNode().render(Context())
- self.assertTrue('/performable/pax/123ABC.js' in r, r)
+ self.assertTrue("/performable/pax/123ABC.js" in r, r)
@override_settings(PERFORMABLE_API_KEY=None)
def test_no_api_key(self):
self.assertRaises(AnalyticalException, PerformableNode)
- @override_settings(PERFORMABLE_API_KEY='123 ABC')
+ @override_settings(PERFORMABLE_API_KEY="123 ABC")
def test_wrong_account_number(self):
self.assertRaises(AnalyticalException, PerformableNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = PerformableNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify(self):
- r = PerformableNode().render(Context({'user': User(username='test')}))
+ r = PerformableNode().render(Context({"user": User(username="test")}))
self.assertTrue('_paq.push(["identify", {identity: "test"}]);' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = PerformableNode().render(Context({'user': AnonymousUser()}))
+ r = PerformableNode().render(Context({"user": AnonymousUser()}))
self.assertFalse('_paq.push(["identify", ' in r, r)
@@ -61,11 +62,9 @@ class PerformableEmbedTagTestCase(TagTestCase):
"""
def test_tag(self):
- domain = 'example.com'
- page = 'test'
+ domain = "example.com"
+ page = "test"
tag = self.render_tag(
- 'performable', 'performable_embed "%s" "%s"' % (domain, page)
- )
- self.assertIn(
- "$f.initialize({'host': 'example.com', 'page': 'test'});", tag
+ "performable", 'performable_embed "%s" "%s"' % (domain, page)
)
+ self.assertIn("$f.initialize({'host': 'example.com', 'page': 'test'});", tag)
diff --git a/tests/unit/test_tag_piwik.py b/tests/unit/test_tag_piwik.py
index 38aa317..f115221 100644
--- a/tests/unit/test_tag_piwik.py
+++ b/tests/unit/test_tag_piwik.py
@@ -6,48 +6,43 @@ 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.piwik import PiwikNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(PIWIK_DOMAIN_PATH='example.com', PIWIK_SITE_ID='345')
+@override_settings(PIWIK_DOMAIN_PATH="example.com", PIWIK_SITE_ID="345")
class PiwikTagTestCase(TagTestCase):
"""
Tests for the ``piwik`` template tag.
"""
def test_tag(self):
- r = self.render_tag('piwik', 'piwik')
+ r = self.render_tag("piwik", "piwik")
self.assertTrue('"//example.com/"' in r, r)
self.assertTrue("_paq.push(['setSiteId', 345]);" in r, r)
- self.assertTrue('img src="//example.com/piwik.php?idsite=345"'
- in r, r)
+ self.assertTrue('img src="//example.com/piwik.php?idsite=345"' in r, r)
def test_node(self):
r = PiwikNode().render(Context({}))
self.assertTrue('"//example.com/";' in r, r)
self.assertTrue("_paq.push(['setSiteId', 345]);" in r, r)
- self.assertTrue('img src="//example.com/piwik.php?idsite=345"'
- in r, r)
+ self.assertTrue('img src="//example.com/piwik.php?idsite=345"' in r, r)
- @override_settings(PIWIK_DOMAIN_PATH='example.com/piwik',
- PIWIK_SITE_ID='345')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com/piwik", PIWIK_SITE_ID="345")
def test_domain_path_valid(self):
- r = self.render_tag('piwik', 'piwik')
+ r = self.render_tag("piwik", "piwik")
self.assertTrue('"//example.com/piwik/"' in r, r)
- @override_settings(PIWIK_DOMAIN_PATH='example.com:1234',
- PIWIK_SITE_ID='345')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com:1234", PIWIK_SITE_ID="345")
def test_domain_port_valid(self):
- r = self.render_tag('piwik', 'piwik')
+ r = self.render_tag("piwik", "piwik")
self.assertTrue('"//example.com:1234/";' in r, r)
- @override_settings(PIWIK_DOMAIN_PATH='example.com:1234/piwik',
- PIWIK_SITE_ID='345')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com:1234/piwik", PIWIK_SITE_ID="345")
def test_domain_port_path_valid(self):
- r = self.render_tag('piwik', 'piwik')
+ r = self.render_tag("piwik", "piwik")
self.assertTrue('"//example.com:1234/piwik/"' in r, r)
@override_settings(PIWIK_DOMAIN_PATH=None)
@@ -58,91 +53,98 @@ class PiwikTagTestCase(TagTestCase):
def test_no_siteid(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_SITE_ID='x')
+ @override_settings(PIWIK_SITE_ID="x")
def test_siteid_not_a_number(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_DOMAIN_PATH='http://www.example.com')
+ @override_settings(PIWIK_DOMAIN_PATH="http://www.example.com")
def test_domain_protocol_invalid(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_DOMAIN_PATH='example.com/')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com/")
def test_domain_slash_invalid(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_DOMAIN_PATH='example.com:123:456')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com:123:456")
def test_domain_multi_port(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_DOMAIN_PATH='example.com:')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com:")
def test_domain_incomplete_port(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_DOMAIN_PATH='example.com:/piwik')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com:/piwik")
def test_domain_uri_incomplete_port(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(PIWIK_DOMAIN_PATH='example.com:12df')
+ @override_settings(PIWIK_DOMAIN_PATH="example.com:12df")
def test_domain_port_invalid(self):
self.assertRaises(AnalyticalException, PiwikNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = PiwikNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(r.startswith(""), r)
def test_uservars(self):
- context = Context({'piwik_vars': [(1, 'foo', 'foo_val'),
- (2, 'bar', 'bar_val', 'page'),
- (3, 'spam', 'spam_val', 'visit')]})
+ context = Context(
+ {
+ "piwik_vars": [
+ (1, "foo", "foo_val"),
+ (2, "bar", "bar_val", "page"),
+ (3, "spam", "spam_val", "visit"),
+ ]
+ }
+ )
r = PiwikNode().render(context)
- msg = 'Incorrect Piwik custom variable rendering. Expected:\n%s\nIn:\n%s'
- 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"]);']:
+ msg = "Incorrect Piwik custom variable rendering. Expected:\n%s\nIn:\n%s"
+ 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"]);',
+ ]:
self.assertIn(var_code, r, msg % (var_code, 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')
- })
+ context = Context(
+ {"user": User(username="BDFL", first_name="Guido", last_name="van Rossum")}
+ )
r = PiwikNode().render(context)
- msg = 'Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s'
+ msg = "Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s"
var_code = '_paq.push(["setUserId", "BDFL"]);'
self.assertIn(var_code, r, msg % (var_code, r))
def test_piwik_usertrack(self):
- context = Context({
- 'piwik_identity': 'BDFL'
- })
+ context = Context({"piwik_identity": "BDFL"})
r = PiwikNode().render(context)
- msg = 'Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s'
+ msg = "Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s"
var_code = '_paq.push(["setUserId", "BDFL"]);'
self.assertIn(var_code, r, msg % (var_code, r))
def test_analytical_usertrack(self):
- context = Context({
- 'analytical_identity': 'BDFL'
- })
+ context = Context({"analytical_identity": "BDFL"})
r = PiwikNode().render(context)
- msg = 'Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s'
+ msg = "Incorrect Piwik user tracking rendering.\nNot found:\n%s\nIn:\n%s"
var_code = '_paq.push(["setUserId", "BDFL"]);'
self.assertIn(var_code, r, msg % (var_code, 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'),
- 'piwik_identity': None
- })
+ context = Context(
+ {
+ "user": User(
+ username="BDFL", first_name="Guido", last_name="van Rossum"
+ ),
+ "piwik_identity": None,
+ }
+ )
r = PiwikNode().render(context)
- msg = 'Incorrect Piwik user tracking rendering.\nFound:\n%s\nIn:\n%s'
+ msg = "Incorrect Piwik user tracking rendering.\nFound:\n%s\nIn:\n%s"
var_code = '_paq.push(["setUserId", "BDFL"]);'
self.assertNotIn(var_code, r, msg % (var_code, r))
diff --git a/tests/unit/test_tag_rating_mailru.py b/tests/unit/test_tag_rating_mailru.py
index d8f9459..b73a1a7 100644
--- a/tests/unit/test_tag_rating_mailru.py
+++ b/tests/unit/test_tag_rating_mailru.py
@@ -5,20 +5,20 @@ Tests for the Rating@Mail.ru template tags and filters.
from django.http import HttpRequest
from django.template import Context
from django.test.utils import override_settings
+from utils import TagTestCase
from analytical.templatetags.rating_mailru import RatingMailruNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(RATING_MAILRU_COUNTER_ID='1234567')
+@override_settings(RATING_MAILRU_COUNTER_ID="1234567")
class RatingMailruTagTestCase(TagTestCase):
"""
Tests for the ``rating_mailru`` template tag.
"""
def test_tag(self):
- r = self.render_tag('rating_mailru', 'rating_mailru')
+ r = self.render_tag("rating_mailru", "rating_mailru")
self.assertTrue("counter?id=1234567;js=na" in r, r)
def test_node(self):
@@ -29,16 +29,17 @@ class RatingMailruTagTestCase(TagTestCase):
def test_no_site_id(self):
self.assertRaises(AnalyticalException, RatingMailruNode)
- @override_settings(RATING_MAILRU_COUNTER_ID='1234abc')
+ @override_settings(RATING_MAILRU_COUNTER_ID="1234abc")
def test_wrong_site_id(self):
self.assertRaises(AnalyticalException, RatingMailruNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = RatingMailruNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_tag_snapengage.py b/tests/unit/test_tag_snapengage.py
index 215ebe2..44bcce6 100644
--- a/tests/unit/test_tag_snapengage.py
+++ b/tests/unit/test_tag_snapengage.py
@@ -2,20 +2,26 @@
Tests for the SnapEngage template tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, User
from django.template import Context
from django.test.utils import override_settings
from django.utils import translation
-
-from analytical.templatetags.snapengage import SnapEngageNode, \
- BUTTON_STYLE_LIVE, BUTTON_STYLE_DEFAULT, BUTTON_STYLE_NONE, \
- BUTTON_LOCATION_LEFT, BUTTON_LOCATION_RIGHT, BUTTON_LOCATION_TOP, \
- BUTTON_LOCATION_BOTTOM, FORM_POSITION_TOP_LEFT
from utils import TagTestCase
+
+from analytical.templatetags.snapengage import (
+ BUTTON_LOCATION_BOTTOM,
+ BUTTON_LOCATION_LEFT,
+ BUTTON_LOCATION_RIGHT,
+ BUTTON_LOCATION_TOP,
+ BUTTON_STYLE_DEFAULT,
+ BUTTON_STYLE_LIVE,
+ BUTTON_STYLE_NONE,
+ FORM_POSITION_TOP_LEFT,
+ SnapEngageNode,
+)
from analytical.utils import AnalyticalException
-
-WIDGET_ID = 'ec329c69-0bf0-4db8-9b77-3f8150fb977e'
+WIDGET_ID = "ec329c69-0bf0-4db8-9b77-3f8150fb977e"
@override_settings(
@@ -30,246 +36,343 @@ class SnapEngageTestCase(TagTestCase):
"""
def test_tag(self):
- r = self.render_tag('snapengage', 'snapengage')
+ r = self.render_tag("snapengage", "snapengage")
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
def test_node(self):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
@override_settings(SNAPENGAGE_WIDGET_ID=None)
def test_no_site_id(self):
self.assertRaises(AnalyticalException, SnapEngageNode)
- @override_settings(SNAPENGAGE_WIDGET_ID='abc')
+ @override_settings(SNAPENGAGE_WIDGET_ID="abc")
def test_wrong_site_id(self):
self.assertRaises(AnalyticalException, SnapEngageNode)
def test_no_button(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button': BUTTON_STYLE_NONE,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button": BUTTON_STYLE_NONE,
+ }
+ )
+ )
self.assertTrue('SnapABug.init("ec329c69-0bf0-4db8-9b77-3f8150fb977e")' in r, r)
with override_settings(SNAPENGAGE_BUTTON=BUTTON_STYLE_NONE):
r = SnapEngageNode().render(Context())
self.assertTrue(
- 'SnapABug.init("ec329c69-0bf0-4db8-9b77-3f8150fb977e")' in r, r)
+ 'SnapABug.init("ec329c69-0bf0-4db8-9b77-3f8150fb977e")' in r, r
+ )
def test_live_button(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button': BUTTON_STYLE_LIVE,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button": BUTTON_STYLE_LIVE,
+ }
+ )
+ )
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"55%",true);' in r, r)
+ '"55%",true);' in r,
+ r,
+ )
with override_settings(SNAPENGAGE_BUTTON=BUTTON_STYLE_LIVE):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"55%",true);' in r, r)
+ '"55%",true);' in r,
+ r,
+ )
def test_custom_button(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button': "http://www.example.com/button.png",
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button": "http://www.example.com/button.png",
+ }
+ )
+ )
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
self.assertTrue(
- 'SnapABug.setButton("http://www.example.com/button.png");' in r, r)
- with override_settings(
- SNAPENGAGE_BUTTON="http://www.example.com/button.png"):
+ 'SnapABug.setButton("http://www.example.com/button.png");' in r, r
+ )
+ with override_settings(SNAPENGAGE_BUTTON="http://www.example.com/button.png"):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
self.assertTrue(
- 'SnapABug.setButton("http://www.example.com/button.png");' in r,
- r)
+ 'SnapABug.setButton("http://www.example.com/button.png");' in r, r
+ )
def test_button_location_right(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button_location': BUTTON_LOCATION_RIGHT,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button_location": BUTTON_LOCATION_RIGHT,
+ }
+ )
+ )
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","1",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
with override_settings(SNAPENGAGE_BUTTON_LOCATION=BUTTON_LOCATION_RIGHT):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","1",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
def test_button_location_top(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button_location': BUTTON_LOCATION_TOP,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button_location": BUTTON_LOCATION_TOP,
+ }
+ )
+ )
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","2",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
with override_settings(SNAPENGAGE_BUTTON_LOCATION=BUTTON_LOCATION_TOP):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","2",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
def test_button_location_bottom(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button_location': BUTTON_LOCATION_BOTTOM,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button_location": BUTTON_LOCATION_BOTTOM,
+ }
+ )
+ )
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","3",'
- '"55%");' in r, r)
- with override_settings(
- SNAPENGAGE_BUTTON_LOCATION=BUTTON_LOCATION_BOTTOM):
+ '"55%");' in r,
+ r,
+ )
+ with override_settings(SNAPENGAGE_BUTTON_LOCATION=BUTTON_LOCATION_BOTTOM):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","3",'
- '"55%");' in r, r)
+ '"55%");' in r,
+ r,
+ )
def test_button_offset(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button_location_offset': "30%",
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button_location_offset": "30%",
+ }
+ )
+ )
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"30%");' in r, r)
+ '"30%");' in r,
+ r,
+ )
with override_settings(SNAPENGAGE_BUTTON_LOCATION_OFFSET="30%"):
r = SnapEngageNode().render(Context())
self.assertTrue(
'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",'
- '"30%");' in r, r)
+ '"30%");' in r,
+ r,
+ )
def test_button_effect(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_button_effect': "-4px",
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_button_effect": "-4px",
+ }
+ )
+ )
self.assertTrue('SnapABug.setButtonEffect("-4px");' in r, r)
with override_settings(SNAPENGAGE_BUTTON_EFFECT="-4px"):
r = SnapEngageNode().render(Context())
self.assertTrue('SnapABug.setButtonEffect("-4px");' in r, r)
def test_form_position(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_form_position': FORM_POSITION_TOP_LEFT,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_form_position": FORM_POSITION_TOP_LEFT,
+ }
+ )
+ )
self.assertTrue('SnapABug.setChatFormPosition("tl");' in r, r)
with override_settings(SNAPENGAGE_FORM_POSITION=FORM_POSITION_TOP_LEFT):
r = SnapEngageNode().render(Context())
self.assertTrue('SnapABug.setChatFormPosition("tl");' in r, r)
def test_form_top_position(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_form_top_position': 40,
- }))
- self.assertTrue('SnapABug.setFormTopPosition(40);' in r, r)
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_form_top_position": 40,
+ }
+ )
+ )
+ self.assertTrue("SnapABug.setFormTopPosition(40);" in r, r)
with override_settings(SNAPENGAGE_FORM_TOP_POSITION=40):
r = SnapEngageNode().render(Context())
- self.assertTrue('SnapABug.setFormTopPosition(40);' in r, r)
+ self.assertTrue("SnapABug.setFormTopPosition(40);" in r, r)
def test_domain(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_domain': "example.com"}))
+ r = SnapEngageNode().render(Context({"snapengage_domain": "example.com"}))
self.assertTrue('SnapABug.setDomain("example.com");' in r, r)
with override_settings(SNAPENGAGE_DOMAIN="example.com"):
r = SnapEngageNode().render(Context())
self.assertTrue('SnapABug.setDomain("example.com");' in r, r)
def test_secure_connection(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_secure_connection': True}))
- self.assertTrue('SnapABug.setSecureConnexion();' in r, r)
+ r = SnapEngageNode().render(Context({"snapengage_secure_connection": True}))
+ self.assertTrue("SnapABug.setSecureConnexion();" in r, r)
with override_settings(SNAPENGAGE_SECURE_CONNECTION=True):
r = SnapEngageNode().render(Context())
- self.assertTrue('SnapABug.setSecureConnexion();' in r, r)
+ self.assertTrue("SnapABug.setSecureConnexion();" in r, r)
def test_show_offline(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_show_offline': False,
- }))
- self.assertTrue('SnapABug.allowOffline(false);' in r, r)
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_show_offline": False,
+ }
+ )
+ )
+ self.assertTrue("SnapABug.allowOffline(false);" in r, r)
with override_settings(SNAPENGAGE_SHOW_OFFLINE=False):
r = SnapEngageNode().render(Context())
- self.assertTrue('SnapABug.allowOffline(false);' in r, r)
+ self.assertTrue("SnapABug.allowOffline(false);" in r, r)
def test_proactive_chat(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_proactive_chat': False}))
- self.assertTrue('SnapABug.allowProactiveChat(false);' in r, r)
+ r = SnapEngageNode().render(Context({"snapengage_proactive_chat": False}))
+ self.assertTrue("SnapABug.allowProactiveChat(false);" in r, r)
def test_screenshot(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_screenshots': False,
- }))
- self.assertTrue('SnapABug.allowScreenshot(false);' in r, r)
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_screenshots": False,
+ }
+ )
+ )
+ self.assertTrue("SnapABug.allowScreenshot(false);" in r, r)
with override_settings(SNAPENGAGE_SCREENSHOTS=False):
r = SnapEngageNode().render(Context())
- self.assertTrue('SnapABug.allowScreenshot(false);' in r, r)
+ self.assertTrue("SnapABug.allowScreenshot(false);" in r, r)
def test_offline_screenshots(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_offline_screenshots': False,
- }))
- self.assertTrue('SnapABug.showScreenshotOption(false);' in r, r)
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_offline_screenshots": False,
+ }
+ )
+ )
+ self.assertTrue("SnapABug.showScreenshotOption(false);" in r, r)
with override_settings(SNAPENGAGE_OFFLINE_SCREENSHOTS=False):
r = SnapEngageNode().render(Context())
- self.assertTrue('SnapABug.showScreenshotOption(false);' in r, r)
+ self.assertTrue("SnapABug.showScreenshotOption(false);" in r, r)
def test_sounds(self):
- r = SnapEngageNode().render(Context({'snapengage_sounds': False}))
- self.assertTrue('SnapABug.allowChatSound(false);' in r, r)
+ r = SnapEngageNode().render(Context({"snapengage_sounds": False}))
+ self.assertTrue("SnapABug.allowChatSound(false);" in r, r)
with override_settings(SNAPENGAGE_SOUNDS=False):
r = SnapEngageNode().render(Context())
- self.assertTrue('SnapABug.allowChatSound(false);' in r, r)
+ self.assertTrue("SnapABug.allowChatSound(false);" in r, r)
@override_settings(SNAPENGAGE_READONLY_EMAIL=False)
def test_email(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_email': 'test@example.com',
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_email": "test@example.com",
+ }
+ )
+ )
self.assertTrue('SnapABug.setUserEmail("test@example.com");' in r, r)
def test_email_readonly(self):
- r = SnapEngageNode().render(Context({
- 'snapengage_email': 'test@example.com',
- 'snapengage_readonly_email': True,
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_email": "test@example.com",
+ "snapengage_readonly_email": True,
+ }
+ )
+ )
self.assertTrue('SnapABug.setUserEmail("test@example.com",true);' in r, r)
with override_settings(SNAPENGAGE_READONLY_EMAIL=True):
- r = SnapEngageNode().render(Context({
- 'snapengage_email': 'test@example.com',
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "snapengage_email": "test@example.com",
+ }
+ )
+ )
self.assertTrue('SnapABug.setUserEmail("test@example.com",true);' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify(self):
- r = SnapEngageNode().render(Context({
- 'user': User(username='test', email='test@example.com'),
- }))
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "user": User(username="test", email="test@example.com"),
+ }
+ )
+ )
self.assertTrue('SnapABug.setUserEmail("test@example.com");' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = SnapEngageNode().render(Context({
- 'user': AnonymousUser(),
- }))
- self.assertFalse('SnapABug.setUserEmail(' in r, r)
+ r = SnapEngageNode().render(
+ Context(
+ {
+ "user": AnonymousUser(),
+ }
+ )
+ )
+ self.assertFalse("SnapABug.setUserEmail(" in r, r)
def test_language(self):
- r = SnapEngageNode().render(Context({'snapengage_locale': 'fr'}))
+ r = SnapEngageNode().render(Context({"snapengage_locale": "fr"}))
self.assertTrue('SnapABug.setLocale("fr");' in r, r)
- with override_settings(SNAPENGAGE_LOCALE='fr'):
+ with override_settings(SNAPENGAGE_LOCALE="fr"):
r = SnapEngageNode().render(Context())
self.assertTrue('SnapABug.setLocale("fr");' in r, r)
def test_automatic_language(self):
real_get_language = translation.get_language
try:
- translation.get_language = lambda: 'fr-ca'
+ translation.get_language = lambda: "fr-ca"
r = SnapEngageNode().render(Context())
self.assertTrue('SnapABug.setLocale("fr_CA");' in r, r)
finally:
diff --git a/tests/unit/test_tag_spring_metrics.py b/tests/unit/test_tag_spring_metrics.py
index ca00e71..9d650d1 100644
--- a/tests/unit/test_tag_spring_metrics.py
+++ b/tests/unit/test_tag_spring_metrics.py
@@ -2,24 +2,24 @@
Tests for the Spring Metrics template tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, 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.spring_metrics import SpringMetricsNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(SPRING_METRICS_TRACKING_ID='12345678')
+@override_settings(SPRING_METRICS_TRACKING_ID="12345678")
class SpringMetricsTagTestCase(TagTestCase):
"""
Tests for the ``spring_metrics`` template tag.
"""
def test_tag(self):
- r = self.render_tag('spring_metrics', 'spring_metrics')
+ r = self.render_tag("spring_metrics", "spring_metrics")
self.assertTrue("_springMetq.push(['id', '12345678']);" in r, r)
def test_node(self):
@@ -30,36 +30,47 @@ class SpringMetricsTagTestCase(TagTestCase):
def test_no_site_id(self):
self.assertRaises(AnalyticalException, SpringMetricsNode)
- @override_settings(SPRING_METRICS_TRACKING_ID='123xyz')
+ @override_settings(SPRING_METRICS_TRACKING_ID="123xyz")
def test_wrong_site_id(self):
self.assertRaises(AnalyticalException, SpringMetricsNode)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify(self):
- r = SpringMetricsNode().render(Context({
- 'user': User(email='test@test.com'),
- }))
- self.assertTrue("_springMetq.push(['setdata', {'email': 'test@test.com'}]);" in r, r)
+ r = SpringMetricsNode().render(
+ Context(
+ {
+ "user": User(email="test@test.com"),
+ }
+ )
+ )
+ self.assertTrue(
+ "_springMetq.push(['setdata', {'email': 'test@test.com'}]);" in r, r
+ )
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = SpringMetricsNode().render(Context({'user': AnonymousUser()}))
+ r = SpringMetricsNode().render(Context({"user": AnonymousUser()}))
self.assertFalse("_springMetq.push(['setdata', {'email':" in r, r)
def test_custom(self):
- r = SpringMetricsNode().render(Context({
- 'spring_metrics_var1': 'val1',
- 'spring_metrics_var2': 'val2',
- }))
+ r = SpringMetricsNode().render(
+ Context(
+ {
+ "spring_metrics_var1": "val1",
+ "spring_metrics_var2": "val2",
+ }
+ )
+ )
self.assertTrue("_springMetq.push(['setdata', {'var1': 'val1'}]);" in r, r)
self.assertTrue("_springMetq.push(['setdata', {'var2': 'val2'}]);" in r, r)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = SpringMetricsNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_tag_uservoice.py b/tests/unit/test_tag_uservoice.py
index c740311..cfd91d8 100644
--- a/tests/unit/test_tag_uservoice.py
+++ b/tests/unit/test_tag_uservoice.py
@@ -4,13 +4,13 @@ Tests for the UserVoice tags and filters.
from django.template import Context
from django.test.utils import override_settings
+from utils import TagTestCase
from analytical.templatetags.uservoice import UserVoiceNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(USERVOICE_WIDGET_KEY='abcdefghijklmnopqrst')
+@override_settings(USERVOICE_WIDGET_KEY="abcdefghijklmnopqrst")
class UserVoiceTagTestCase(TagTestCase):
"""
Tests for the ``uservoice`` template tag.
@@ -27,34 +27,34 @@ class UserVoiceTagTestCase(TagTestCase):
self.assertIn("widget.uservoice.com/abcdefghijklmnopqrst.js", r)
def test_tag(self):
- r = self.render_tag('uservoice', 'uservoice')
+ r = self.render_tag("uservoice", "uservoice")
self.assertIn("widget.uservoice.com/abcdefghijklmnopqrst.js", r)
@override_settings(USERVOICE_WIDGET_KEY=None)
def test_no_key(self):
self.assertRaises(AnalyticalException, UserVoiceNode)
- @override_settings(USERVOICE_WIDGET_KEY='abcdefgh ijklmnopqrst')
+ @override_settings(USERVOICE_WIDGET_KEY="abcdefgh ijklmnopqrst")
def test_invalid_key(self):
self.assertRaises(AnalyticalException, UserVoiceNode)
- @override_settings(USERVOICE_WIDGET_KEY='')
+ @override_settings(USERVOICE_WIDGET_KEY="")
def test_empty_key(self):
self.assertRaises(AnalyticalException, UserVoiceNode)
def test_overridden_key(self):
- vars = {'uservoice_widget_key': 'defghijklmnopqrstuvw'}
+ vars = {"uservoice_widget_key": "defghijklmnopqrstuvw"}
r = UserVoiceNode().render(Context(vars))
self.assertIn("widget.uservoice.com/defghijklmnopqrstuvw.js", r)
- @override_settings(USERVOICE_WIDGET_OPTIONS={'key1': 'val1'})
+ @override_settings(USERVOICE_WIDGET_OPTIONS={"key1": "val1"})
def test_options(self):
r = UserVoiceNode().render(Context())
self.assertIn("""UserVoice.push(['set', {"key1": "val1"}]);""", r)
- @override_settings(USERVOICE_WIDGET_OPTIONS={'key1': 'val1'})
+ @override_settings(USERVOICE_WIDGET_OPTIONS={"key1": "val1"})
def test_override_options(self):
- data = {'uservoice_widget_options': {'key1': 'val2'}}
+ data = {"uservoice_widget_options": {"key1": "val2"}}
r = UserVoiceNode().render(Context(data))
self.assertIn("""UserVoice.push(['set', {"key1": "val2"}]);""", r)
@@ -69,5 +69,5 @@ class UserVoiceTagTestCase(TagTestCase):
@override_settings(USERVOICE_ADD_TRIGGER=False)
def test_auto_trigger_custom_win(self):
- r = UserVoiceNode().render(Context({'uservoice_add_trigger': True}))
+ r = UserVoiceNode().render(Context({"uservoice_add_trigger": True}))
self.assertTrue("UserVoice.push(['addTrigger', {}]);" in r, r)
diff --git a/tests/unit/test_tag_woopra.py b/tests/unit/test_tag_woopra.py
index 9dca7e9..c638ecb 100644
--- a/tests/unit/test_tag_woopra.py
+++ b/tests/unit/test_tag_woopra.py
@@ -2,24 +2,24 @@
Tests for the Woopra template tags and filters.
"""
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth.models import AnonymousUser, 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.woopra import WoopraNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(WOOPRA_DOMAIN='example.com')
+@override_settings(WOOPRA_DOMAIN="example.com")
class WoopraTagTestCase(TagTestCase):
"""
Tests for the ``woopra`` template tag.
"""
def test_tag(self):
- r = self.render_tag('woopra', 'woopra')
+ r = self.render_tag("woopra", "woopra")
self.assertTrue('var woo_settings = {"domain": "example.com"};' in r, r)
def test_node(self):
@@ -30,66 +30,89 @@ class WoopraTagTestCase(TagTestCase):
def test_no_domain(self):
self.assertRaises(AnalyticalException, WoopraNode)
- @override_settings(WOOPRA_DOMAIN='this is not a domain')
+ @override_settings(WOOPRA_DOMAIN="this is not a domain")
def test_wrong_domain(self):
self.assertRaises(AnalyticalException, WoopraNode)
@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, 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',
- }))
+ r = WoopraNode().render(
+ Context(
+ {
+ "woopra_var1": "val1",
+ "woopra_var2": "val2",
+ }
+ )
+ )
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 = '
- '{"email": "test@example.com", "name": "Firstname Lastname"};' in r, r)
+ r = WoopraNode().render(
+ Context(
+ {
+ "user": User(
+ username="test",
+ first_name="Firstname",
+ last_name="Lastname",
+ email="test@example.com",
+ ),
+ }
+ )
+ )
+ 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):
- r = WoopraNode().render(Context({'user': User(username='test')}))
+ r = WoopraNode().render(Context({"user": User(username="test")}))
self.assertTrue('var woo_visitor = {"name": "test"};' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_no_identify_when_explicit_name(self):
- r = WoopraNode().render(Context({
- 'woopra_name': 'explicit',
- 'user': User(username='implicit'),
- }))
+ r = WoopraNode().render(
+ Context(
+ {
+ "woopra_name": "explicit",
+ "user": User(username="implicit"),
+ }
+ )
+ )
self.assertTrue('var woo_visitor = {"name": "explicit"};' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_no_identify_when_explicit_email(self):
- r = WoopraNode().render(Context({
- 'woopra_email': 'explicit',
- 'user': User(username='implicit'),
- }))
+ r = WoopraNode().render(
+ Context(
+ {
+ "woopra_email": "explicit",
+ "user": User(username="implicit"),
+ }
+ )
+ )
self.assertTrue('var woo_visitor = {"email": "explicit"};' in r, r)
@override_settings(ANALYTICAL_AUTO_IDENTIFY=True)
def test_identify_anonymous_user(self):
- r = WoopraNode().render(Context({'user': AnonymousUser()}))
- self.assertTrue('var woo_visitor = {};' in r, r)
+ r = WoopraNode().render(Context({"user": AnonymousUser()}))
+ self.assertTrue("var woo_visitor = {};" in r, r)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = WoopraNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(r.startswith(""), r)
diff --git a/tests/unit/test_tag_yandex_metrica.py b/tests/unit/test_tag_yandex_metrica.py
index 3b0619e..f06a33a 100644
--- a/tests/unit/test_tag_yandex_metrica.py
+++ b/tests/unit/test_tag_yandex_metrica.py
@@ -6,20 +6,20 @@ Tests for the Yandex.Metrica template tags and filters.
from django.http import HttpRequest
from django.template import Context
from django.test.utils import override_settings
+from utils import TagTestCase
from analytical.templatetags.yandex_metrica import YandexMetricaNode
-from utils import TagTestCase
from analytical.utils import AnalyticalException
-@override_settings(YANDEX_METRICA_COUNTER_ID='12345678')
+@override_settings(YANDEX_METRICA_COUNTER_ID="12345678")
class YandexMetricaTagTestCase(TagTestCase):
"""
Tests for the ``yandex_metrica`` template tag.
"""
def test_tag(self):
- r = self.render_tag('yandex_metrica', 'yandex_metrica')
+ r = self.render_tag("yandex_metrica", "yandex_metrica")
self.assertTrue("w.yaCounter12345678 = new Ya.Metrika" in r, r)
def test_node(self):
@@ -30,16 +30,17 @@ class YandexMetricaTagTestCase(TagTestCase):
def test_no_site_id(self):
self.assertRaises(AnalyticalException, YandexMetricaNode)
- @override_settings(YANDEX_METRICA_COUNTER_ID='1234abcd')
+ @override_settings(YANDEX_METRICA_COUNTER_ID="1234abcd")
def test_wrong_site_id(self):
self.assertRaises(AnalyticalException, YandexMetricaNode)
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
r = YandexMetricaNode().render(context)
- self.assertTrue(r.startswith(
- ''), r)
+ self.assertTrue(
+ r.startswith(""), r)
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index 22b2a88..6dbe158 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -8,6 +8,7 @@ from django.db import models
from django.http import HttpRequest
from django.template import Context
from django.test.utils import override_settings
+from utils import TestCase
from analytical.utils import (
AnalyticalException,
@@ -16,54 +17,54 @@ from analytical.utils import (
get_required_setting,
is_internal_ip,
)
-from utils import TestCase
class SettingDeletedTestCase(TestCase):
-
@override_settings(USER_ID=None)
def test_get_required_setting(self):
"""
Make sure using get_required_setting fails in the right place.
"""
- with self.assertRaisesRegex(AnalyticalException, "^USER_ID setting is not set$"):
+ with self.assertRaisesRegex(
+ AnalyticalException, "^USER_ID setting is not set$"
+ ):
get_required_setting("USER_ID", r"\d+", "invalid USER_ID")
class MyUser(AbstractBaseUser):
identity = models.CharField(max_length=50)
- USERNAME_FIELD = 'identity'
+ USERNAME_FIELD = "identity"
class Meta:
abstract = True
- app_label = 'testapp'
+ app_label = "testapp"
class GetIdentityTestCase(TestCase):
def test_custom_username_field(self):
- get_id = get_identity(Context({}), user=MyUser(identity='fake_id'))
- self.assertEqual(get_id, 'fake_id')
+ get_id = get_identity(Context({}), user=MyUser(identity="fake_id"))
+ self.assertEqual(get_id, "fake_id")
@override_settings(ANALYTICAL_DOMAIN="example.org")
class GetDomainTestCase(TestCase):
def test_get_service_domain_from_context(self):
- context = Context({'test_domain': 'example.com'})
- self.assertEqual(get_domain(context, 'test'), 'example.com')
+ context = Context({"test_domain": "example.com"})
+ self.assertEqual(get_domain(context, "test"), "example.com")
def test_get_analytical_domain_from_context(self):
- context = Context({'analytical_domain': 'example.com'})
- self.assertEqual(get_domain(context, 'test'), 'example.com')
+ context = Context({"analytical_domain": "example.com"})
+ self.assertEqual(get_domain(context, "test"), "example.com")
@override_settings(TEST_DOMAIN="example.net")
def test_get_service_domain_from_settings(self):
context = Context()
- self.assertEqual(get_domain(context, 'test'), 'example.net')
+ self.assertEqual(get_domain(context, "test"), "example.net")
def test_get_analytical_domain_from_settings(self):
context = Context()
- self.assertEqual(get_domain(context, 'test'), 'example.org')
+ self.assertEqual(get_domain(context, "test"), "example.org")
# FIXME: enable Django apps dynamically and enable test again
@@ -78,51 +79,50 @@ class GetDomainTestCase(TestCase):
class InternalIpTestCase(TestCase):
-
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @override_settings(ANALYTICAL_INTERNAL_IPS=["1.1.1.1"])
def test_render_no_internal_ip(self):
context = Context()
self.assertFalse(is_internal_ip(context))
- @override_settings(INTERNAL_IPS=['1.1.1.1'])
+ @override_settings(INTERNAL_IPS=["1.1.1.1"])
@override_settings(ANALYTICAL_INTERNAL_IPS=[])
def test_render_analytical_internal_ips_override_when_empty(self):
req = HttpRequest()
- req.META['REMOTE_ADDR'] = '1.1.1.1'
- context = Context({'request': req})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
self.assertFalse(is_internal_ip(context))
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @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})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
self.assertTrue(is_internal_ip(context))
- @override_settings(TEST_INTERNAL_IPS=['1.1.1.1'])
+ @override_settings(TEST_INTERNAL_IPS=["1.1.1.1"])
def test_render_prefix_internal_ip(self):
req = HttpRequest()
- req.META['REMOTE_ADDR'] = '1.1.1.1'
- context = Context({'request': req})
- self.assertTrue(is_internal_ip(context, 'TEST'))
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
+ self.assertTrue(is_internal_ip(context, "TEST"))
- @override_settings(INTERNAL_IPS=['1.1.1.1'])
+ @override_settings(INTERNAL_IPS=["1.1.1.1"])
def test_render_internal_ip_fallback(self):
req = HttpRequest()
- req.META['REMOTE_ADDR'] = '1.1.1.1'
- context = Context({'request': req})
+ req.META["REMOTE_ADDR"] = "1.1.1.1"
+ context = Context({"request": req})
self.assertTrue(is_internal_ip(context))
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @override_settings(ANALYTICAL_INTERNAL_IPS=["1.1.1.1"])
def test_render_internal_ip_forwarded_for(self):
req = HttpRequest()
- req.META['HTTP_X_FORWARDED_FOR'] = '1.1.1.1'
- context = Context({'request': req})
+ req.META["HTTP_X_FORWARDED_FOR"] = "1.1.1.1"
+ context = Context({"request": req})
self.assertTrue(is_internal_ip(context))
- @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1'])
+ @override_settings(ANALYTICAL_INTERNAL_IPS=["1.1.1.1"])
def test_render_different_internal_ip(self):
req = HttpRequest()
- req.META['REMOTE_ADDR'] = '2.2.2.2'
- context = Context({'request': req})
+ req.META["REMOTE_ADDR"] = "2.2.2.2"
+ context = Context({"request": req})
self.assertFalse(is_internal_ip(context))
diff --git a/tests/unit/utils.py b/tests/unit/utils.py
index 75fc6fa..6008e08 100644
--- a/tests/unit/utils.py
+++ b/tests/unit/utils.py
@@ -2,7 +2,7 @@
Testing utilities.
"""
-from django.template import Template, Context, RequestContext
+from django.template import Context, RequestContext, Template
from django.test.testcases import TestCase
diff --git a/tox.ini b/tox.ini
index 850352f..e019db2 100644
--- a/tox.ini
+++ b/tox.ini
@@ -2,7 +2,7 @@
envlist =
# Python/Django combinations that are officially supported
py{36,37,38,39}-django{22,30,31}
- py37-{flake8,bandit,readme,docs}
+ py37-{lint,bandit,readme,docs}
[testenv]
description = Unit tests
@@ -36,10 +36,17 @@ deps = sphinx
commands = sphinx-build -b html -d docs/_build/doctrees docs docs/_build/html
whitelist_externals = make
-[testenv:py37-flake8]
+[testenv:py37-lint]
description = Static code analysis and code style
-deps = flake8
-commands = flake8
+skip_install = True
+deps =
+ flake8
+ isort
+ black
+commands =
+ flake8
+ isort tests setup.py analytical --check --diff
+ black tests setup.py analytical --check
[testenv:py37-readme]
description = Ensure README renders on PyPI