| 1 |
# vim: encoding=utf-8 : |
|---|
| 2 |
|
|---|
| 3 |
from urlparse import urlparse |
|---|
| 4 |
|
|---|
| 5 |
from lxml import etree |
|---|
| 6 |
|
|---|
| 7 |
from django.contrib.sites.models import Site |
|---|
| 8 |
from django.conf import settings |
|---|
| 9 |
from django.test import TestCase |
|---|
| 10 |
|
|---|
| 11 |
from blog.models import Entry |
|---|
| 12 |
from common.models import FlatPage |
|---|
| 13 |
|
|---|
| 14 |
CURRENT_SITE = Site.objects.get_current() |
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
class SimpleTest(TestCase): |
|---|
| 18 |
""" |
|---|
| 19 |
common's test. |
|---|
| 20 |
""" |
|---|
| 21 |
def setUp(self): |
|---|
| 22 |
settings.SUB_CONTENTS = () |
|---|
| 23 |
settings.EXTRA_CONTENTS = () |
|---|
| 24 |
|
|---|
| 25 |
def test_sitemap(self): |
|---|
| 26 |
""" |
|---|
| 27 |
Test sitemap. |
|---|
| 28 |
""" |
|---|
| 29 |
# send request. |
|---|
| 30 |
response = self.client.get('/sitemap.xml') |
|---|
| 31 |
# check status code. |
|---|
| 32 |
self.assertEqual(response.status_code, 200) |
|---|
| 33 |
# check template name(s). |
|---|
| 34 |
self.assertTemplateUsed(response, 'sitemap.xml') |
|---|
| 35 |
# check content type. |
|---|
| 36 |
self.assertTrue(response.has_header('Content-type')) |
|---|
| 37 |
self.assertEqual(response['Content-type'], u'text/xml; charset=utf-8') |
|---|
| 38 |
# check objects. |
|---|
| 39 |
self.assertTrue(response.context.has_key('entries')) |
|---|
| 40 |
self.assertTrue(response.context.has_key('flatpages')) |
|---|
| 41 |
entries = response.context['entries'] |
|---|
| 42 |
flatpages = response.context['flatpages'] |
|---|
| 43 |
checked_entries = Entry.objects.filter(is_published__exact=True)\ |
|---|
| 44 |
.filter(is_active__exact=True)\ |
|---|
| 45 |
.order_by('-updated_at') |
|---|
| 46 |
checked_flatpages = FlatPage.objects.filter(is_published__exact=True)\ |
|---|
| 47 |
.filter(is_active__exact=True)\ |
|---|
| 48 |
.order_by('-updated_at') |
|---|
| 49 |
self.assertEqual([e.id for e in entries], [c.id for c in checked_entries]) |
|---|
| 50 |
self.assertEqual([e.id for e in flatpages], [c.id for c in checked_flatpages]) |
|---|
| 51 |
# check content. |
|---|
| 52 |
namespaces = {'n':'http://www.google.com/schemas/sitemap/0.84'} |
|---|
| 53 |
xml = etree.fromstring(response.content, parser=etree.XMLParser()) |
|---|
| 54 |
checked_length = checked_entries.count() + checked_flatpages.count() + 1 |
|---|
| 55 |
self.assertEqual(len(xml.xpath('/n:urlset/n:url', namespaces=namespaces)), |
|---|
| 56 |
checked_length) |
|---|
| 57 |
|
|---|
| 58 |
|
|---|
| 59 |
def test_flatpages(self): |
|---|
| 60 |
""" |
|---|
| 61 |
Test flatpages. |
|---|
| 62 |
""" |
|---|
| 63 |
# send request (not exist). |
|---|
| 64 |
response = self.client.get('/notexist/') |
|---|
| 65 |
# check status code. |
|---|
| 66 |
self.assertEqual(response.status_code, 404) |
|---|
| 67 |
# send request (exist). |
|---|
| 68 |
response = self.client.get('/about/') |
|---|
| 69 |
# check status code. |
|---|
| 70 |
self.assertEqual(response.status_code, 200) |
|---|
| 71 |
# check template name(s). |
|---|
| 72 |
for template_name in (u'flatpages/default.html', u'base.html'): |
|---|
| 73 |
self.assertTemplateUsed(response, template_name) |
|---|
| 74 |
checked = FlatPage.objects.filter(url__exact='/about/')\ |
|---|
| 75 |
.filter(is_published__exact=True)\ |
|---|
| 76 |
.get(is_active__exact=True) |
|---|
| 77 |
# parse conetnt. |
|---|
| 78 |
html = etree.fromstring(response.content, parser=etree.HTMLParser()) |
|---|
| 79 |
# check title. |
|---|
| 80 |
self.assertEqual(html.xpath('//head/title/text()')[0], |
|---|
| 81 |
u'%s - %s' % (checked.title, CURRENT_SITE.name)) |
|---|
| 82 |
|
|---|
| 83 |
# check context |
|---|
| 84 |
context = response.context[-1] |
|---|
| 85 |
self.assertTrue(context.has_key('obj')) |
|---|
| 86 |
self.assertEqual(context['obj'], checked) |
|---|
| 87 |
# send request (not published) |
|---|
| 88 |
response = self.client.get('/notpublished/') |
|---|
| 89 |
# check status code. |
|---|
| 90 |
self.assertEqual(response.status_code, 404) |
|---|
| 91 |
# log in |
|---|
| 92 |
self.assertTrue(self.client.login(username='tester', password='tester')) |
|---|
| 93 |
# send request (not published) |
|---|
| 94 |
response = self.client.get('/notpublished/') |
|---|
| 95 |
# check status code. |
|---|
| 96 |
self.assertEqual(response.status_code, 200) |
|---|
| 97 |
# check template name(s). |
|---|
| 98 |
for template_name in (u'flatpages/default.html', u'base.html'): |
|---|
| 99 |
self.assertTemplateUsed(response, template_name) |
|---|
| 100 |
checked = FlatPage.objects.filter(url__exact='/notpublished/')\ |
|---|
| 101 |
.filter(is_published__exact=False)\ |
|---|
| 102 |
.get(is_active__exact=True) |
|---|
| 103 |
# parse conetnt. |
|---|
| 104 |
html = etree.fromstring(response.content, parser=etree.HTMLParser()) |
|---|
| 105 |
# check title. |
|---|
| 106 |
self.assertEqual(html.xpath('//head/title/text()')[0], |
|---|
| 107 |
u'%s - %s' % (checked.title, CURRENT_SITE.name)) |
|---|
| 108 |
# check context |
|---|
| 109 |
context = response.context[-1] |
|---|
| 110 |
self.assertTrue(context.has_key('obj')) |
|---|
| 111 |
self.assertEqual(context['obj'], checked) |
|---|