# 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: CacheStoreInterface mit FileStore (PHP-Array-Dateien, OPcache) und RedisStore. CatalogRepository liest daraus, SyncService schreibt.
  • 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.
Last Updated: 9/16/2026, 8:49:13 AM