test_generic.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from datetime import datetime
  2. from django.contrib.sitemaps import GenericSitemap
  3. from django.test import ignore_warnings, override_settings
  4. from django.utils.deprecation import RemovedInDjango50Warning
  5. from .base import SitemapTestsBase
  6. from .models import TestModel
  7. @override_settings(ABSOLUTE_URL_OVERRIDES={})
  8. class GenericViewsSitemapTests(SitemapTestsBase):
  9. def test_generic_sitemap_attributes(self):
  10. datetime_value = datetime.now()
  11. queryset = TestModel.objects.all()
  12. generic_sitemap = GenericSitemap(
  13. info_dict={
  14. "queryset": queryset,
  15. "date_field": datetime_value,
  16. },
  17. priority=0.6,
  18. changefreq="monthly",
  19. protocol="https",
  20. )
  21. attr_values = (
  22. ("date_field", datetime_value),
  23. ("priority", 0.6),
  24. ("changefreq", "monthly"),
  25. ("protocol", "https"),
  26. )
  27. for attr_name, expected_value in attr_values:
  28. with self.subTest(attr_name=attr_name):
  29. self.assertEqual(getattr(generic_sitemap, attr_name), expected_value)
  30. self.assertCountEqual(generic_sitemap.queryset, queryset)
  31. def test_generic_sitemap(self):
  32. "A minimal generic sitemap can be rendered"
  33. response = self.client.get("/generic/sitemap.xml")
  34. expected = ""
  35. for pk in TestModel.objects.values_list("id", flat=True):
  36. expected += "<url><loc>%s/testmodel/%s/</loc></url>" % (self.base_url, pk)
  37. expected_content = (
  38. '<?xml version="1.0" encoding="UTF-8"?>\n'
  39. '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" '
  40. 'xmlns:xhtml="http://www.w3.org/1999/xhtml">\n'
  41. "%s\n"
  42. "</urlset>"
  43. ) % expected
  44. self.assertXMLEqual(response.content.decode(), expected_content)
  45. def test_generic_sitemap_lastmod(self):
  46. test_model = TestModel.objects.first()
  47. TestModel.objects.update(lastmod=datetime(2013, 3, 13, 10, 0, 0))
  48. response = self.client.get("/generic-lastmod/sitemap.xml")
  49. expected_content = (
  50. '<?xml version="1.0" encoding="UTF-8"?>\n'
  51. '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" '
  52. 'xmlns:xhtml="http://www.w3.org/1999/xhtml">\n'
  53. "<url><loc>%s/testmodel/%s/</loc><lastmod>2013-03-13</lastmod></url>\n"
  54. "</urlset>"
  55. ) % (
  56. self.base_url,
  57. test_model.pk,
  58. )
  59. self.assertXMLEqual(response.content.decode(), expected_content)
  60. self.assertEqual(
  61. response.headers["Last-Modified"], "Wed, 13 Mar 2013 10:00:00 GMT"
  62. )
  63. def test_get_protocol_defined_in_constructor(self):
  64. for protocol in ["http", "https"]:
  65. with self.subTest(protocol=protocol):
  66. sitemap = GenericSitemap({"queryset": None}, protocol=protocol)
  67. self.assertEqual(sitemap.get_protocol(), protocol)
  68. def test_get_protocol_passed_as_argument(self):
  69. sitemap = GenericSitemap({"queryset": None})
  70. for protocol in ["http", "https"]:
  71. with self.subTest(protocol=protocol):
  72. self.assertEqual(sitemap.get_protocol(protocol), protocol)
  73. @ignore_warnings(category=RemovedInDjango50Warning)
  74. def test_get_protocol_default(self):
  75. sitemap = GenericSitemap({"queryset": None})
  76. self.assertEqual(sitemap.get_protocol(), "http")
  77. def test_get_protocol_default_warning(self):
  78. sitemap = GenericSitemap({"queryset": None})
  79. msg = (
  80. "The default sitemap protocol will be changed from 'http' to "
  81. "'https' in Django 5.0. Set Sitemap.protocol to silence this "
  82. "warning."
  83. )
  84. with self.assertWarnsMessage(RemovedInDjango50Warning, msg):
  85. sitemap.get_protocol()
  86. def test_generic_sitemap_index(self):
  87. TestModel.objects.update(lastmod=datetime(2013, 3, 13, 10, 0, 0))
  88. response = self.client.get("/generic-lastmod/index.xml")
  89. expected_content = """<?xml version="1.0" encoding="UTF-8"?>
  90. <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  91. <sitemap><loc>http://example.com/simple/sitemap-generic.xml</loc><lastmod>2013-03-13T10:00:00</lastmod></sitemap>
  92. </sitemapindex>"""
  93. self.assertXMLEqual(response.content.decode("utf-8"), expected_content)