|
@@ -1,3 +1,7 @@
|
|
|
+import sys
|
|
|
+from types import ModuleType
|
|
|
+
|
|
|
+from django.conf import FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG, Settings, settings
|
|
|
from django.core.exceptions import ValidationError
|
|
|
from django.forms import URLField
|
|
|
from django.test import SimpleTestCase, ignore_warnings
|
|
@@ -155,8 +159,41 @@ class URLFieldAssumeSchemeDeprecationTest(FormFieldAssertionsMixin, SimpleTestCa
|
|
|
def test_urlfield_raises_warning(self):
|
|
|
msg = (
|
|
|
"The default scheme will be changed from 'http' to 'https' in Django 6.0. "
|
|
|
- "Pass the forms.URLField.assume_scheme argument to silence this warning."
|
|
|
+ "Pass the forms.URLField.assume_scheme argument to silence this warning, "
|
|
|
+ "or set the FORMS_URLFIELD_ASSUME_HTTPS transitional setting to True to "
|
|
|
+ "opt into using 'https' as the new default scheme."
|
|
|
)
|
|
|
with self.assertWarnsMessage(RemovedInDjango60Warning, msg):
|
|
|
f = URLField()
|
|
|
self.assertEqual(f.clean("example.com"), "http://example.com")
|
|
|
+
|
|
|
+ @ignore_warnings(category=RemovedInDjango60Warning)
|
|
|
+ def test_urlfield_forms_urlfield_assume_https(self):
|
|
|
+ with self.settings(FORMS_URLFIELD_ASSUME_HTTPS=True):
|
|
|
+ f = URLField()
|
|
|
+ self.assertEqual(f.clean("example.com"), "https://example.com")
|
|
|
+ f = URLField(assume_scheme="http")
|
|
|
+ self.assertEqual(f.clean("example.com"), "http://example.com")
|
|
|
+
|
|
|
+ def test_override_forms_urlfield_assume_https_setting_warning(self):
|
|
|
+ msg = FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG
|
|
|
+ with self.assertRaisesMessage(RemovedInDjango60Warning, msg):
|
|
|
+ # Changing FORMS_URLFIELD_ASSUME_HTTPS via self.settings() raises a
|
|
|
+ # deprecation warning.
|
|
|
+ with self.settings(FORMS_URLFIELD_ASSUME_HTTPS=True):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def test_settings_init_forms_urlfield_assume_https_warning(self):
|
|
|
+ settings_module = ModuleType("fake_settings_module")
|
|
|
+ settings_module.FORMS_URLFIELD_ASSUME_HTTPS = True
|
|
|
+ sys.modules["fake_settings_module"] = settings_module
|
|
|
+ msg = FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG
|
|
|
+ try:
|
|
|
+ with self.assertRaisesMessage(RemovedInDjango60Warning, msg):
|
|
|
+ Settings("fake_settings_module")
|
|
|
+ finally:
|
|
|
+ del sys.modules["fake_settings_module"]
|
|
|
+
|
|
|
+ def test_access_forms_urlfield_assume_https(self):
|
|
|
+ # Warning is not raised on access.
|
|
|
+ self.assertEqual(settings.FORMS_URLFIELD_ASSUME_HTTPS, False)
|