diff --git a/django_adminlte_2/templatetags/adminlte_filters.py b/django_adminlte_2/templatetags/adminlte_filters.py index fecc14efbee4d940a94f9443d5dbf9140c5ccefc..20afe254b9386fef4c9a33eb174f9c38ce280925 100644 --- a/django_adminlte_2/templatetags/adminlte_filters.py +++ b/django_adminlte_2/templatetags/adminlte_filters.py @@ -207,6 +207,11 @@ def with_pattern(field, pattern=None): regex passed to this filter. Therefore, the regex string needs to be stored in a variable that can be sent to the filter. + NOTE: The default regex in this method is written as a regular string and + not a raw string (regex with r prefix) so that the documentation will match. + This docstring can not contain a single backslash as python will think it + is invalid syntax and raise a warning. + :param field: Form field to add attributes to. :param pattern: The JavaScript regex pattern to use. Defaults to "\\([0-9]{3}\\) [0-9]{3}-[0-9]{4}" if value not passed. @@ -229,7 +234,7 @@ def with_pattern(field, pattern=None): <input type="tel" name="field" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}" id="id_field" /> """ if pattern is None: - pattern = r"\([0-9]{3}\) [0-9]{3}-[0-9]{4}" + pattern = "\\([0-9]{3}\\) [0-9]{3}-[0-9]{4}" attrs = field.field.widget.attrs attrs['pattern'] = pattern diff --git a/tests/test_middleware.py b/tests/test_middleware.py index 5d2d125064c957301030a95ffed3e1abfd870a54..15aed32bea2784065f68885094b963b51954b1bd 100644 --- a/tests/test_middleware.py +++ b/tests/test_middleware.py @@ -87,12 +87,24 @@ class MiddlewareTestCase(TestCase): @patch('django_adminlte_2.middleware.STRICT_POLICY', True) def test_middleware_blocks_when_user_anonymous_login_off_strict_on_login_wl_off_strict_wl_off(self): """test_middleware_blocks_when_user_anonymous_login_off_strict_on_login_wl_off_strict_wl_off""" - response = self.client.get( - reverse('django_adminlte_2:demo-css'), - follow=True - ) - self.assertEqual(response.status_code, 200) - self.assertContains(response, "Home") + with warnings.catch_warnings(record=True) as wa: + warning_message = ( + "The view 'demo_css' does not have the" + " permission_required, one_of_permission, or login_required" + " attribute set and the option ADMINLTE2_USE_STRICT_POLICY is" + " set to True. This means that this view is inaccessible until" + " either permissions are set on the view or the url_name for the" + " view is added to the ADMINLTE2_STRICT_POLICY_WHITELIST setting." + ) + + response = self.client.get( + reverse('django_adminlte_2:demo-css'), + follow=True + ) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Home") + self.assertEqual(len(wa), 1) + self.assertIn(warning_message, str(wa[-1].message)) @patch('django_adminlte_2.middleware.STRICT_POLICY', True) @patch('django_adminlte_2.middleware.STRICT_POLICY_WHITELIST', UPDATED_STRICT_POLICY_WHITELIST) @@ -123,12 +135,24 @@ class MiddlewareTestCase(TestCase): """test_middleware_blocks_when_user_anonymous_login_on_strict_on_login_wl_on_strict_wl_off""" # NOTE: This test goes to demo-css, fails the strict policy, then goes to home. # Home is a new request that fails the login required being on and thus redirect to login page. - response = self.client.get( - reverse('django_adminlte_2:demo-css'), - follow=True - ) - self.assertEqual(response.status_code, 200) - self.assertContains(response, "Login") + with warnings.catch_warnings(record=True) as wa: + warning_message = ( + "The view 'demo_css' does not have the" + " permission_required, one_of_permission, or login_required" + " attribute set and the option ADMINLTE2_USE_STRICT_POLICY is" + " set to True. This means that this view is inaccessible until" + " either permissions are set on the view or the url_name for the" + " view is added to the ADMINLTE2_STRICT_POLICY_WHITELIST setting." + ) + + response = self.client.get( + reverse('django_adminlte_2:demo-css'), + follow=True + ) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Login") + self.assertEqual(len(wa), 1) + self.assertIn(warning_message, str(wa[-1].message)) @patch('django_adminlte_2.middleware.LOGIN_REQUIRED', True) @patch('django_adminlte_2.middleware.STRICT_POLICY', True) @@ -196,13 +220,25 @@ class MiddlewareTestCase(TestCase): @patch('django_adminlte_2.middleware.STRICT_POLICY', True) def test_middleware_blocks_when_user_logged_in_login_off_strict_on_login_wl_off_strict_wl_off(self): """test_middleware_blocks_when_user_logged_in_login_off_strict_on_login_wl_off_strict_wl_off""" - self.client.force_login(self.test_user_w_perms) - response = self.client.get( - reverse('django_adminlte_2:demo-css'), - follow=True - ) - self.assertEqual(response.status_code, 200) - self.assertContains(response, "Home") + with warnings.catch_warnings(record=True) as wa: + self.client.force_login(self.test_user_w_perms) + warning_message = ( + "The view 'demo_css' does not have the" + " permission_required, one_of_permission, or login_required" + " attribute set and the option ADMINLTE2_USE_STRICT_POLICY is" + " set to True. This means that this view is inaccessible until" + " either permissions are set on the view or the url_name for the" + " view is added to the ADMINLTE2_STRICT_POLICY_WHITELIST setting." + ) + + response = self.client.get( + reverse('django_adminlte_2:demo-css'), + follow=True + ) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Home") + self.assertEqual(len(wa), 1) + self.assertIn(warning_message, str(wa[-1].message)) @patch('django_adminlte_2.middleware.STRICT_POLICY', True) @patch('django_adminlte_2.middleware.STRICT_POLICY_WHITELIST', UPDATED_STRICT_POLICY_WHITELIST) @@ -220,20 +256,32 @@ class MiddlewareTestCase(TestCase): @patch('django_adminlte_2.middleware.STRICT_POLICY', True) def test_middleware_blocks_when_user_logged_in_login_on_strict_on_login_wl_off_strict_wl_off(self): """test_middleware_blocks_when_user_logged_in_login_on_strict_on_login_wl_off_strict_wl_off""" - self.client.force_login(self.test_user_w_perms) - response = self.client.get( - reverse('django_adminlte_2:demo-css'), - follow=True - ) - self.assertEqual(response.status_code, 200) - self.assertContains(response, "Home") + with warnings.catch_warnings(record=True) as wa: + self.client.force_login(self.test_user_w_perms) + warning_message = ( + "The view 'demo_css' does not have the" + " permission_required, one_of_permission, or login_required" + " attribute set and the option ADMINLTE2_USE_STRICT_POLICY is" + " set to True. This means that this view is inaccessible until" + " either permissions are set on the view or the url_name for the" + " view is added to the ADMINLTE2_STRICT_POLICY_WHITELIST setting." + ) + + response = self.client.get( + reverse('django_adminlte_2:demo-css'), + follow=True + ) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Home") + self.assertEqual(len(wa), 1) + self.assertIn(warning_message, str(wa[-1].message)) @patch('django_adminlte_2.middleware.LOGIN_REQUIRED', True) @patch('django_adminlte_2.middleware.STRICT_POLICY', True) @patch('django_adminlte_2.middleware.LOGIN_EXEMPT_WHITELIST', UPDATED_LOGIN_EXEMPT_WHITELIST) def test_middleware_blocks_when_user_logged_in_login_on_strict_on_login_wl_on_strict_wl_off(self): """test_middleware_blocks_when_user_logged_in_login_on_strict_on_login_wl_on_strict_wl_off""" - with warnings.catch_warnings(record=True) as w: + with warnings.catch_warnings(record=True) as wa: self.client.force_login(self.test_user_w_perms) warning_message = ( "The view 'demo_css' does not have the" @@ -250,8 +298,8 @@ class MiddlewareTestCase(TestCase): ) self.assertEqual(response.status_code, 200) self.assertContains(response, "Home") - self.assertEqual(len(w), 1) - self.assertIn(warning_message, str(w[-1].message)) + self.assertEqual(len(wa), 1) + self.assertIn(warning_message, str(wa[-1].message)) @patch('django_adminlte_2.middleware.LOGIN_REQUIRED', True) @patch('django_adminlte_2.middleware.STRICT_POLICY', True)