From 4a3a9aeefb486139237f49d2f44b7808e0191ff9 Mon Sep 17 00:00:00 2001 From: DenisToxic Date: Fri, 2 Oct 2026 09:30:03 +0200 Subject: [PATCH] Add browser coverage and tested inventory fixes --- .dockerignore | 3 + README.md | 19 + changes.md | 20 + csr_inventory/browser_test_settings.py | 10 + .../templates/inventory/device_detail.html | 1 + .../templates/inventory/device_list.html | 4 +- inventory/views.py | 5 +- scripts/test_browser.py | 355 ++++++++++++++++++ scripts/test_server_browser.py | 155 ++++++++ 9 files changed, 569 insertions(+), 3 deletions(-) create mode 100644 csr_inventory/browser_test_settings.py create mode 100644 scripts/test_browser.py create mode 100644 scripts/test_server_browser.py diff --git a/.dockerignore b/.dockerignore index 07c351f..76ec8cc 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,12 +1,14 @@ .git .venv __pycache__ +**/__pycache__ *.pyc .DS_Store .env *.sqlite3 staticfiles backups +deploy media *.zip *.tar.gz @@ -14,4 +16,5 @@ media .pytest_cache .coverage tls +traefik traefik/dynamic/tls.yml diff --git a/README.md b/README.md index 2a2d486..77a6ee3 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,25 @@ mit `python manage.py test --settings=csr_inventory.test_settings` ausgeführt werden; PostgreSQL-Sperrtests werden dabei übersprungen. Für Tests `DEBUG=true` und `SECURE_SSL_REDIRECT=false` in der Prozessumgebung setzen. +Browserprüfung mit einer automatisch angelegten und anschließend entfernten +SQLite-Datenbank (berührt die produktive PostgreSQL-Datenbank nicht): + +```bash +pip install playwright +python -m playwright install chromium --only-shell +python scripts/test_browser.py +``` + +Der Playwright-Lauf prüft Anmeldung, Rollen, Geräteliste, Erfassung, +Bearbeitung, Ablauf und Aufgaben, Archiv, Einstellungen, Import/Export, +Änderungshistorie sowie Mobilnavigation und Dunkelmodus. + +Für einen bewusst beschreibbaren Testserver kann `scripts/test_server_browser.py` +mit `CSR_TEST_BASE_URL`, `CSR_TEST_USER` und `CSR_TEST_PASSWORD` ausgeführt +werden. Der Lauf legt eindeutig markierte Testgeräte an und gibt die Kennung +`TEST_MARKER` zur anschließenden Bereinigung aus. Er akzeptiert das lokale +selbstsignierte HTTPS-Zertifikat des Testservers. + Docker-Prüfung auf einem Rechner mit Docker: ```bash diff --git a/changes.md b/changes.md index 55b48b5..9b3d774 100644 --- a/changes.md +++ b/changes.md @@ -176,3 +176,23 @@ - Die CI-Konfiguration wurde von GitHub Actions nach Gitea Actions verschoben. Öffentliche Hilfsaktionen werden ausdrücklich von `gitea.com` geladen, nicht über die GitHub-Standardeinstellung von Gitea. + +## 29. September 2026 – Browserprüfung mit Playwright + +- Ein wiederholbarer Playwright-Test prüft die wichtigsten Bedienabläufe in + Chromium mit einer kurzlebigen, getrennten Datenbank. Er deckt auch Rollen, + Import/Export, Änderungsverlauf, Mobilnavigation und Dunkelmodus ab. +- Nach Anwendung eines Filters schließt sich die Filterfläche wieder. Die + aktiven Filter bleiben am Filterknopf sichtbar; Gerätedaten lassen sich + sofort anklicken und bearbeiten. +- Geräte können nun direkt auf ihrer Detailseite archiviert werden. Der + vorhandene Archivbereich erlaubt anschließend die Wiederherstellung. +- Beim Excel-Import lassen sich jetzt auch Anschlüsse, Auflösung, + Druckverfahren, Duplex und Farbdruck zuordnen. Damit können diese + typspezifischen Angaben aus einem Export wieder übernommen werden. +- Die Änderungen wurden zusätzlich auf dem Testserver mit PostgreSQL 17 + geprüft. Ein Playwright-Lauf über HTTPS sowie alle 66 Django-Tests im + Container waren erfolgreich. Angelegte Testdatensätze wurden entfernt. +- `deploy/`, `traefik/` und verschachtelte Python-Caches sind vom Docker- + Buildkontext ausgeschlossen; so gelingt der Web-Build auch bei + zugriffsbeschränkten Betriebsdateien auf dem Server. diff --git a/csr_inventory/browser_test_settings.py b/csr_inventory/browser_test_settings.py new file mode 100644 index 0000000..2d8cc87 --- /dev/null +++ b/csr_inventory/browser_test_settings.py @@ -0,0 +1,10 @@ +"""Settings for isolated browser tests against a temporary SQLite database.""" + +import os +from pathlib import Path + +from .test_settings import * # noqa: F403 + + +DATABASES["default"]["NAME"] = os.environ["CSR_BROWSER_TEST_DB"] +MEDIA_ROOT = Path(os.environ["CSR_BROWSER_TEST_MEDIA"]) diff --git a/inventory/templates/inventory/device_detail.html b/inventory/templates/inventory/device_detail.html index 015e7c0..f81e4fe 100644 --- a/inventory/templates/inventory/device_detail.html +++ b/inventory/templates/inventory/device_detail.html @@ -33,5 +33,6 @@ {% if definitions %}

Zusatzfelder

{% for field in definitions %}{% endfor %}
{% endif %}
Abbrechen{% if can_edit_devices %}{% endif %}
+{% if can_edit_devices and not device.archived_at %}
{% csrf_token %}
{% endif %} {{ type_field_map|json_script:'device-type-fields' }} {% endblock %} diff --git a/inventory/templates/inventory/device_list.html b/inventory/templates/inventory/device_list.html index fcd9491..5f13206 100644 --- a/inventory/templates/inventory/device_list.html +++ b/inventory/templates/inventory/device_list.html @@ -20,12 +20,12 @@
- + -
+