1# -*- coding: utf-8 -*- 2import copy 3 4from django.contrib.sites.models import Site 5 6from cms.api import create_page 7from cms.models import Page 8from cms.test_utils.testcases import CMSTestCase, URL_CMS_PAGE 9from cms.utils.conf import get_cms_setting 10from cms.utils.urlutils import admin_reverse 11 12 13class SiteTestCase(CMSTestCase): 14 """Site framework specific test cases. 15 16 All stuff which is changing settings.SITE_ID for tests should come here. 17 """ 18 19 def setUp(self): 20 self.assertEqual(Site.objects.all().count(), 1) 21 with self.settings(SITE_ID=1): 22 u = self._create_user("test", True, True) 23 24 # setup sites 25 self.site2 = Site.objects.create(domain="sample2.com", name="sample2.com", pk=2) 26 self.site3 = Site.objects.create(domain="sample3.com", name="sample3.com", pk=3) 27 28 self._login_context = self.login_user_context(u) 29 self._login_context.__enter__() 30 31 def tearDown(self): 32 self._login_context.__exit__(None, None, None) 33 34 def test_site_framework(self): 35 #Test the site framework, and test if it's possible to disable it 36 with self.settings(SITE_ID=self.site2.pk): 37 create_page("page_2a", "nav_playground.html", "de", site=self.site2) 38 39 response = self.client.get("%s?site__exact=%s" % (URL_CMS_PAGE, self.site3.pk)) 40 self.assertEqual(response.status_code, 200) 41 create_page("page_3b", "nav_playground.html", "de", site=self.site3) 42 43 with self.settings(SITE_ID=self.site3.pk): 44 create_page("page_3a", "nav_playground.html", "nl", site=self.site3) 45 46 # with param 47 self.assertEqual(Page.objects.on_site(self.site2.pk).count(), 1) 48 self.assertEqual(Page.objects.on_site(self.site3.pk).count(), 2) 49 50 self.assertEqual(Page.objects.drafts().on_site().count(), 2) 51 52 with self.settings(SITE_ID=self.site2.pk): 53 # without param 54 self.assertEqual(Page.objects.drafts().on_site().count(), 1) 55 56 def test_site_preview(self): 57 page = create_page("page", "nav_playground.html", "de", site=self.site2, published=True) 58 page_edit_url_on = self.get_edit_on_url(page.get_absolute_url('de')) 59 60 with self.login_user_context(self.get_superuser()): 61 # set the current site on changelist 62 response = self.client.post(admin_reverse('cms_page_changelist'), {'site': self.site2.pk}) 63 self.assertEqual(response.status_code, 200) 64 # simulate user clicks on preview icon 65 response = self.client.get(admin_reverse('cms_page_preview_page', args=[page.pk, 'de'])) 66 self.assertEqual(response.status_code, 302) 67 self.assertEqual(response._headers['location'][1], 'http://sample2.com{}&language=de'.format(page_edit_url_on)) 68 69 def test_site_publish(self): 70 self._login_context.__exit__(None, None, None) 71 pages = {"2": list(range(0, 5)), "3": list(range(0, 5))} 72 lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) 73 lang_settings[3][1]['public'] = True 74 75 with self.settings(CMS_LANGUAGES=lang_settings, LANGUAGE_CODE="de"): 76 with self.settings(SITE_ID=self.site2.pk): 77 pages["2"][0] = create_page("page_2", "nav_playground.html", "de", 78 site=self.site2, published=True) 79 pages["2"][1] = create_page("page_2_1", "nav_playground.html", "de", 80 parent=pages["2"][0], site=self.site2, published=True) 81 pages["2"][2] = create_page("page_2_2", "nav_playground.html", "de", 82 parent=pages["2"][0], site=self.site2, published=True) 83 pages["2"][3] = create_page("page_2_1_1", "nav_playground.html", "de", 84 parent=pages["2"][1], site=self.site2, published=True) 85 pages["2"][4] = create_page("page_2_1_2", "nav_playground.html", "de", 86 parent=pages["2"][1], site=self.site2, published=True) 87 88 for page in pages["2"]: 89 page_url = page.get_absolute_url(language='de') 90 response = self.client.get(page_url) 91 self.assertEqual(response.status_code, 200) 92 93 with self.settings(SITE_ID=self.site3.pk): 94 pages["3"][0] = create_page("page_3", "nav_playground.html", "de", 95 site=self.site3) 96 pages["3"][0].publish('de') 97 pages["3"][1] = create_page("page_3_1", "nav_playground.html", "de", 98 parent=pages["3"][0], site=self.site3, published=True) 99 pages["3"][2] = create_page("page_3_2", "nav_playground.html", "de", 100 parent=pages["3"][0], site=self.site3, published=True) 101 pages["3"][3] = create_page("page_3_1_1", "nav_playground.html", "de", 102 parent=pages["3"][1], site=self.site3, published=True) 103 pages["3"][4] = create_page("page_3_1_2", "nav_playground.html", "de", 104 parent=pages["3"][1], site=self.site3, published=True) 105 106 for page in pages["3"]: 107 if page.is_home: 108 page_url = "/de/" 109 else: 110 page_url = page.get_absolute_url(language='de') 111 response = self.client.get(page_url) 112 self.assertEqual(response.status_code, 200) 113 114 115class TestSiteBoundStaticPlaceholder(SiteTestCase): 116 def setUp(self): 117 super(TestSiteBoundStaticPlaceholder, self).setUp() 118 with self.settings( 119 CMS_TEMPLATES=(('placeholder_tests/static_with_site.html', 'tpl'), ), 120 ): 121 self.test_page = create_page('page', 'placeholder_tests/static_with_site.html', language='de') 122 123 def tearDown(self): 124 self.test_page.delete() 125 super(TestSiteBoundStaticPlaceholder, self).tearDown() 126 127 def test_create_site_specific_placeholder(self): 128 response = self.client.get(self.test_page.get_absolute_url(language='de') + '?structure') 129 self.assertEqual(response.status_code, 200) 130