Skip to content

CI: PHP-CS-Fixer, PHPUnit und rexstan - #27

Merged
dergel merged 11 commits into
mainfrom
ci/code-quality
Oct 24, 2026
Merged

dergel merged 11 commits into
mainfrom
ci/code-quality

Conversation

@dergel

@dergel dergel commented Oct 24, 2026

Copy link
Copy Markdown
Member

Code-Style, Unit-Tests und statische Analyse laufen jetzt in der CI, aufgebaut wie bei ycom und yform:

  • PHP-CS-Fixer mit redaxo/php-cs-fixer-config. Der Code ist einmal komplett formatiert, in einem eigenen, rein mechanischen Commit.
  • PHPUnit: 24 Tests in tests/unit, ohne Netz, in einer frisch installierten REDAXO-Instanz.
  • rexstan: PHPStan Level 5, mit YCom, api und cronjob, damit deren Klassen aufgelöst werden.

Abweichung von ycom: Die Werkzeuge haben ein eigenes composer.json in .tools/, und die Workflows kopieren vendor/ mit. Hier ist vendor/ eingecheckt und enthält die Laufzeit-Abhängigkeiten. Ein require-dev im AddOn würde PHPUnit früher oder später in das ausgelieferte Paket bringen. installer_ignore hält die Dev-Dateien aus dem Installer.

rexstan hat beim ersten Lauf einen echten Fehler gefunden: Einen Änderungswunsch vor der Freigabe zu bearbeiten, brach immer mit einem TypeError ab. Zwei Kopiermethoden in ChangeRequest übergaben ihre Werte nach Einführung von reviewedVia um eine Stelle verschoben. Behoben, mit Regressionstest im Harness und als Unit-Test; beide schlagen ohne den Fix fehl.

Die übrigen Befunde waren doppelte Prüfungen und fehlende Typangaben. Laufzeitprüfungen auf JSON-Eingaben bleiben bestehen und sind mit einem begründeten @phpstan-ignore markiert, statt in einer Baseline zu verschwinden.

Der komplette Harness in .claude/tests ist nach jedem Schritt grün.


Dieser Text wurde durch eine KI erstellt.

dergel added 11 commits October 24, 2026 14:18
Rein mechanisch durch php-cs-fixer: Importe statt voll qualifizierter Namen,
Konstanten vor Methoden, leere Konstruktoren einzeilig. Keine inhaltliche
Aenderung; der komplette Test-Harness laeuft danach unveraendert gruen.
ChangeRequest::withStatus() und withPayloadEdited() reichen alle
Konstruktorargumente positionell weiter. Bei der Einfuehrung von reviewedVia
wurden beide nicht angepasst; ab appliedAt rutschte jedes Feld eine Stelle,
createdAt landete in applyError. ChangeService::editPayload() - die Korrektur
eines Vorschlags im Backend - scheiterte damit bei jedem Wunsch.

Gefunden von rexstan. change-storage-test.php prueft jetzt, dass beide Kopien
gebaut werden und alle Felder an ihrem Platz bleiben.
- PendingUploadStore: rawMsg() bekam ein float aus round()
- MetaTarget: Traeger als self::CARRIER_* typisiert, damit match vollstaendig ist
- ChangeService: Veto aus dem Extension Point als string|null typisiert,
  ungenutztes decodeIdList() entfernt (Rest der entfernten Modul-Liste)
- ChangeRequestStore, ScopeRegistry, AuthorizationEndpoint, Router, settings:
  doppelte Pruefungen entfernt
- ChangePayloadBuilder::describe(): optionalen Schluessel modules deklariert
- Laufzeitpruefungen auf JSON-Eingaben bleiben, mit begruendetem
  @PHPStan-Ignore; mcp.scope-mapping: @var auf das, was POST garantiert
Drei Workflows, Unit-Tests unter tests/unit (24 Tests, ohne Netz), Werkzeuge
in .tools/ mit eigenem composer.json. Anders als bei ycom kopieren die
Workflows vendor/ mit, weil es eingecheckt ist und die Laufzeit-Abhaengigkeiten
enthaelt; aus demselben Grund gibt es kein require-dev im AddOn selbst.
installer_ignore haelt die Dev-Dateien aus dem Installer-Paket.
'2.*' liess rexstan 3.0-beta2 durch, weil eine Vorabversion vor 3.0
einsortiert wird; rexstan 3 kennt RexStanUserConfig nicht mehr unter dem
alten Namen.
rexstan 2.0.36 brach in den parallelen Workern mit einem psr/log-Konflikt ab
(eigenes 1.1.4 gegen 3.x aus dem REDAXO-Kern).
rexstan schliesst */vendor/* aus, auch beim Einlesen. Lokal mit PHPStan
1.12.12 (wie in rexstan 1.0.194) nachgestellt: scanDirectories scheitert
daran, bootstrapFiles nicht.
@dergel
dergel merged commit 243f24c into main Oct 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant