feat: add Django project scaffold, configuration and container

Environment-variable configuration that fails fast, database-only health
check, JSON request logs with a request id, security headers with a strict
CSP, and a multi-stage non-root Docker image with compose file. Ticket 1.1.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sk72AxLwQnYttF6VFSxQLt
This commit is contained in:
Ebbe Baß
2026-10-15 13:44:07 +02:00
co-authored by Claude Sonnet 5.5
parent 24de5878ed
commit f8b0584687
31 changed files with 1134 additions and 2 deletions
+20
View File
@@ -0,0 +1,20 @@
from unittest import mock
import pytest
from django.db.utils import OperationalError
@pytest.mark.django_db
def test_health_ok(client):
response = client.get("/healthz")
assert response.status_code == 200
assert response.json() == {"status": "ok"}
def test_health_down_when_database_unreachable(client, caplog):
with mock.patch("portal.config.health.connection") as connection:
connection.cursor.side_effect = OperationalError("unable to open database file")
response = client.get("/healthz")
assert response.status_code == 503
assert response.json() == {"status": "unavailable"}
assert "unable to open" not in caplog.text