mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Refs #25916 -- Added tests for a callable lastmod on Sitemaps.
This commit is contained in:
		
				
					committed by
					
						 Carlton Gibson
						Carlton Gibson
					
				
			
			
				
	
			
			
			
						parent
						
							94beb679a6
						
					
				
				
					commit
					f345c9fb3e
				
			| @@ -352,3 +352,48 @@ class HTTPSitemapTests(SitemapTestsBase): | ||||
|  | ||||
| </urlset>""" | ||||
|         self.assertXMLEqual(response.content.decode(), expected_content) | ||||
|  | ||||
|     def test_callable_sitemod_partial(self): | ||||
|         """ | ||||
|         Not all items have `lastmod`. Therefore the `Last-Modified` header | ||||
|         is not set by the detail sitemap view. | ||||
|         """ | ||||
|         index_response = self.client.get('/callable-lastmod-partial/index.xml') | ||||
|         sitemap_response = self.client.get('/callable-lastmod-partial/sitemap.xml') | ||||
|         self.assertNotIn('Last-Modified', index_response) | ||||
|         self.assertNotIn('Last-Modified', sitemap_response) | ||||
|         expected_content_index = """<?xml version="1.0" encoding="UTF-8"?> | ||||
|         <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> | ||||
|         <sitemap><loc>http://example.com/simple/sitemap-callable-lastmod.xml</loc></sitemap> | ||||
|         </sitemapindex> | ||||
|         """ | ||||
|         expected_content_sitemap = """<?xml version="1.0" encoding="UTF-8"?> | ||||
|         <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> | ||||
|         <url><loc>http://example.com/location/</loc><lastmod>2013-03-13</lastmod></url><url><loc>http://example.com/location/</loc></url> | ||||
|         </urlset> | ||||
|         """ | ||||
|         self.assertXMLEqual(index_response.content.decode(), expected_content_index) | ||||
|         self.assertXMLEqual(sitemap_response.content.decode(), expected_content_sitemap) | ||||
|  | ||||
|     def test_callable_sitemod_full(self): | ||||
|         """ | ||||
|         All items in the sitemap have `lastmod`. The `Last-Modified` header | ||||
|         is set for the detail sitemap view. The index view does not (currently) | ||||
|         set the `Last-Modified` header. | ||||
|         """ | ||||
|         index_response = self.client.get('/callable-lastmod-full/index.xml') | ||||
|         sitemap_response = self.client.get('/callable-lastmod-full/sitemap.xml') | ||||
|         self.assertNotIn('Last-Modified', index_response) | ||||
|         self.assertEqual(sitemap_response.headers['Last-Modified'], 'Thu, 13 Mar 2014 10:00:00 GMT') | ||||
|         expected_content_index = """<?xml version="1.0" encoding="UTF-8"?> | ||||
|         <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> | ||||
|         <sitemap><loc>http://example.com/simple/sitemap-callable-lastmod.xml</loc></sitemap> | ||||
|         </sitemapindex> | ||||
|         """ | ||||
|         expected_content_sitemap = """<?xml version="1.0" encoding="UTF-8"?> | ||||
|         <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> | ||||
|         <url><loc>http://example.com/location/</loc><lastmod>2013-03-13</lastmod></url><url><loc>http://example.com/location/</loc><lastmod>2014-03-13</lastmod></url> | ||||
|         </urlset> | ||||
|         """ | ||||
|         self.assertXMLEqual(index_response.content.decode(), expected_content_index) | ||||
|         self.assertXMLEqual(sitemap_response.content.decode(), expected_content_sitemap) | ||||
|   | ||||
| @@ -81,6 +81,35 @@ class TimezoneSiteMap(SimpleSitemap): | ||||
|     lastmod = datetime(2013, 3, 13, 10, 0, 0, tzinfo=timezone.get_fixed_timezone(-300)) | ||||
|  | ||||
|  | ||||
| class CallableLastmodPartialSitemap(Sitemap): | ||||
|     """Not all items have `lastmod`.""" | ||||
|     location = '/location/' | ||||
|  | ||||
|     def items(self): | ||||
|         o1 = TestModel() | ||||
|         o1.lastmod = datetime(2013, 3, 13, 10, 0, 0) | ||||
|         o2 = TestModel() | ||||
|         return [o1, o2] | ||||
|  | ||||
|     def lastmod(self, obj): | ||||
|         return obj.lastmod | ||||
|  | ||||
|  | ||||
| class CallableLastmodFullSitemap(Sitemap): | ||||
|     """All items have `lastmod`.""" | ||||
|     location = '/location/' | ||||
|  | ||||
|     def items(self): | ||||
|         o1 = TestModel() | ||||
|         o1.lastmod = datetime(2013, 3, 13, 10, 0, 0) | ||||
|         o2 = TestModel() | ||||
|         o2.lastmod = datetime(2014, 3, 13, 10, 0, 0) | ||||
|         return [o1, o2] | ||||
|  | ||||
|     def lastmod(self, obj): | ||||
|         return obj.lastmod | ||||
|  | ||||
|  | ||||
| def testmodelview(request, id): | ||||
|     return HttpResponse() | ||||
|  | ||||
| @@ -158,6 +187,14 @@ generic_sitemaps_lastmod = { | ||||
|     }), | ||||
| } | ||||
|  | ||||
| callable_lastmod_partial_sitemap = { | ||||
|     'callable-lastmod': CallableLastmodPartialSitemap, | ||||
| } | ||||
|  | ||||
| callable_lastmod_full_sitemap = { | ||||
|     'callable-lastmod': CallableLastmodFullSitemap, | ||||
| } | ||||
|  | ||||
| urlpatterns = [ | ||||
|     path('simple/index.xml', views.index, {'sitemaps': simple_sitemaps}), | ||||
|     path('simple-paged/index.xml', views.index, {'sitemaps': simple_sitemaps_paged}), | ||||
| @@ -246,6 +283,10 @@ urlpatterns = [ | ||||
|     path( | ||||
|         'sitemap-without-entries/sitemap.xml', views.sitemap, | ||||
|         {'sitemaps': {}}, name='django.contrib.sitemaps.views.sitemap'), | ||||
|     path('callable-lastmod-partial/index.xml', views.index, {'sitemaps': callable_lastmod_partial_sitemap}), | ||||
|     path('callable-lastmod-partial/sitemap.xml', views.sitemap, {'sitemaps': callable_lastmod_partial_sitemap}), | ||||
|     path('callable-lastmod-full/index.xml', views.index, {'sitemaps': callable_lastmod_full_sitemap}), | ||||
|     path('callable-lastmod-full/sitemap.xml', views.sitemap, {'sitemaps': callable_lastmod_full_sitemap}), | ||||
| ] | ||||
|  | ||||
| urlpatterns += i18n_patterns( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user