diff --git a/analytical/templatetags/chartbeat.py b/analytical/templatetags/chartbeat.py index 0689c68..0e60ab9 100644 --- a/analytical/templatetags/chartbeat.py +++ b/analytical/templatetags/chartbeat.py @@ -100,9 +100,14 @@ def contribute_to_analytical(add_node): def _get_domain(context): domain = context.get(DOMAIN_CONTEXT_KEY) - if domain is None and getattr(settings, 'CHARTBEAT_AUTO_DOMAIN', True): - try: - domain = Site.objects.get_current().domain - except (ImproperlyConfigured, Site.DoesNotExist): #pylint: disable=E1101 - pass - return domain + + if domain is not None: + return domain + else: + if 'django.contrib.sites' not in settings.INSTALLED_APPS: + return + elif getattr(settings, 'CHARTBEAT_AUTO_DOMAIN', True): + try: + return Site.objects.get_current().domain + except (ImproperlyConfigured, Site.DoesNotExist): #pylint: disable=E1101 + return diff --git a/analytical/tests/test_tag_chartbeat.py b/analytical/tests/test_tag_chartbeat.py index c3d44f5..8588a82 100644 --- a/analytical/tests/test_tag_chartbeat.py +++ b/analytical/tests/test_tag_chartbeat.py @@ -8,6 +8,7 @@ from django.conf import settings from django.contrib.sites.models import Site from django.http import HttpRequest from django.template import Context +from django.test import TestCase from analytical.templatetags.chartbeat import ChartbeatTopNode, \ ChartbeatBottomNode @@ -17,23 +18,41 @@ from analytical.utils import AnalyticalException @without_apps('django.contrib.sites') -class ChartbeatTagTestCaseNoSites(TagTestCase): +@override_settings(CHARTBEAT_USER_ID='12345') +class ChartbeatTagTestCaseNoSites(TestCase): def test_rendering_setup_no_site(self): r = ChartbeatBottomNode().render(Context()) self.assertTrue('var _sf_async_config={"uid": "12345"};' in r, r) @with_apps('django.contrib.sites') -class ChartbeatTagTestCaseWithSites(TagTestCase): +@override_settings(CHARTBEAT_USER_ID='12345') +class ChartbeatTagTestCaseWithSites(TestCase): + def setUp(self): + from django.core.management import call_command + from django.db.models import loading + loading.cache.loaded = False + call_command("syncdb", verbosity=0) + def test_rendering_setup_site(self): site = Site.objects.create(domain="test.com", name="test") - with override_settings(SITE_ID=site.id, CHARTBEAT_USER_ID="12345"): + with override_settings(SITE_ID=site.id): r = ChartbeatBottomNode().render(Context()) self.assertTrue(re.search( 'var _sf_async_config={.*"uid": "12345".*};', r), r) self.assertTrue(re.search( 'var _sf_async_config={.*"domain": "test.com".*};', r), r) + @override_settings(CHARTBEAT_AUTO_DOMAIN=False) + def test_auto_domain_false(self): + """ + Even if 'django.contrib.sites' is in INSTALLED_APPS, if + CHARTBEAT_AUTO_DOMAIN is False, ensure there is no 'domain' + in _sf_async_config. + """ + r = ChartbeatBottomNode().render(Context()) + self.assertTrue('var _sf_async_config={"uid": "12345"};' in r, r) + @override_settings(CHARTBEAT_USER_ID='12345') class ChartbeatTagTestCase(TagTestCase): diff --git a/analytical/tests/test_tag_clicky.py b/analytical/tests/test_tag_clicky.py index 905bbd4..b929405 100644 --- a/analytical/tests/test_tag_clicky.py +++ b/analytical/tests/test_tag_clicky.py @@ -9,19 +9,16 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.clicky import ClickyNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(CLICKY_SITE_ID='12345678') class ClickyTagTestCase(TagTestCase): """ Tests for the ``clicky`` template tag. """ - def setUp(self): - super(ClickyTagTestCase, self).setUp() - self.settings_manager.set(CLICKY_SITE_ID='12345678') - def test_tag(self): r = self.render_tag('clicky', 'clicky') self.assertTrue('clicky_site_ids.push(12345678);' in r, r) @@ -34,16 +31,16 @@ class ClickyTagTestCase(TagTestCase): self.assertTrue('src="//in.getclicky.com/12345678ns.gif"' in r, r) + @override_settings(CLICKY_SITE_ID=SETTING_DELETED) def test_no_site_id(self): - self.settings_manager.delete('CLICKY_SITE_ID') self.assertRaises(AnalyticalException, ClickyNode) + @override_settings(CLICKY_SITE_ID='123abc') def test_wrong_site_id(self): - self.settings_manager.set(CLICKY_SITE_ID='123abc') self.assertRaises(AnalyticalException, ClickyNode) + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) r = ClickyNode().render(Context({'user': User(username='test')})) self.assertTrue( 'var clicky_custom = {"session": {"username": "test"}};' in r, @@ -55,8 +52,8 @@ class ClickyTagTestCase(TagTestCase): self.assertTrue(re.search('var clicky_custom = {.*' '"var1": "val1", "var2": "val2".*};', r), r) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_crazy_egg.py b/analytical/tests/test_tag_crazy_egg.py index d0fb35c..f1f696a 100644 --- a/analytical/tests/test_tag_crazy_egg.py +++ b/analytical/tests/test_tag_crazy_egg.py @@ -6,19 +6,16 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.crazy_egg import CrazyEggNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(CRAZY_EGG_ACCOUNT_NUMBER='12345678') class CrazyEggTagTestCase(TagTestCase): """ Tests for the ``crazy_egg`` template tag. """ - def setUp(self): - super(CrazyEggTagTestCase, self).setUp() - self.settings_manager.set(CRAZY_EGG_ACCOUNT_NUMBER='12345678') - def test_tag(self): r = self.render_tag('crazy_egg', 'crazy_egg') self.assertTrue('/1234/5678.js' in r, r) @@ -27,12 +24,12 @@ class CrazyEggTagTestCase(TagTestCase): r = CrazyEggNode().render(Context()) self.assertTrue('/1234/5678.js' in r, r) + @override_settings(CRAZY_EGG_ACCOUNT_NUMBER=SETTING_DELETED) def test_no_account_number(self): - self.settings_manager.delete('CRAZY_EGG_ACCOUNT_NUMBER') self.assertRaises(AnalyticalException, CrazyEggNode) + @override_settings(CRAZY_EGG_ACCOUNT_NUMBER='123abc') def test_wrong_account_number(self): - self.settings_manager.set(CRAZY_EGG_ACCOUNT_NUMBER='123abc') self.assertRaises(AnalyticalException, CrazyEggNode) def test_uservars(self): @@ -41,8 +38,8 @@ class CrazyEggTagTestCase(TagTestCase): self.assertTrue("CE2.set(1, 'foo');" in r, r) self.assertTrue("CE2.set(2, 'bar');" in r, r) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_google_analytics.py b/analytical/tests/test_tag_google_analytics.py index 1165f23..477a08b 100644 --- a/analytical/tests/test_tag_google_analytics.py +++ b/analytical/tests/test_tag_google_analytics.py @@ -6,19 +6,16 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.google_analytics import GoogleAnalyticsNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7') class GoogleAnalyticsTagTestCase(TagTestCase): """ Tests for the ``google_analytics`` template tag. """ - def setUp(self): - super(GoogleAnalyticsTagTestCase, self).setUp() - self.settings_manager.set(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7') - def test_tag(self): r = self.render_tag('google_analytics', 'google_analytics') self.assertTrue("_gaq.push(['_setAccount', 'UA-123456-7']);" in r, r) @@ -29,12 +26,12 @@ class GoogleAnalyticsTagTestCase(TagTestCase): self.assertTrue("_gaq.push(['_setAccount', 'UA-123456-7']);" in r, r) self.assertTrue("_gaq.push(['_trackPageview']);" in r, r) + @override_settings(GOOGLE_ANALYTICS_PROPERTY_ID=SETTING_DELETED) def test_no_property_id(self): - self.settings_manager.delete('GOOGLE_ANALYTICS_PROPERTY_ID') self.assertRaises(AnalyticalException, GoogleAnalyticsNode) + @override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='wrong') def test_wrong_property_id(self): - self.settings_manager.set(GOOGLE_ANALYTICS_PROPERTY_ID='wrong') self.assertRaises(AnalyticalException, GoogleAnalyticsNode) def test_custom_vars(self): @@ -46,8 +43,8 @@ class GoogleAnalyticsTagTestCase(TagTestCase): self.assertTrue("_gaq.push(['_setCustomVar', 5, 'test2', 'bar', 1]);" in r, r) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_gosquared.py b/analytical/tests/test_tag_gosquared.py index 1a56df1..37fe2f8 100644 --- a/analytical/tests/test_tag_gosquared.py +++ b/analytical/tests/test_tag_gosquared.py @@ -7,19 +7,17 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.gosquared import GoSquaredNode -from analytical.tests.utils import TagTestCase +from analytical.tests import override_settings +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(GOSQUARED_SITE_TOKEN='ABC-123456-D') class GoSquaredTagTestCase(TagTestCase): """ Tests for the ``gosquared`` template tag. """ - def setUp(self): - super(GoSquaredTagTestCase, self).setUp() - self.settings_manager.set(GOSQUARED_SITE_TOKEN='ABC-123456-D') - def test_tag(self): r = self.render_tag('gosquared', 'gosquared') self.assertTrue('GoSquared.acct = "ABC-123456-D";' in r, r) @@ -28,30 +26,30 @@ class GoSquaredTagTestCase(TagTestCase): r = GoSquaredNode().render(Context({})) self.assertTrue('GoSquared.acct = "ABC-123456-D";' in r, r) + @override_settings(GOSQUARED_SITE_TOKEN=SETTING_DELETED) def test_no_token(self): - self.settings_manager.delete('GOSQUARED_SITE_TOKEN') self.assertRaises(AnalyticalException, GoSquaredNode) + @override_settings(GOSQUARED_SITE_TOKEN='this is not a token') def test_wrong_token(self): - self.settings_manager.set(GOSQUARED_SITE_TOKEN='this is not a token') self.assertRaises(AnalyticalException, GoSquaredNode) + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_auto_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) 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): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) 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_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_hubspot.py b/analytical/tests/test_tag_hubspot.py index 2db461a..043999e 100644 --- a/analytical/tests/test_tag_hubspot.py +++ b/analytical/tests/test_tag_hubspot.py @@ -6,20 +6,16 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.hubspot import HubSpotNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(HUBSPOT_PORTAL_ID='1234', HUBSPOT_DOMAIN='example.com') class HubSpotTagTestCase(TagTestCase): """ Tests for the ``hubspot`` template tag. """ - def setUp(self): - super(HubSpotTagTestCase, self).setUp() - self.settings_manager.set(HUBSPOT_PORTAL_ID='1234') - self.settings_manager.set(HUBSPOT_DOMAIN='example.com') - def test_tag(self): r = self.render_tag('hubspot', 'hubspot') self.assertTrue('var hs_portalid = 1234;' in r, r) @@ -30,24 +26,24 @@ class HubSpotTagTestCase(TagTestCase): self.assertTrue('var hs_portalid = 1234;' in r, r) self.assertTrue('var hs_ppa = "example.com";' in r, r) + @override_settings(HUBSPOT_PORTAL_ID=SETTING_DELETED) def test_no_portal_id(self): - self.settings_manager.delete('HUBSPOT_PORTAL_ID') self.assertRaises(AnalyticalException, HubSpotNode) + @override_settings(HUBSPOT_PORTAL_ID='wrong') def test_wrong_portal_id(self): - self.settings_manager.set(HUBSPOT_PORTAL_ID='wrong') self.assertRaises(AnalyticalException, HubSpotNode) + @override_settings(HUBSPOT_DOMAIN=SETTING_DELETED) def test_no_domain(self): - self.settings_manager.delete('HUBSPOT_DOMAIN') self.assertRaises(AnalyticalException, HubSpotNode) + @override_settings(HUBSPOT_DOMAIN='wrong domain') def test_wrong_domain(self): - self.settings_manager.set(HUBSPOT_DOMAIN='wrong domain') self.assertRaises(AnalyticalException, HubSpotNode) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_kiss_insights.py b/analytical/tests/test_tag_kiss_insights.py index 56b5eea..7d2888d 100644 --- a/analytical/tests/test_tag_kiss_insights.py +++ b/analytical/tests/test_tag_kiss_insights.py @@ -6,20 +6,17 @@ from django.contrib.auth.models import User from django.template import Context from analytical.templatetags.kiss_insights import KissInsightsNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER='12345', + KISS_INSIGHTS_SITE_CODE='abc') class KissInsightsTagTestCase(TagTestCase): """ Tests for the ``kiss_insights`` template tag. """ - def setUp(self): - super(KissInsightsTagTestCase, self).setUp() - self.settings_manager.set(KISS_INSIGHTS_ACCOUNT_NUMBER='12345') - self.settings_manager.set(KISS_INSIGHTS_SITE_CODE='abc') - def test_tag(self): r = self.render_tag('kiss_insights', 'kiss_insights') self.assertTrue("//s3.amazonaws.com/ki.js/12345/abc.js" in r, r) @@ -28,24 +25,24 @@ class KissInsightsTagTestCase(TagTestCase): r = KissInsightsNode().render(Context()) self.assertTrue("//s3.amazonaws.com/ki.js/12345/abc.js" in r, r) + @override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER=SETTING_DELETED) def test_no_account_number(self): - self.settings_manager.delete('KISS_INSIGHTS_ACCOUNT_NUMBER') self.assertRaises(AnalyticalException, KissInsightsNode) + @override_settings(KISS_INSIGHTS_SITE_CODE=SETTING_DELETED) def test_no_site_code(self): - self.settings_manager.delete('KISS_INSIGHTS_SITE_CODE') self.assertRaises(AnalyticalException, KissInsightsNode) + @override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER='abcde') def test_wrong_account_number(self): - self.settings_manager.set(KISS_INSIGHTS_ACCOUNT_NUMBER='abcde') self.assertRaises(AnalyticalException, KissInsightsNode) + @override_settings(KISS_INSIGHTS_SITE_CODE='abc def') def test_wrong_site_id(self): - self.settings_manager.set(KISS_INSIGHTS_SITE_CODE='abc def') self.assertRaises(AnalyticalException, KissInsightsNode) + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) r = KissInsightsNode().render(Context({'user': User(username='test')})) self.assertTrue("_kiq.push(['identify', 'test']);" in r, r) diff --git a/analytical/tests/test_tag_kiss_metrics.py b/analytical/tests/test_tag_kiss_metrics.py index 2c6d3a6..dea96e0 100644 --- a/analytical/tests/test_tag_kiss_metrics.py +++ b/analytical/tests/test_tag_kiss_metrics.py @@ -7,20 +7,17 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.kiss_metrics import KissMetricsNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef' + '01234567') class KissMetricsTagTestCase(TagTestCase): """ Tests for the ``kiss_metrics`` template tag. """ - def setUp(self): - super(KissMetricsTagTestCase, self).setUp() - self.settings_manager.set(KISS_METRICS_API_KEY='0123456789abcdef012345' - '6789abcdef01234567') - def test_tag(self): r = self.render_tag('kiss_metrics', 'kiss_metrics') self.assertTrue("//doug1izaerwt3.cloudfront.net/0123456789abcdef012345" @@ -31,20 +28,22 @@ class KissMetricsTagTestCase(TagTestCase): self.assertTrue("//doug1izaerwt3.cloudfront.net/0123456789abcdef012345" "6789abcdef01234567.1.js" in r, r) + @override_settings(KISS_METRICS_API_KEY=SETTING_DELETED) def test_no_api_key(self): - self.settings_manager.delete('KISS_METRICS_API_KEY') self.assertRaises(AnalyticalException, KissMetricsNode) - def test_wrong_api_key(self): - self.settings_manager.set(KISS_METRICS_API_KEY='0123456789abcdef012345' - '6789abcdef0123456') - self.assertRaises(AnalyticalException, KissMetricsNode) - self.settings_manager.set(KISS_METRICS_API_KEY='0123456789abcdef012345' - '6789abcdef012345678') + @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef' + '0123456') + def test_api_key_too_short(self): self.assertRaises(AnalyticalException, KissMetricsNode) + @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef' + '012345678') + def test_api_key_too_long(self): + self.assertRaises(AnalyticalException, KissMetricsNode) + + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) r = KissMetricsNode().render(Context({'user': User(username='test')})) self.assertTrue("_kmq.push(['identify', 'test']);" in r, r) @@ -54,8 +53,8 @@ class KissMetricsTagTestCase(TagTestCase): self.assertTrue("_kmq.push(['record', 'test_event', " '{"prop1": "val1", "prop2": "val2"}]);' in r, r) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_mixpanel.py b/analytical/tests/test_tag_mixpanel.py index 92f958f..2683855 100644 --- a/analytical/tests/test_tag_mixpanel.py +++ b/analytical/tests/test_tag_mixpanel.py @@ -7,21 +7,16 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.mixpanel import MixpanelNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(MIXPANEL_API_TOKEN='0123456789abcdef0123456789abcdef') class MixpanelTagTestCase(TagTestCase): """ Tests for the ``mixpanel`` template tag. """ - def setUp(self): - super(MixpanelTagTestCase, self).setUp() - self.settings_manager.set(OPTIMIZELY_ACCOUNT_NUMBER='1234567') - self.settings_manager.set( - MIXPANEL_API_TOKEN='0123456789abcdef0123456789abcdef') - def test_tag(self): r = self.render_tag('mixpanel', 'mixpanel') self.assertTrue( @@ -34,20 +29,20 @@ class MixpanelTagTestCase(TagTestCase): "mpq.push(['init', '0123456789abcdef0123456789abcdef']);" in r, r) + @override_settings(MIXPANEL_API_TOKEN=SETTING_DELETED) def test_no_token(self): - self.settings_manager.delete('MIXPANEL_API_TOKEN') self.assertRaises(AnalyticalException, MixpanelNode) - def test_wrong_token(self): - self.settings_manager.set( - MIXPANEL_API_TOKEN='0123456789abcdef0123456789abcde') - self.assertRaises(AnalyticalException, MixpanelNode) - self.settings_manager.set( - MIXPANEL_API_TOKEN='0123456789abcdef0123456789abcdef0') + @override_settings(MIXPANEL_API_TOKEN='0123456789abcdef0123456789abcdef0') + def test_token_too_long(self): self.assertRaises(AnalyticalException, MixpanelNode) + @override_settings(MIXPANEL_API_TOKEN='0123456789abcdef0123456789abcde') + def test_token_too_short(self): + self.assertRaises(AnalyticalException, MixpanelNode) + + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) r = MixpanelNode().render(Context({'user': User(username='test')})) self.assertTrue("mpq.push(['identify', 'test']);" in r, r) @@ -57,8 +52,8 @@ class MixpanelTagTestCase(TagTestCase): self.assertTrue("mpq.push(['track', 'test_event', " '{"prop1": "val1", "prop2": "val2"}]);' in r, r) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_olark.py b/analytical/tests/test_tag_olark.py index 3eada5c..48661e3 100644 --- a/analytical/tests/test_tag_olark.py +++ b/analytical/tests/test_tag_olark.py @@ -6,19 +6,16 @@ from django.contrib.auth.models import User from django.template import Context from analytical.templatetags.olark import OlarkNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(OLARK_SITE_ID='1234-567-89-0123') class OlarkTestCase(TagTestCase): """ Tests for the ``olark`` template tag. """ - def setUp(self): - super(OlarkTestCase, self).setUp() - self.settings_manager.set(OLARK_SITE_ID='1234-567-89-0123') - def test_tag(self): r = self.render_tag('olark', 'olark') self.assertTrue("olark.identify('1234-567-89-0123');" in r, r) @@ -27,16 +24,16 @@ class OlarkTestCase(TagTestCase): r = OlarkNode().render(Context()) self.assertTrue("olark.identify('1234-567-89-0123');" in r, r) + @override_settings(OLARK_SITE_ID=SETTING_DELETED) def test_no_site_id(self): - self.settings_manager.delete('OLARK_SITE_ID') self.assertRaises(AnalyticalException, OlarkNode) + @override_settings(OLARK_SITE_ID='1234-567-8901234') def test_wrong_site_id(self): - self.settings_manager.set(OLARK_SITE_ID='1234-567-8901234') self.assertRaises(AnalyticalException, OlarkNode) + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) r = OlarkNode().render(Context({'user': User(username='test', first_name='Test', last_name='User')})) self.assertTrue("olark('api.chat.updateVisitorNickname', " diff --git a/analytical/tests/test_tag_optimizely.py b/analytical/tests/test_tag_optimizely.py index 5a105fa..412eb46 100644 --- a/analytical/tests/test_tag_optimizely.py +++ b/analytical/tests/test_tag_optimizely.py @@ -6,19 +6,16 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.optimizely import OptimizelyNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException +@override_settings(OPTIMIZELY_ACCOUNT_NUMBER='1234567') class OptimizelyTagTestCase(TagTestCase): """ Tests for the ``optimizely`` template tag. """ - def setUp(self): - super(OptimizelyTagTestCase, self).setUp() - self.settings_manager.set(OPTIMIZELY_ACCOUNT_NUMBER='1234567') - def test_tag(self): self.assertEqual( '', @@ -29,16 +26,16 @@ class OptimizelyTagTestCase(TagTestCase): '', OptimizelyNode().render(Context())) + @override_settings(OPTIMIZELY_ACCOUNT_NUMBER=SETTING_DELETED) def test_no_account_number(self): - self.settings_manager.delete('OPTIMIZELY_ACCOUNT_NUMBER') self.assertRaises(AnalyticalException, OptimizelyNode) + @override_settings(OPTIMIZELY_ACCOUNT_NUMBER='123abc') def test_wrong_account_number(self): - self.settings_manager.set(OPTIMIZELY_ACCOUNT_NUMBER='123abc') self.assertRaises(AnalyticalException, OptimizelyNode) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) diff --git a/analytical/tests/test_tag_performable.py b/analytical/tests/test_tag_performable.py index b0b7523..8b1192e 100644 --- a/analytical/tests/test_tag_performable.py +++ b/analytical/tests/test_tag_performable.py @@ -6,20 +6,17 @@ from django.http import HttpRequest from django.template import Context from analytical.templatetags.performable import PerformableNode -from analytical.tests.utils import TagTestCase +from analytical.tests.utils import TagTestCase, override_settings, SETTING_DELETED from analytical.utils import AnalyticalException from django.contrib.auth.models import User +@override_settings(PERFORMABLE_API_KEY='123ABC') class PerformableTagTestCase(TagTestCase): """ Tests for the ``performable`` template tag. """ - def setUp(self): - super(PerformableTagTestCase, self).setUp() - self.settings_manager.set(PERFORMABLE_API_KEY='123ABC') - def test_tag(self): r = self.render_tag('performable', 'performable') self.assertTrue('/performable/pax/123ABC.js' in r, r) @@ -28,16 +25,16 @@ class PerformableTagTestCase(TagTestCase): r = PerformableNode().render(Context()) self.assertTrue('/performable/pax/123ABC.js' in r, r) + @override_settings(PERFORMABLE_API_KEY=SETTING_DELETED) def test_no_api_key(self): - self.settings_manager.delete('PERFORMABLE_API_KEY') self.assertRaises(AnalyticalException, PerformableNode) + @override_settings(PERFORMABLE_API_KEY='123 ABC') def test_wrong_account_number(self): - self.settings_manager.set(PERFORMABLE_API_KEY='123 ABC') self.assertRaises(AnalyticalException, PerformableNode) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) @@ -46,8 +43,8 @@ class PerformableTagTestCase(TagTestCase): ''), r) + @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - self.settings_manager.set(ANALYTICAL_AUTO_IDENTIFY=True) r = PerformableNode().render(Context({'user': User(username='test')})) self.assertTrue('_paq.push(["identify", {identity: "test"}]);' in r, r) @@ -58,10 +55,10 @@ class PerformableEmbedTagTestCase(TagTestCase): """ def test_tag(self): - d = 'example.com' - p = 'test' + domain = 'example.com' + page = 'test' r = self.render_tag('performable', 'performable_embed "%s" "%s"' - % (d, p)) + % (domain, page)) self.assertTrue( "$f.initialize({'host': 'example.com', 'page': 'test'});" in r, r) diff --git a/analytical/tests/test_tag_woopra.py b/analytical/tests/test_tag_woopra.py index 763f9fa..97dc960 100644 --- a/analytical/tests/test_tag_woopra.py +++ b/analytical/tests/test_tag_woopra.py @@ -18,9 +18,6 @@ class WoopraTagTestCase(TagTestCase): Tests for the ``woopra`` template tag. """ - def setUp(self): - super(WoopraTagTestCase, self).setUp() - def test_tag(self): r = self.render_tag('woopra', 'woopra') self.assertTrue('var woo_settings = {"domain": "example.com"};' in r, r) diff --git a/analytical/tests/test_utils.py b/analytical/tests/test_utils.py index 909cb9c..4f4aaf8 100644 --- a/analytical/tests/test_utils.py +++ b/analytical/tests/test_utils.py @@ -6,45 +6,46 @@ from django.http import HttpRequest from django.template import Context from analytical.utils import is_internal_ip -from analytical.tests.utils import TestCase +from analytical.tests.utils import TestCase, override_settings class InternalIpTestCase(TestCase): + + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_no_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) context = Context() self.assertFalse(is_internal_ip(context)) + @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() 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']) def test_render_prefix_internal_ip(self): - self.settings_manager.set(TEST_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() 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']) def test_render_internal_ip_fallback(self): - self.settings_manager.set(INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() 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']) def test_render_internal_ip_forwarded_for(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() 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']) def test_render_different_internal_ip(self): - self.settings_manager.set(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) req = HttpRequest() req.META['REMOTE_ADDR'] = '2.2.2.2' context = Context({'request': req}) diff --git a/analytical/tests/utils.py b/analytical/tests/utils.py index f239f29..d09b73b 100644 --- a/analytical/tests/utils.py +++ b/analytical/tests/utils.py @@ -3,23 +3,23 @@ Testing utilities. """ from __future__ import with_statement + from django.conf import settings, UserSettingsHolder from django.core.management import call_command from django.db.models import loading from django.template import Template, Context, RequestContext -from django.test.simple import run_tests as django_run_tests from django.test.testcases import TestCase from django.utils.functional import wraps -SETTING_DELETED = object() - - class DeletedSettingDescriptor(object): def __get__(self, instance, owner): raise AttributeError("attribute not set") +SETTING_DELETED = DeletedSettingDescriptor() + +# Backported adapted from Django trunk (r16377) class override_settings(object): """ Temporarily override Django settings. @@ -28,8 +28,6 @@ class override_settings(object): takes a function and returns a wrapped function. If it's a contextmanager it's used with the ``with`` statement. In either event entering/exiting are called before and after, respectively, the function/block is executed. - - Via: http://djangosnippets.org/snippets/2437/ """ def __init__(self, **kwargs): self.options = kwargs @@ -41,31 +39,40 @@ class override_settings(object): def __exit__(self, exc_type, exc_value, traceback): self.disable() - def __call__(self, func): - @wraps(func) - def inner(*args, **kwargs): - with self: - return func(*args, **kwargs) + def __call__(self, test_func): + from django.test import TestCase + if isinstance(test_func, type) and issubclass(test_func, TestCase): + class inner(test_func): + def _pre_setup(innerself): + self.enable() + super(inner, innerself)._pre_setup() + def _post_teardown(innerself): + super(inner, innerself)._post_teardown() + self.disable() + else: + @wraps(test_func) + def inner(*args, **kwargs): + with self: + return test_func(*args, **kwargs) return inner def enable(self): override = UserSettingsHolder(settings._wrapped) for key, new_value in self.options.items(): - if new_value is SETTING_DELETED: - setattr(override, key, DeletedSettingDescriptor()) - else: - setattr(override, key, new_value) + setattr(override, key, new_value) settings._wrapped = override def disable(self): settings._wrapped = self.wrapped -def run_tests(labels=()): +def run_tests(): """ Use the Django test runner to run the tests. """ - django_run_tests(labels, verbosity=1, interactive=True) + from django.test.simple import DjangoTestSuiteRunner + runner = DjangoTestSuiteRunner(verbosity=2) + runner.run_tests(None) def with_apps(*apps):