PageRenderTime 34ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/django/contrib/gis/tests/geoapp/test_feeds.py

https://code.google.com/p/mango-py/
Python | 88 lines | 58 code | 18 blank | 12 comment | 6 complexity | 0c0b53f66ac8ac8936fe63b2d18f65d6 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. from xml.dom import minidom
  2. from django.conf import settings
  3. from django.contrib.sites.models import Site
  4. from django.test import TestCase
  5. from models import City
  6. class GeoFeedTest(TestCase):
  7. urls = 'django.contrib.gis.tests.geoapp.urls'
  8. def setUp(self):
  9. Site(id=settings.SITE_ID, domain="example.com", name="example.com").save()
  10. self.old_Site_meta_installed = Site._meta.installed
  11. Site._meta.installed = True
  12. def tearDown(self):
  13. Site._meta.installed = self.old_Site_meta_installed
  14. def assertChildNodes(self, elem, expected):
  15. "Taken from regressiontests/syndication/tests.py."
  16. actual = set([n.nodeName for n in elem.childNodes])
  17. expected = set(expected)
  18. self.assertEqual(actual, expected)
  19. def test_geofeed_rss(self):
  20. "Tests geographic feeds using GeoRSS over RSSv2."
  21. # Uses `GEOSGeometry` in `item_geometry`
  22. doc1 = minidom.parseString(self.client.get('/feeds/rss1/').content)
  23. # Uses a 2-tuple in `item_geometry`
  24. doc2 = minidom.parseString(self.client.get('/feeds/rss2/').content)
  25. feed1, feed2 = doc1.firstChild, doc2.firstChild
  26. # Making sure the box got added to the second GeoRSS feed.
  27. self.assertChildNodes(feed2.getElementsByTagName('channel')[0],
  28. ['title', 'link', 'description', 'language',
  29. 'lastBuildDate', 'item', 'georss:box', 'atom:link']
  30. )
  31. # Incrementing through the feeds.
  32. for feed in [feed1, feed2]:
  33. # Ensuring the georss namespace was added to the <rss> element.
  34. self.assertEqual(feed.getAttribute(u'xmlns:georss'), u'http://www.georss.org/georss')
  35. chan = feed.getElementsByTagName('channel')[0]
  36. items = chan.getElementsByTagName('item')
  37. self.assertEqual(len(items), City.objects.count())
  38. # Ensuring the georss element was added to each item in the feed.
  39. for item in items:
  40. self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'georss:point'])
  41. def test_geofeed_atom(self):
  42. "Testing geographic feeds using GeoRSS over Atom."
  43. doc1 = minidom.parseString(self.client.get('/feeds/atom1/').content)
  44. doc2 = minidom.parseString(self.client.get('/feeds/atom2/').content)
  45. feed1, feed2 = doc1.firstChild, doc2.firstChild
  46. # Making sure the box got added to the second GeoRSS feed.
  47. self.assertChildNodes(feed2, ['title', 'link', 'id', 'updated', 'entry', 'georss:box'])
  48. for feed in [feed1, feed2]:
  49. # Ensuring the georsss namespace was added to the <feed> element.
  50. self.assertEqual(feed.getAttribute(u'xmlns:georss'), u'http://www.georss.org/georss')
  51. entries = feed.getElementsByTagName('entry')
  52. self.assertEqual(len(entries), City.objects.count())
  53. # Ensuring the georss element was added to each entry in the feed.
  54. for entry in entries:
  55. self.assertChildNodes(entry, ['title', 'link', 'id', 'summary', 'georss:point'])
  56. def test_geofeed_w3c(self):
  57. "Testing geographic feeds using W3C Geo."
  58. doc = minidom.parseString(self.client.get('/feeds/w3cgeo1/').content)
  59. feed = doc.firstChild
  60. # Ensuring the geo namespace was added to the <feed> element.
  61. self.assertEqual(feed.getAttribute(u'xmlns:geo'), u'http://www.w3.org/2003/01/geo/wgs84_pos#')
  62. chan = feed.getElementsByTagName('channel')[0]
  63. items = chan.getElementsByTagName('item')
  64. self.assertEqual(len(items), City.objects.count())
  65. # Ensuring the geo:lat and geo:lon element was added to each item in the feed.
  66. for item in items:
  67. self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'geo:lat', 'geo:lon'])
  68. # Boxes and Polygons aren't allowed in W3C Geo feeds.
  69. self.assertRaises(ValueError, self.client.get, '/feeds/w3cgeo2/') # Box in <channel>
  70. self.assertRaises(ValueError, self.client.get, '/feeds/w3cgeo3/') # Polygons in <entry>