Files
ACORE/core/tests_error_pages.py
lokses 0057f367a2 core: кастомные страницы ошибок 404/403/500/503 + режим техработ
Единый стиль портала (логотип, тема, кнопки) через error_base.html:
- 404 — страница не найдена
- 403 — доступ запрещён (+ ссылка на IT-поддержку)
- 500 — внутренняя ошибка (автономна: без request/context-процессоров)
- 503 — технические работы

MaintenanceModeMiddleware: при MAINTENANCE_MODE=True отдаёт 503 всем, кроме
суперпользователей и путей входа/админки/статики (чтобы админ мог войти и
выключить режим). По умолчанию выключен — поведение не меняется.

- tests: рендер всех шаблонов, кастомный 404, режим техработ вкл/выкл/супер

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 23:54:34 +03:00

64 lines
2.4 KiB
Python

from django.template.loader import render_to_string
from django.test import TestCase, override_settings
from core.test_utils import login_2fa
from core.tests_portal_access import make_employee
class ErrorTemplateRenderTests(TestCase):
"""Шаблоны ошибок валидны и содержат свой код/заголовок (500 рендерится
без request/context-процессоров — проверяем автономность)."""
def test_403_template(self):
html = render_to_string('403.html')
self.assertIn('403', html)
self.assertIn('Доступ запрещён', html)
def test_500_template(self):
html = render_to_string('500.html')
self.assertIn('500', html)
self.assertIn('Внутренняя ошибка сервера', html)
def test_503_template(self):
html = render_to_string('503.html')
self.assertIn('503', html)
self.assertIn('технические работы', html)
def test_404_template(self):
html = render_to_string('404.html')
self.assertIn('404', html)
self.assertIn('Страница не найдена', html)
class Custom404Tests(TestCase):
def test_unknown_url_uses_custom_404(self):
resp = self.client.get('/no-such-page-xyz-42/')
self.assertEqual(resp.status_code, 404)
self.assertContains(resp, 'Страница не найдена', status_code=404)
@override_settings(MAINTENANCE_MODE=True)
class MaintenanceModeTests(TestCase):
def test_anonymous_gets_503(self):
resp = self.client.get('/dashboard/')
self.assertEqual(resp.status_code, 503)
self.assertContains(resp, 'технические работы', status_code=503)
def test_login_path_allowed(self):
resp = self.client.get('/accounts/login/')
self.assertNotEqual(resp.status_code, 503)
def test_superuser_bypasses(self):
admin = make_employee(username='maint.super', is_staff=True, is_superuser=True)
login_2fa(self.client, admin)
resp = self.client.get('/dashboard/')
self.assertNotEqual(resp.status_code, 503)
class MaintenanceOffByDefaultTests(TestCase):
def test_no_503_when_flag_off(self):
user = make_employee()
login_2fa(self.client, user)
resp = self.client.get('/dashboard/', HTTP_HX_REQUEST='true')
self.assertEqual(resp.status_code, 200)