dynamicweb/cms/tests/test_site.py

160 lines
6.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import warnings
from django.contrib.sites.models import Site
from django.test import RequestFactory, override_settings
from cms.api import create_page
from cms.models import Page
from cms.test_utils.testcases import CMSTestCase
from cms.utils import get_current_site
from cms.utils.admin import get_site_from_request
from cms.utils.compat.warnings import RemovedInDjangoCMS60Warning
class SiteTestCase(CMSTestCase):
"""Site framework specific test cases.
All stuff which is changing settings.SITE_ID for tests should come here.
"""
def setUp(self):
self.assertEqual(Site.objects.all().count(), 1)
with self.settings(SITE_ID=1):
u = self._create_user("test", True, True)
# setup sites
self.site2 = Site.objects.create(domain="sample2.com", name="sample2.com", pk=2)
self.site3 = Site.objects.create(domain="sample3.com", name="sample3.com", pk=3)
self._login_context = self.login_user_context(u)
self._login_context.__enter__()
def tearDown(self):
self._login_context.__exit__(None, None, None)
def test_site_framework(self):
# Test the site framework, and test if it's possible to disable it
with self.settings(SITE_ID=self.site2.pk):
create_page("page_2a", "nav_playground.html", "de", site=self.site2)
page_list = self.get_pages_admin_list_uri('en')
response = self.client.get(f"{page_list}?site__exact={self.site3.pk}")
self.assertEqual(response.status_code, 200)
create_page("page_3b", "nav_playground.html", "de", site=self.site3)
with self.settings(SITE_ID=self.site3.pk):
create_page("page_3a", "nav_playground.html", "nl", site=self.site3)
# with param
self.assertEqual(Page.objects.on_site(self.site2.pk).count(), 1)
self.assertEqual(Page.objects.on_site(self.site3.pk).count(), 2)
self.assertEqual(Page.objects.on_site().count(), 2)
with self.settings(SITE_ID=self.site2.pk):
# without param
self.assertEqual(Page.objects.on_site().count(), 1)
class GetCurrentSiteTests(CMSTestCase):
def setUp(self):
self.factory = RequestFactory()
# Stelle sicher, dass eindeutige Sites existieren
Site.objects.all().delete()
self.site1 = Site.objects.create(domain='example.com', name='Example')
self.site2 = Site.objects.create(domain='second.test', name='Second')
@override_settings(SITE_ID=1)
def test_request_site_attribute_is_used(self):
with self.settings(SITE_ID=self.site1.id):
req = self.factory.get('/')
# Middleware könnte request.site setzen – simuliere das
req.site = self.site2
site = get_current_site(req)
self.assertEqual(site.pk, self.site2.pk)
@override_settings(SITE_ID=1)
def test_warns_without_request_and_returns_current(self):
with self.settings(SITE_ID=self.site1.id):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
site = get_current_site()
self.assertTrue(any(issubclass(wi.category, RemovedInDjangoCMS60Warning) for wi in w))
self.assertEqual(site.pk, self.site1.pk)
@override_settings(SITE_ID=1)
def test_fallback_to_default_site(self):
with self.settings(SITE_ID=self.site1.id):
req = self.factory.get('/')
site = get_current_site(req)
self.assertEqual(site.pk, self.site1.pk)
class GetSiteFromRequestTests(CMSTestCase):
def setUp(self):
self.factory = RequestFactory()
Site.objects.all().delete()
self.site_default = Site.objects.create(domain='default.test', name='Default')
self.site_other = Site.objects.create(domain='other.test', name='Other')
def test_get_param_valid_returns_requested_site(self):
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.get(f'/admin/?site={self.site_other.pk}')
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_other.pk)
def test_post_param_valid_returns_requested_site(self):
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.post('/admin/', data={'site': str(self.site_other.pk)})
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_other.pk)
def test_invalid_non_integer_falls_back_to_current_site(self):
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.get('/admin/?site=not-an-int')
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_default.pk)
def test_nonexistent_site_id_falls_back_to_current_site(self):
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.get('/admin/?site=999999')
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_default.pk)
def test_missing_param_falls_back_to_current_site(self):
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.get('/admin/')
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_default.pk)
class GetSiteFromRequestWithMiddlewareTests(CMSTestCase):
def setUp(self):
self.factory = RequestFactory()
Site.objects.all().delete()
self.site_default = Site.objects.create(domain='default.test', name='Default')
self.site_other = Site.objects.create(domain='other.test', name='Other')
def test_request_site_from_middleware_is_respected(self):
"""Test that if middleware sets request.site, get_site_from_request respects it."""
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.get('/admin/')
# Simulate middleware setting request.site
req.site = self.site_other
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_other.pk)
def test_request_site_from_middleware_does_not_override_get_param(self):
"""Test that request.site does not override GET parameter."""
# GET param points to default, but middleware sets other
req = self.factory.get(f'/admin/?site={self.site_default.pk}')
req.site = self.site_other
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_default.pk)
def test_request_site_from_middleware_does_not_override_post_param(self):
"""Test that request.site does not override POST parameter."""
with self.settings(SITE_ID=self.site_default.pk):
req = self.factory.post('/admin/', data={'site': str(self.site_other.pk)})
req.site = self.site_default
site = get_site_from_request(req)
self.assertEqual(site.pk, self.site_other.pk)