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