@@ -921,15 +921,108 @@ def test_render_menu_with_invalid_language(self):
921
921
language on the current site.
922
922
"""
923
923
# Refs - https://github.com/divio/django-cms/issues/6179
924
- de_site = Site .objects .create (id = 2 , name = 'example-2.com' , domain = 'example-2.com' )
925
- defaults = {
926
- 'site' : de_site ,
924
+ site_2 = Site .objects .create (id = 2 , name = 'example-2.com' , domain = 'example-2.com' )
925
+ de_defaults = {
926
+ 'site' : site_2 ,
927
927
'template' : 'nav_playground.html' ,
928
928
'language' : 'de' ,
929
929
}
930
- create_page ('DE-P1' , published = True , in_navigation = True , ** defaults )
931
- create_page ('DE-P2' , published = True , in_navigation = True , ** defaults )
932
- create_page ('DE-P3' , published = True , in_navigation = True , ** defaults )
930
+ fr_defaults = {
931
+ 'site' : site_2 ,
932
+ 'template' : 'nav_playground.html' ,
933
+ 'language' : 'fr' ,
934
+ }
935
+ create_page ('DE-P1' , published = True , in_navigation = True , ** de_defaults )
936
+ create_page ('DE-P2' , published = True , in_navigation = True , ** de_defaults )
937
+ create_page ('DE-P3' , published = True , in_navigation = True , ** de_defaults )
938
+ create_page ('FR-P1' , published = True , in_navigation = True , ** fr_defaults )
939
+ create_page ('FR-P2' , published = True , in_navigation = True , ** fr_defaults )
940
+
941
+ with self .settings (SITE_ID = 2 ):
942
+ request = self .get_request ('/en/' )
943
+ context = Context ()
944
+ context ['request' ] = request
945
+ tpl = Template ("{% load menu_tags %}{% show_menu 0 100 100 100 %}" )
946
+ tpl .render (context )
947
+ nodes = context ['children' ]
948
+ self .assertEqual (len (nodes ), 5 )
949
+ self .assertEqual (nodes [0 ].title , 'DE-P1' )
950
+ self .assertEqual (nodes [0 ].get_absolute_url (), '/de/de-p1/' )
951
+ self .assertEqual (nodes [1 ].title , 'DE-P2' )
952
+ self .assertEqual (nodes [1 ].get_absolute_url (), '/de/de-p2/' )
953
+ self .assertEqual (nodes [2 ].title , 'DE-P3' )
954
+ self .assertEqual (nodes [2 ].get_absolute_url (), '/de/de-p3/' )
955
+ self .assertEqual (nodes [3 ].title , 'FR-P1' )
956
+ self .assertEqual (nodes [3 ].get_absolute_url (), '/fr/fr-p1/' )
957
+ self .assertEqual (nodes [4 ].title , 'FR-P2' )
958
+ self .assertEqual (nodes [4 ].get_absolute_url (), '/fr/fr-p2/' )
959
+
960
+ menu_pool .clear (site_id = 2 )
961
+
962
+ with self .settings (SITE_ID = 2 ):
963
+ request = self .get_request ('/en/de-p2/' )
964
+ context = Context ()
965
+ context ['request' ] = request
966
+ tpl = Template ("{% load menu_tags %}{% show_menu 0 100 100 100 %}" )
967
+ tpl .render (context )
968
+ nodes = context ['children' ]
969
+ self .assertEqual (len (nodes ), 5 )
970
+ self .assertEqual (nodes [0 ].title , 'DE-P1' )
971
+ self .assertEqual (nodes [0 ].get_absolute_url (), '/de/de-p1/' )
972
+ self .assertEqual (nodes [1 ].title , 'DE-P2' )
973
+ self .assertEqual (nodes [1 ].get_absolute_url (), '/de/de-p2/' )
974
+ self .assertEqual (nodes [2 ].title , 'DE-P3' )
975
+ self .assertEqual (nodes [2 ].get_absolute_url (), '/de/de-p3/' )
976
+ self .assertEqual (nodes [3 ].title , 'FR-P1' )
977
+ self .assertEqual (nodes [3 ].get_absolute_url (), '/fr/fr-p1/' )
978
+ self .assertEqual (nodes [4 ].title , 'FR-P2' )
979
+ self .assertEqual (nodes [4 ].get_absolute_url (), '/fr/fr-p2/' )
980
+
981
+ def test_render_menu_with_invalid_language_and_page (self ):
982
+ """
983
+ This tests an edge-case where the user requests a
984
+ language not configure for the current site
985
+ while having pages on the current site with unconfigured
986
+ translations.
987
+ """
988
+ # Refs - https://github.com/divio/django-cms/issues/6179
989
+ site_2 = Site .objects .create (id = 2 , name = 'example-2.com' , domain = 'example-2.com' )
990
+ de_defaults = {
991
+ 'site' : site_2 ,
992
+ 'template' : 'nav_playground.html' ,
993
+ 'language' : 'de' ,
994
+ 'in_navigation' : True ,
995
+ }
996
+ nl_defaults = {
997
+ 'site' : site_2 ,
998
+ 'template' : 'nav_playground.html' ,
999
+ 'in_navigation' : True ,
1000
+ }
1001
+ create_page ('DE-P1' , published = True , ** de_defaults )
1002
+ create_page ('DE-P2' , published = True , ** de_defaults )
1003
+ create_page ('DE-P3' , published = True , ** de_defaults )
1004
+
1005
+ # The nl language is not configured for the current site
1006
+ # as a result, we have to create the pages manually.
1007
+ nl_page_1 = Page .objects .create (** nl_defaults )
1008
+ nl_page_1 .attach_site (site = site_2 , target = None )
1009
+ nl_page_1 .title_set .create (
1010
+ language = 'nl' ,
1011
+ title = 'NL-P1' ,
1012
+ slug = 'nl-p1' ,
1013
+ )
1014
+ nl_page_1 .publish ('nl' )
1015
+
1016
+ nl_page_2 = Page .objects .create (** nl_defaults )
1017
+ nl_page_2 .attach_site (site = site_2 , target = None )
1018
+ nl_page_2 .title_set .create (
1019
+ language = 'nl' ,
1020
+ title = 'NL-P2' ,
1021
+ slug = 'nl-p2' ,
1022
+ )
1023
+ nl_page_2 .publish ('nl' )
1024
+ create_title ('fr' , 'FR-P2' , nl_page_2 )
1025
+ nl_page_2 .publish ('fr' )
933
1026
934
1027
with self .settings (SITE_ID = 2 ):
935
1028
request = self .get_request ('/en/' )
@@ -938,13 +1031,17 @@ def test_render_menu_with_invalid_language(self):
938
1031
tpl = Template ("{% load menu_tags %}{% show_menu 0 100 100 100 %}" )
939
1032
tpl .render (context )
940
1033
nodes = context ['children' ]
941
- self .assertEqual (len (nodes ), 3 )
1034
+ self .assertEqual (len (nodes ), 4 )
942
1035
self .assertEqual (nodes [0 ].title , 'DE-P1' )
943
1036
self .assertEqual (nodes [0 ].get_absolute_url (), '/de/de-p1/' )
944
1037
self .assertEqual (nodes [1 ].title , 'DE-P2' )
945
1038
self .assertEqual (nodes [1 ].get_absolute_url (), '/de/de-p2/' )
946
1039
self .assertEqual (nodes [2 ].title , 'DE-P3' )
947
1040
self .assertEqual (nodes [2 ].get_absolute_url (), '/de/de-p3/' )
1041
+ self .assertEqual (nodes [3 ].title , 'FR-P2' )
1042
+ self .assertEqual (nodes [3 ].get_absolute_url (), '/fr/fr-p2/' )
1043
+
1044
+ menu_pool .clear (site_id = 2 )
948
1045
949
1046
with self .settings (SITE_ID = 2 ):
950
1047
request = self .get_request ('/en/de-p2/' )
@@ -953,15 +1050,22 @@ def test_render_menu_with_invalid_language(self):
953
1050
tpl = Template ("{% load menu_tags %}{% show_menu 0 100 100 100 %}" )
954
1051
tpl .render (context )
955
1052
nodes = context ['children' ]
956
- self .assertEqual (len (nodes ), 3 )
1053
+ self .assertEqual (len (nodes ), 4 )
957
1054
self .assertEqual (nodes [0 ].title , 'DE-P1' )
958
1055
self .assertEqual (nodes [0 ].get_absolute_url (), '/de/de-p1/' )
959
1056
self .assertEqual (nodes [1 ].title , 'DE-P2' )
960
1057
self .assertEqual (nodes [1 ].get_absolute_url (), '/de/de-p2/' )
961
1058
self .assertEqual (nodes [2 ].title , 'DE-P3' )
962
1059
self .assertEqual (nodes [2 ].get_absolute_url (), '/de/de-p3/' )
1060
+ self .assertEqual (nodes [3 ].title , 'FR-P2' )
1061
+ self .assertEqual (nodes [3 ].get_absolute_url (), '/fr/fr-p2/' )
963
1062
964
1063
def test_render_menu_with_invalid_language_and_no_fallbacks (self ):
1064
+ """
1065
+ The requested language is valid but there's no page
1066
+ with it and the user has disabled all fallbacks.
1067
+ The cms should render only nodes for the requested language.
1068
+ """
965
1069
defaults = {
966
1070
'template' : 'nav_playground.html' ,
967
1071
'language' : 'de' ,
@@ -983,6 +1087,8 @@ def test_render_menu_with_invalid_language_and_no_fallbacks(self):
983
1087
nodes = context ['children' ]
984
1088
self .assertEqual (len (nodes ), 0 )
985
1089
1090
+ menu_pool .clear (site_id = 1 )
1091
+
986
1092
with self .settings (CMS_LANGUAGES = lang_settings ):
987
1093
request = self .get_request ('/en/de-p2/' )
988
1094
context = Context ()
0 commit comments