Test integration

break-out-core-urls-views
Eric Holscher 2016-04-06 16:19:43 -07:00
parent dd8e9bcbcf
commit b418e3bbed
2 changed files with 55 additions and 29 deletions

View File

@ -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:

View File

@ -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)