1
1
import copy
2
2
3
+ from django .db .models import QuerySet
4
+
3
5
from cms .api import create_page , create_page_content
4
6
from cms .models import PageUrl
5
7
from cms .sitemaps import CMSSitemap
9
11
10
12
protocol = "http" if DJANGO_4_2 else "https"
11
13
14
+
12
15
class SitemapTestCase (CMSTestCase ):
13
16
def setUp (self ):
14
17
"""
@@ -27,41 +30,41 @@ def setUp(self):
27
30
+ P8 (de, en)
28
31
"""
29
32
defaults = {
30
- ' template' : ' nav_playground.html' ,
31
- ' language' : 'en' ,
33
+ " template" : " nav_playground.html" ,
34
+ " language" : "en" ,
32
35
}
33
36
with self .settings (CMS_PERMISSION = False ):
34
- p1 = create_page ('P1' , in_navigation = True , ** defaults )
35
- create_page_content (language = 'de' , title = "other title %s" % p1 .get_title ('en' ), page = p1 )
37
+ p1 = create_page ("P1" , in_navigation = True , ** defaults )
38
+ create_page_content (language = "de" , title = "other title %s" % p1 .get_title ("en" ), page = p1 )
36
39
37
- p4 = create_page ('P4' , in_navigation = True , ** defaults )
38
- create_page_content (language = 'de' , title = "other title %s" % p4 .get_title ('en' ), page = p4 )
40
+ p4 = create_page ("P4" , in_navigation = True , ** defaults )
41
+ create_page_content (language = "de" , title = "other title %s" % p4 .get_title ("en" ), page = p4 )
39
42
40
- p6 = create_page ('P6' , in_navigation = False , ** defaults )
41
- create_page_content (language = 'de' , title = "other title %s" % p6 .get_title ('en' ), page = p6 )
43
+ p6 = create_page ("P6" , in_navigation = False , ** defaults )
44
+ create_page_content (language = "de" , title = "other title %s" % p6 .get_title ("en" ), page = p6 )
42
45
43
- p2 = create_page ('P2' , in_navigation = True , parent = p1 , ** defaults )
44
- create_page_content (language = 'de' , title = "other title %s" % p2 .get_title ('en' ), page = p2 )
46
+ p2 = create_page ("P2" , in_navigation = True , parent = p1 , ** defaults )
47
+ create_page_content (language = "de" , title = "other title %s" % p2 .get_title ("en" ), page = p2 )
45
48
46
- p3 = create_page ('P3' , in_navigation = True , parent = p2 , ** defaults )
47
- create_page_content (language = 'de' , title = "other title %s" % p3 .get_title ('en' ), page = p3 )
49
+ p3 = create_page ("P3" , in_navigation = True , parent = p2 , ** defaults )
50
+ create_page_content (language = "de" , title = "other title %s" % p3 .get_title ("en" ), page = p3 )
48
51
49
- p5 = create_page ('P5' , in_navigation = True , parent = p4 , ** defaults )
50
- create_page_content (language = 'de' , title = "other title %s" % p5 .get_title ('en' ), page = p5 )
52
+ p5 = create_page ("P5" , in_navigation = True , parent = p4 , ** defaults )
53
+ create_page_content (language = "de" , title = "other title %s" % p5 .get_title ("en" ), page = p5 )
51
54
52
- p7 = create_page ('P7' , in_navigation = True , parent = p6 , ** defaults )
53
- create_page_content (language = 'de' , title = "other title %s" % p7 .get_title ('en' ), page = p7 )
55
+ p7 = create_page ("P7" , in_navigation = True , parent = p6 , ** defaults )
56
+ create_page_content (language = "de" , title = "other title %s" % p7 .get_title ("en" ), page = p7 )
54
57
55
- p8 = create_page ('P8' , in_navigation = True , parent = p6 , ** defaults )
56
- create_page_content (language = 'de' , title = "other title %s" % p8 .get_title ('en' ), page = p8 )
58
+ p8 = create_page ("P8" , in_navigation = True , parent = p6 , ** defaults )
59
+ create_page_content (language = "de" , title = "other title %s" % p8 .get_title ("en" ), page = p8 )
57
60
58
- p9 = create_page ('P9' , in_navigation = True , parent = p1 , ** defaults )
59
- create_page_content (language = 'de' , title = "other title %s" % p9 .get_title ('en' ), page = p9 )
61
+ p9 = create_page ("P9" , in_navigation = True , parent = p1 , ** defaults )
62
+ create_page_content (language = "de" , title = "other title %s" % p9 .get_title ("en" ), page = p9 )
60
63
61
- p10 = create_page (' P10' , in_navigation = True , parent = p9 , ** defaults )
62
- create_page_content (language = 'de' , title = "other title %s" % p10 .get_title ('en' ), page = p10 )
64
+ p10 = create_page (" P10" , in_navigation = True , parent = p9 , ** defaults )
65
+ create_page_content (language = "de" , title = "other title %s" % p10 .get_title ("en" ), page = p10 )
63
66
64
- create_page (' P11' , in_navigation = True , parent = p9 , ** defaults )
67
+ create_page (" P11" , in_navigation = True , parent = p9 , ** defaults )
65
68
66
69
def test_sitemap_count (self ):
67
70
"""
@@ -79,11 +82,11 @@ def test_sitemap_items_location(self):
79
82
sitemap = CMSSitemap ()
80
83
urlset = sitemap .get_urls ()
81
84
for item in urlset :
82
- if item [' item' ].path :
85
+ if item [" item" ].path :
83
86
url = f'{ protocol } ://example.com/{ item ["item" ].language } /{ item ["item" ].path } /'
84
87
else :
85
88
url = f'{ protocol } ://example.com/{ item ["item" ].language } /'
86
- self .assertEqual (item [' location' ], url )
89
+ self .assertEqual (item [" location" ], url )
87
90
88
91
def test_sitemap_urls (self ):
89
92
"""
@@ -93,28 +96,36 @@ def test_sitemap_urls(self):
93
96
locations = []
94
97
urlset = sitemap .get_urls ()
95
98
for item in urlset :
96
- locations .append (item [' location' ])
99
+ locations .append (item [" location" ])
97
100
for page_url in PageUrl .objects .all ():
98
101
if page_url .path :
99
- url = f' { protocol } ://example.com/{ page_url .language } /{ page_url .path } /'
102
+ url = f" { protocol } ://example.com/{ page_url .language } /{ page_url .path } /"
100
103
else :
101
- url = f' { protocol } ://example.com/{ page_url .language } /'
104
+ url = f" { protocol } ://example.com/{ page_url .language } /"
102
105
self .assertTrue (url in locations )
103
106
104
107
def test_sitemap_uses_public_languages_only (self ):
105
108
"""
106
109
Pages on the sitemap should only show public languages.
107
110
"""
108
- lang_settings = copy .deepcopy (get_cms_setting (' LANGUAGES' ))
111
+ lang_settings = copy .deepcopy (get_cms_setting (" LANGUAGES" ))
109
112
# sanity check
110
- assert lang_settings [1 ][1 ][' code' ] == 'de'
113
+ assert lang_settings [1 ][1 ][" code" ] == "de"
111
114
# set german as private
112
- lang_settings [1 ][1 ][' public' ] = False
115
+ lang_settings [1 ][1 ][" public" ] = False
113
116
114
117
with self .settings (CMS_LANGUAGES = lang_settings ):
115
118
for item in CMSSitemap ().get_urls ():
116
- url = f'{ protocol } ://example.com/en/'
119
+ url = f"{ protocol } ://example.com/en/"
120
+
121
+ if item ["item" ].path :
122
+ url += item ["item" ].path + "/"
123
+ self .assertEqual (item ["location" ], url )
117
124
118
- if item ['item' ].path :
119
- url += item ['item' ].path + '/'
120
- self .assertEqual (item ['location' ], url )
125
+ def test_sitemap_items_type (self ):
126
+ """
127
+ Ensure that CMSSitemap.items() returns a QuerySet, not a list.
128
+ """
129
+ sitemap = CMSSitemap ()
130
+ items = sitemap .items ()
131
+ self .assertIsInstance (items , QuerySet , "CMSSitemap.items() must return a QuerySet." )
0 commit comments