From b418e3bbede645219f738e8529025c1e9e82d9b3 Mon Sep 17 00:00:00 2001 From: Eric Holscher Date: Wed, 6 Apr 2016 16:19:43 -0700 Subject: [PATCH] Test integration --- readthedocs/donate/signals.py | 62 ++++++++++++++++++++--------------- readthedocs/donate/tests.py | 22 +++++++++++-- 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/readthedocs/donate/signals.py b/readthedocs/donate/signals.py index 50c6b05c0..15989b35b 100644 --- a/readthedocs/donate/signals.py +++ b/readthedocs/donate/signals.py @@ -28,6 +28,35 @@ def show_to_geo(promo, country_code): return True +def get_promo(country_code, gold_project=False, gold_user=False): + promo_queryset = SupporterPromo.objects.filter(live=True, display_type='doc').order_by('?') + + for obj in promo_queryset: + if country_code: + if show_to_geo(obj, country_code): + promo_obj = obj + break + else: + # TODO: House Ad + promo_obj = None + + # Support showing a "Thank you" message for gold folks + if gold_user: + gold_promo = SupporterPromo.objects.filter(live=True, + name='gold-user') + if gold_promo.exists(): + promo_obj = gold_promo.first() + + # Default to showing project-level thanks if it exists + if gold_project: + gold_promo = SupporterPromo.objects.filter(live=True, + name='gold-project') + if gold_promo.exists(): + promo_obj = gold_promo.first() + + return promo_obj + + @receiver(footer_response) def attach_promo_data(sender, **kwargs): request = kwargs['request'] @@ -43,7 +72,7 @@ def attach_promo_data(sender, **kwargs): return gold_user = gold_project = False - promo_obj = None + promo_obj = country_code = None show_promo = project.allow_promos @@ -61,8 +90,6 @@ def attach_promo_data(sender, **kwargs): if gold_user or gold_project: show_promo = False - country_code = None - if PROMO_GEO_PATH: # Get geo information from the IP, but don't record it anywhere ip = request.META.get('REMOTE_ADDR') @@ -72,30 +99,11 @@ def attach_promo_data(sender, **kwargs): # Try to get a promo if we should be using one. if show_promo: - promo_queryset = SupporterPromo.objects.filter(live=True, display_type='doc').order_by('?') - - for obj in promo_queryset: - if country_code: - if show_to_geo(obj, country_code): - promo_obj = obj - break - else: - # TODO: House Ad - promo_obj = None - - # Support showing a "Thank you" message for gold folks - if gold_user: - gold_promo = SupporterPromo.objects.filter(live=True, - name='gold-user') - if gold_promo.exists(): - promo_obj = gold_promo.first() - - # Default to showing project-level thanks if it exists - if gold_project: - gold_promo = SupporterPromo.objects.filter(live=True, - name='gold-project') - if gold_promo.exists(): - promo_obj = gold_promo.first() + promo_obj = get_promo( + country_code=country_code, + gold_project=gold_project, + gold_user=gold_user, + ) # If we don't have anything to show, don't show it. if not promo_obj: diff --git a/readthedocs/donate/tests.py b/readthedocs/donate/tests.py index dd48498f8..c1f5ec6ee 100644 --- a/readthedocs/donate/tests.py +++ b/readthedocs/donate/tests.py @@ -4,12 +4,12 @@ from django.test import TestCase from django.core.urlresolvers import reverse from django.core.cache import cache -from django_dynamic_fixture import get, fixture +from django_dynamic_fixture import get from .models import (SupporterPromo, GeoFilter, Country, CLICKS, VIEWS, OFFERS, INCLUDE, EXCLUDE) -from .signals import show_to_geo +from .signals import show_to_geo, get_promo from readthedocs.projects.models import Project @@ -192,6 +192,7 @@ class FilterTests(TestCase): self.promo = get(SupporterPromo, slug='promo-slug', link='http://example.com', + live=True, image='http://media.example.com/img.png') self.filter = get(GeoFilter, promo=self.promo, @@ -203,6 +204,7 @@ class FilterTests(TestCase): self.promo2 = get(SupporterPromo, slug='promo2-slug', link='http://example.com', + live=True, image='http://media.example.com/img.png') self.filter2 = get(GeoFilter, promo=self.promo2, @@ -235,3 +237,19 @@ class FilterTests(TestCase): ret2 = show_to_geo(self.promo2, 'FO') self.assertEqual(ret2, True) + + def test_get_promo(self): + ret = get_promo('US') + self.assertTrue(ret in [self.promo, self.promo2]) + + ret = get_promo('MX') + self.assertTrue(ret in [self.promo, self.promo2]) + + ret = get_promo('FO') + self.assertEqual(ret, self.promo2) + + ret = get_promo('AZ') + self.assertEqual(ret, None) + + ret = get_promo('RANDOM') + self.assertEqual(ret, self.promo2)