From fb0f7edc170d9357976efd44c3345bebd4ddabd9 Mon Sep 17 00:00:00 2001
From: Rechner Fox <659028+rechner@users.noreply.github.com>
Date: Mon, 13 Jul 2026 16:17:33 -0700
Subject: [PATCH 1/3] Remove dead validator.js from utility page
---
registration/templates/registration/utility_pages.html | 1 -
1 file changed, 1 deletion(-)
diff --git a/registration/templates/registration/utility_pages.html b/registration/templates/registration/utility_pages.html
index 354e74f8..8366b748 100644
--- a/registration/templates/registration/utility_pages.html
+++ b/registration/templates/registration/utility_pages.html
@@ -35,7 +35,6 @@
-
{% block javascript %}
From cabb2083bd2b1175d3cf794de8a9a19103fbcb3f Mon Sep 17 00:00:00 2001
From: Rechner Fox <659028+rechner@users.noreply.github.com>
Date: Mon, 13 Jul 2026 16:25:19 -0700
Subject: [PATCH 2/3] Add maintenance mode tests
---
registration/tests/test_maintenance_mode.py | 73 +++++++++++++++++++++
1 file changed, 73 insertions(+)
create mode 100644 registration/tests/test_maintenance_mode.py
diff --git a/registration/tests/test_maintenance_mode.py b/registration/tests/test_maintenance_mode.py
new file mode 100644
index 00000000..d351e9ad
--- /dev/null
+++ b/registration/tests/test_maintenance_mode.py
@@ -0,0 +1,73 @@
+import tempfile
+from http import HTTPStatus
+from pathlib import Path
+
+from django.test import SimpleTestCase, override_settings
+
+
+class MaintenanceModeTest(SimpleTestCase):
+ """Test that django-maintenance-mode works as configured.
+
+ Uses SimpleTestCase (no database) since maintenance mode is purely
+ middleware-based and doesn't require DB access.
+ """
+
+ def setUp(self):
+ self.state_file = Path(tempfile.mktemp(suffix="_maintenance_mode_state.txt"))
+ self.state_file.write_text("0")
+
+ def tearDown(self):
+ self.state_file.unlink(missing_ok=True)
+
+ def _enable_maintenance(self):
+ self.state_file.write_text("1")
+
+ def _disable_maintenance(self):
+ self.state_file.write_text("0")
+
+ @override_settings(MAINTENANCE_MODE=True)
+ def test_maintenance_mode_returns_503(self):
+ """When maintenance mode is on, normal pages return 503."""
+ response = self.client.get("/registration/")
+ self.assertEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
+
+ @override_settings(MAINTENANCE_MODE=True)
+ def test_maintenance_page_renders_without_error(self):
+ """The 503 maintenance template renders successfully (no missing static files)."""
+ response = self.client.get("/registration/")
+ self.assertEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
+ self.assertIn(b"maintenance", response.content.lower())
+
+ @override_settings(MAINTENANCE_MODE=False)
+ def test_normal_mode_does_not_return_503(self):
+ """When maintenance mode is off, pages are not blocked by maintenance middleware."""
+ self.client.raise_request_exception = False
+ response = self.client.get("/registration/")
+ self.assertNotEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
+
+ @override_settings(MAINTENANCE_MODE=True, MAINTENANCE_MODE_IGNORE_ADMIN_SITE=True)
+ def test_admin_site_accessible_during_maintenance(self):
+ """Admin site is reachable even during maintenance (per MAINTENANCE_MODE_IGNORE_ADMIN_SITE)."""
+ response = self.client.get("/admin/login/")
+ self.assertNotEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
+
+ @override_settings(
+ MAINTENANCE_MODE=True, MAINTENANCE_MODE_IGNORE_URLS=("^/accounts/",)
+ )
+ def test_ignored_urls_accessible_during_maintenance(self):
+ """URLs matching MAINTENANCE_MODE_IGNORE_URLS are accessible during maintenance."""
+ self.client.raise_request_exception = False
+ response = self.client.get("/accounts/login/")
+ self.assertNotEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
+
+ def test_state_file_controls_maintenance_mode(self):
+ """The file-based state backend enables/disables maintenance mode."""
+ self.client.raise_request_exception = False
+ with self.settings(MAINTENANCE_MODE_STATE_FILE_PATH=str(self.state_file)):
+ self._disable_maintenance()
+ response = self.client.get("/registration/")
+ self.assertNotEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
+
+ self._enable_maintenance()
+ response = self.client.get("/registration/")
+ self.assertEqual(response.status_code, HTTPStatus.SERVICE_UNAVAILABLE)
From bf5f2e095d929554cf55fce673268c1c97e40d2d Mon Sep 17 00:00:00 2001
From: Rechner Fox <659028+rechner@users.noreply.github.com>
Date: Mon, 13 Jul 2026 16:31:50 -0700
Subject: [PATCH 3/3] Sonarqube feedback
---
registration/tests/test_maintenance_mode.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/registration/tests/test_maintenance_mode.py b/registration/tests/test_maintenance_mode.py
index d351e9ad..22ffa4b3 100644
--- a/registration/tests/test_maintenance_mode.py
+++ b/registration/tests/test_maintenance_mode.py
@@ -1,3 +1,4 @@
+import shutil
import tempfile
from http import HTTPStatus
from pathlib import Path
@@ -13,11 +14,12 @@ class MaintenanceModeTest(SimpleTestCase):
"""
def setUp(self):
- self.state_file = Path(tempfile.mktemp(suffix="_maintenance_mode_state.txt"))
+ self._tmp_dir = tempfile.mkdtemp()
+ self.state_file = Path(self._tmp_dir) / "maintenance_mode_state.txt"
self.state_file.write_text("0")
def tearDown(self):
- self.state_file.unlink(missing_ok=True)
+ shutil.rmtree(self._tmp_dir, ignore_errors=True)
def _enable_maintenance(self):
self.state_file.write_text("1")