123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- from django.test import TestCase
- from django.test.client import Client
- from django.core.handlers.wsgi import WSGIRequest
- from django.core.urlresolvers import reverse
- from adzone.models import *
- from django.contrib.auth.models import User
- def datenow():
- from datetime import datetime
- return datetime.now()
- class RequestFactory(Client):
- """
- Class that lets you create mock Request objects for use in testing.
-
- Usage:
-
- rf = RequestFactory()
- get_request = rf.get('/hello/')
- post_request = rf.post('/submit/', {'foo': 'bar'})
-
- This class re-uses the django.test.client.Client interface, docs here:
- http://www.djangoproject.com/documentation/testing/#the-test-client
-
- Once you have a request object you can pass it to any view function,
- just as if that view had been hooked up using a URLconf.
-
- """
- def request(self, **request):
- """
- Similar to parent class, but returns the request object as soon as it
- has created it.
- """
- environ = {
- "HTTP_COOKIE": self.cookies,
- "PATH_INFO": "/",
- "QUERY_STRING": "",
- "REQUEST_METHOD": "GET",
- "SCRIPT_NAME": "",
- "SERVER_NAME": "testserver",
- "SERVER_PORT": 80,
- "SERVER_PROTOCOL": "HTTP/1.1",
- "REMOTE_ADDR": "127.0.0.1",
- }
- environ.update(self.defaults)
- environ.update(request)
- return WSGIRequest(environ)
- class AdvertisingTestCase(TestCase):
- def setUp(self):
- self.request = RequestFactory().request()
- self.user = User.objects.create_user("test", "test@example.com", "testpass")
- self.advertiser = Advertiser.objects.create(
- company_name="teh_node Web Development",
- website="http://andre.smoenux.webfactional.com/",
- user=self.user,
- )
- # Categories setup
- self.category = AdCategory.objects.create(
- title="Internet Services",
- slug="internet-services",
- description="All internet based services",
- )
- self.category2 = AdCategory.objects.create(
- title="Category Two", slug="categorytwo", description="A Second Category"
- )
- # Zones setup
- self.adzone = AdZone.objects.create(
- title="Sidebar", slug="sidebar", description="Side Bar Ads"
- )
- self.adzone2 = AdZone.objects.create(
- title="Content Banner", slug="contentbanner", description="Content Adverts"
- )
- # Ad setup
- self.ad = TextAd.objects.create(
- title="First Ad",
- content="For all your web design and development needs, at competitive rates.",
- url="http://www.teh-node.co.za/",
- enabled=True,
- advertiser=self.advertiser,
- category=self.category,
- zone=self.adzone,
- )
- self.ad2 = TextAd.objects.create(
- title="Second Ad",
- content="A second advert.",
- url="http://www.teh-node.co.za/",
- enabled=True,
- advertiser=self.advertiser,
- category=self.category2,
- zone=self.adzone2,
- )
- self.ad3 = TextAd.objects.create(
- title="A Third Ad",
- content="A third advert.",
- url="http://www.teh-node.co.za/",
- enabled=True,
- advertiser=self.advertiser,
- category=self.category2,
- zone=self.adzone2,
- )
- # AdImpression Setup
- self.impression1 = AdImpression.objects.create(
- impression_date=datenow(), source_ip="127.0.0.2", ad=self.ad
- )
- self.impression2 = AdImpression.objects.create(
- impression_date=datenow(), source_ip="127.0.0.3", ad=self.ad2
- )
- # Clicks Setup
- self.adclick1 = AdClick.objects.create(
- click_date=datenow(), source_ip="127.0.0.1", ad=self.ad
- )
- class AdvertiserTestCase(AdvertisingTestCase):
- def testAdvertiser(self):
- self.assertEquals(
- self.advertiser.get_website_url(), "http://andre.smoenux.webfactional.com/"
- )
- class CategoryTestCase(AdvertisingTestCase):
- def testAdCategory(self):
- self.assertEquals(self.category.__unicode__(), "Internet Services")
- class ZoneTestCase(AdvertisingTestCase):
- def testAdZone(self):
- self.assertEquals(self.adzone.__unicode__(), "Sidebar")
- def testAdinZone(self):
- ads = TextAd.objects.filter(zone__slug="sidebar")
- self.assertEquals(len(ads), 1)
- class AdvertTestCase(AdvertisingTestCase):
- def testAd(self):
- self.assertEquals(reverse("adzone_ad_view", args=["1"])[-8:], "/view/1/")
- adimpressions = AdImpression.objects.filter(ad=self.ad)
- self.assertEquals(len(adimpressions), 1)
- self.assertEquals(adimpressions[0].source_ip, "127.0.0.2")
- def testAdAdvertiser(self):
- self.assertEquals(self.ad.advertiser.__unicode__(), "teh_node Web Development")
- self.assertEquals(self.ad.advertiser.company_name, "teh_node Web Development")
- def testAddsInCategory(self):
- ads = TextAd.objects.filter(category__slug="internet-services")
- self.assertEquals(len(ads), 1)
- self.assertEquals(ads[0].title, "First Ad")
- def testRandomAd(self):
- ad = AdBase.objects.get_random_ad(
- ad_category="internet-services", ad_zone="sidebar"
- )
- self.assertEquals(ad.title, "First Ad")
- class ImpressionTestCase(AdvertisingTestCase):
- def testImpression(self):
- impressions = AdImpression.objects.all()
- self.assertEquals(len(impressions), 2)
- class ClickTestCase(AdvertisingTestCase):
- def testClicks(self):
- clicks = AdClick.objects.all()
- self.assertEquals(len(clicks), 1)
- def testClickOnAds(self):
- c = Client(REMOTE_ADDR="127.0.0.1")
- response = c.get(reverse("adzone_ad_view", args=["1"]))
- self.assertEquals(len(AdClick.objects.all()), 2)
- click = AdClick.objects.all()[1]
- self.assertEquals(click.source_ip, "127.0.0.1")
- def testInvalidAdURL(self):
- c = Client(REMOTE_ADDR="127.0.0.1")
- response = c.get("/te/10")
- self.assertEquals(len(AdClick.objects.all()), 1)
|