|
20 | 20 | from cms.appresolver import applications_page_check, clear_app_resolvers, get_app_patterns
|
21 | 21 | from cms.constants import PUBLISHER_STATE_DIRTY
|
22 | 22 | from cms.models import Title, Page
|
| 23 | +from cms.middleware.page import get_page |
23 | 24 | from cms.test_utils.project.placeholderapp.models import Example1
|
24 | 25 | from cms.test_utils.testcases import CMSTestCase
|
25 | 26 | from cms.tests.test_menu_utils import DumbPageLanguageUrl
|
@@ -325,20 +326,33 @@ def test_get_page_for_apphook_on_preview_or_edit(self):
|
325 | 326 |
|
326 | 327 | public_page = page.get_public_object()
|
327 | 328 |
|
| 329 | + with force_language("en"): |
| 330 | + path = reverse('sample-settings') |
| 331 | + request = self.get_request(path) |
| 332 | + request.LANGUAGE_CODE = 'en' |
| 333 | + attached_to_page = applications_page_check(request, path=path[1:]) # strip leading slash |
| 334 | + self.assertEqual(attached_to_page.pk, public_page.pk) |
| 335 | + |
| 336 | + with force_language("de"): |
| 337 | + path = reverse('sample-settings') |
| 338 | + request = self.get_request(path) |
| 339 | + request.LANGUAGE_CODE = 'de' |
| 340 | + attached_to_page = applications_page_check(request, path=path[1:]) # strip leading slash |
| 341 | + self.assertEqual(attached_to_page.pk, public_page.pk) |
| 342 | + |
328 | 343 | with self.login_user_context(superuser):
|
329 | 344 | with force_language("en"):
|
330 | 345 | path = reverse('sample-settings')
|
331 | 346 | request = self.get_request(path + '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
|
332 | 347 | request.LANGUAGE_CODE = 'en'
|
333 | 348 | attached_to_page = applications_page_check(request, path=path[1:]) # strip leading slash
|
334 |
| - response = self.client.get(path+"?edit") |
335 |
| - self.assertContains(response, '?redirect=') |
| 349 | + self.assertEqual(attached_to_page.pk, page.pk) |
336 | 350 | with force_language("de"):
|
337 | 351 | path = reverse('sample-settings')
|
338 | 352 | request = self.get_request(path + '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
|
339 | 353 | request.LANGUAGE_CODE = 'de'
|
340 | 354 | attached_to_page = applications_page_check(request, path=path[1:]) # strip leading slash
|
341 |
| - self.assertEqual(attached_to_page.pk, public_page.pk) |
| 355 | + self.assertEqual(attached_to_page.pk, page.pk) |
342 | 356 |
|
343 | 357 | @override_settings(ROOT_URLCONF='cms.test_utils.project.second_urls_for_apphook_tests')
|
344 | 358 | def test_get_root_page_for_apphook_with_instance_namespace(self):
|
@@ -869,6 +883,85 @@ def test_get_menus(self):
|
869 | 883 |
|
870 | 884 | self.apphook_clear()
|
871 | 885 |
|
| 886 | + @override_settings( |
| 887 | + CMS_APPHOOKS=['cms.test_utils.project.sampleapp.cms_apps.AppWithNoMenu'], |
| 888 | + ) |
| 889 | + def test_menu_node_is_selected_on_app_root(self): |
| 890 | + """ |
| 891 | + If a user requests a page with an apphook, |
| 892 | + the menu should mark the node for that page as selected. |
| 893 | + """ |
| 894 | + defaults = { |
| 895 | + 'language': 'en', |
| 896 | + 'published': True, |
| 897 | + 'in_navigation': True, |
| 898 | + 'template': 'nav_playground.html', |
| 899 | + } |
| 900 | + homepage = create_page('EN-P1', **defaults) |
| 901 | + homepage.set_as_homepage() |
| 902 | + app_root = create_page('EN-P2', apphook='AppWithNoMenu', apphook_namespace='app_with_no_menu', **defaults) |
| 903 | + |
| 904 | + # Public version |
| 905 | + request = self.get_request(self.get_edit_on_url('/en/en-p2/')) |
| 906 | + request.current_page = get_page(request) |
| 907 | + menu_nodes = menu_pool.get_renderer(request).get_nodes() |
| 908 | + self.assertEqual(len(menu_nodes), 2) |
| 909 | + self.assertEqual(menu_nodes[0].id, homepage.publisher_public_id) |
| 910 | + self.assertEqual(menu_nodes[0].selected, False) |
| 911 | + self.assertEqual(menu_nodes[1].id, app_root.publisher_public_id) |
| 912 | + self.assertEqual(menu_nodes[1].selected, True) |
| 913 | + |
| 914 | + # Draft version |
| 915 | + with self.login_user_context(self.get_superuser()): |
| 916 | + request = self.get_request(self.get_edit_on_url('/en/en-p2/')) |
| 917 | + request.current_page = get_page(request) |
| 918 | + menu_nodes = menu_pool.get_renderer(request).get_nodes() |
| 919 | + self.assertEqual(len(menu_nodes), 2) |
| 920 | + self.assertEqual(menu_nodes[0].id, homepage.pk) |
| 921 | + self.assertEqual(menu_nodes[0].selected, False) |
| 922 | + self.assertEqual(menu_nodes[1].id, app_root.pk) |
| 923 | + self.assertEqual(menu_nodes[1].selected, True) |
| 924 | + |
| 925 | + @override_settings( |
| 926 | + CMS_APPHOOKS=['cms.test_utils.project.sampleapp.cms_apps.AppWithNoMenu'], |
| 927 | + ) |
| 928 | + def test_menu_node_is_selected_on_app_sub_path(self): |
| 929 | + """ |
| 930 | + If a user requests a path belonging to an apphook, |
| 931 | + the menu should mark the node for the apphook page as selected. |
| 932 | + """ |
| 933 | + # Refs - https://github.com/divio/django-cms/issues/6336 |
| 934 | + defaults = { |
| 935 | + 'language': 'en', |
| 936 | + 'published': True, |
| 937 | + 'in_navigation': True, |
| 938 | + 'template': 'nav_playground.html', |
| 939 | + } |
| 940 | + homepage = create_page('EN-P1', **defaults) |
| 941 | + homepage.set_as_homepage() |
| 942 | + app_root = create_page('EN-P2', apphook='AppWithNoMenu', apphook_namespace='app_with_no_menu', **defaults) |
| 943 | + |
| 944 | + # Public version |
| 945 | + request = self.get_request(self.get_edit_on_url('/en/en-p2/settings/')) |
| 946 | + request.current_page = get_page(request) |
| 947 | + menu_nodes = menu_pool.get_renderer(request).get_nodes() |
| 948 | + self.assertEqual(len(menu_nodes), 2) |
| 949 | + self.assertEqual(menu_nodes[0].id, homepage.publisher_public_id) |
| 950 | + self.assertEqual(menu_nodes[0].selected, False) |
| 951 | + self.assertEqual(menu_nodes[1].id, app_root.publisher_public_id) |
| 952 | + self.assertEqual(menu_nodes[1].selected, True) |
| 953 | + |
| 954 | + # Draft version |
| 955 | + with self.login_user_context(self.get_superuser()): |
| 956 | + request = self.get_request(self.get_edit_on_url('/en/en-p2/settings/')) |
| 957 | + request.current_page = get_page(request) |
| 958 | + menu_nodes = menu_pool.get_renderer(request).get_nodes() |
| 959 | + self.assertEqual(len(menu_nodes), 2) |
| 960 | + self.assertEqual(menu_nodes[0].id, homepage.pk) |
| 961 | + self.assertEqual(menu_nodes[0].selected, False) |
| 962 | + self.assertEqual(menu_nodes[1].id, app_root.pk) |
| 963 | + self.assertEqual(menu_nodes[1].selected, True) |
| 964 | + |
872 | 965 |
|
873 | 966 | class ApphooksPageLanguageUrlTestCase(CMSTestCase):
|
874 | 967 | def setUp(self):
|
|
0 commit comments