root/branches/pluggable-contents/common/tests.py

Revision 70, 4.5 kB (checked in by nobu, 6 months ago)

pluggable-contents:

  • 細かい修正。
Line 
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)
Note: See TracBrowser for help on using the browser.