# Entwicklung und Tests
Für Entwickler und Administratoren, die die Erweiterung erweitern, testen oder selbst bauen möchten.
# Repository
src/
packages/pkg_seminarplan/ Paket-Manifest, Installer-Script, Sprachdateien
components/com_seminarplan/
admin/ Manifest, Optionen (config.xml), Services, Domäne (Cache, Sync, Katalog), Dashboard
site/ Ansichten, Router, Formulare, tmpl, layouts
media/ CSS, JavaScript, joomla.asset.json
modules/mod_seminarplan_*/
plugins/{finder,task,console,content}/seminarplan/
tests/Unit PHPUnit-Tests der Domänenschicht
tests/e2e Playwright-End-to-End-Tests
dev/ Entwicklungsskripte (Verlinken, Reset, Fixtures, Sprachprüfung)
build/ Paketierung
docs/ARCHITECTURE.md Architekturbeschreibung
# Architektur in Kürze
- Kein Datenbank-Duplikat:
CacheStoreInterfacemitFileStore(PHP-Array-Dateien, OPcache) undRedisStore.CatalogRepositoryliest daraus,SyncServiceschreibt. - String-sicheres Routing: SeminarPlan-IDs sind Mongo-ObjectIds; die Komponente bringt eigene Router-Regeln mit, weil Joomlas Standardregeln IDs in Zahlen umwandeln.
- Anzeigeoptionen über
DisplayHelper(Komponentenoptionen plus Menüeintrag). - Formulare über Joomla-Form-XML, Mapper erzeugen die API-Payloads.
- Suche über einen
DocumentBuilder, der Smart-Search-unabhängige Dokumente liefert.
Details in docs/ARCHITECTURE.md im Repository.
# Paket bauen
php build/build.php # erzeugt dist/pkg_seminarplan-<version>.zip
php build/build.php 1.1.0 # mit abweichender Versionsnummer
Benötigt die PHP-Zip-Erweiterung; ein zip-Binary ist nicht nötig.
# Entwicklungsinstanz
dev/link.sh [/pfad/zu/joomla] verlinkt src/ per Symlink in eine Joomla-Instanz und installiert alle Erweiterungen über Erweiterungen entdecken. Änderungen am Quellcode wirken sofort. Nach neuen Erweiterungen die Datei administrator/cache/autoload_psr4.php löschen, damit Joomla die Namespaces neu einliest.
Mit dem PHP-Built-in-Server (php -S 127.0.0.1:8085 -t /pfad/zu/joomla dev/router.php) muss in configuration.php $live_site mit abschließendem Schrägstrich gesetzt sein.
# Tests
php phpunit.phar # Unit-Tests (Slugs, Terminregeln, Preise, Kategoriebaum, Query, FileStore, Mapper)
npm install && npm run test:e2e # Playwright gegen die laufende Instanz (Desktop und Mobil)
npm run screenshots # Full-Page-Screenshots aller Seiten
Die End-to-End-Tests decken alle Seiten, alle Formulare (inklusive Validierung und Honeypot), Suche, Module, Shortcodes, den Administrator und eine axe-core-Prüfung ab. Sie erwarten die SeminarPlan-Dev-API; Formularabsendungen erzeugen echte Datensätze.
# Zurücksetzen und Fixtures
dev/snapshot.sh # Datenbank-Snapshot nach dev/snapshots/baseline.sql
dev/reset.sh [--no-sync] [--no-index]
dev/reset.sh spielt den Snapshot ein, leert den Cache, legt die Fixtures an (Komponentenoptionen aus dev/config.local.php, Demo-Module, geplante Aufgaben, Shortcode-Beitrag), synchronisiert, erzeugt die Menüeinträge und baut den Suchindex. E2E_RESET=1 npm run test:e2e führt den Reset vor den Tests aus.
# Bekannte Stolpersteine
| Thema | Hinweis |
|---|---|
| Joomla-Debugmodus | Der Abfrage-Monitor sammelt bei langen CLI-Läufen alle SQL-Statements im Speicher; der Smart-Search-Adapter schaltet ihn während der Indizierung ab. |
| Geführte Touren | Das Joomla-Plugin startet nach dem ersten Backend-Login eine Tour und navigiert weg; für automatisierte Tests deaktivieren die Fixtures es. |
| Formular-XML | Felder dürfen nicht in <fields name="jform"> liegen, wenn das Formular mit control=jform gerendert wird. |
| OPcache | Siehe Einstellungen → Cache. |