# Steuerkram – Entwicklungsregeln ## Tech Stack PHP 8.3+, MySQL, PSR-4 (Namespace `Steuerkram\`), Composer, kein Framework. MVC: `src/Controllers/`, `src/Models/`, `src/Services/`, `src/Views/`. ## Coding-Regeln - Kein `var_dump`, kein `die()` in Produktionscode. - Neue Libraries nur nach expliziter Rückfrage einbinden. - Bestehenden Code-Stil beibehalten (declare strict_types, 4 Spaces). - SQL ausschließlich über `Database::fetchAll/fetchOne/execute()` mit Prepared Statements. ## Tests **Regel: Jedes neue Feature bekommt einen eigenen Test.** Tests liegen in `tests/` und folgen dem Namensschema `NN_FunktionsnameTest.php`. Jede Testklasse erweitert `TestCase` und implementiert `run()`. ```bash php tests/run.php # alle Tests ausführen ./scripts/run-tests.sh # Tests + automatische Issue-Erstellung bei Fehlern ./scripts/run-tests.sh 42 # Tests; bei Fehlern Kommentar in Issue #42 ``` ### Neuen Test erstellen 1. Datei `tests/NN_MeinFeatureTest.php` anlegen (NN = nächste freie Nummer) 2. Klasse `MeinFeatureTest extends TestCase` 3. `protected string $testName = 'Test NN: Beschreibung';` 4. Methode `public function run(): void` mit Assertions implementieren 5. Transaktions-Isolation ist automatisch (setUp/tearDown in TestCase) ### Assertion-Methoden ```php $this->assert(bool, 'Beschreibung'); $this->assertEquals($erwartet, $ist, 'Beschreibung'); $this->assertGreaterThan($min, $wert, 'Beschreibung'); $this->assertNotEmpty($wert, 'Beschreibung'); ``` ## Commits ``` Fix #NR: Kurze Beschreibung der Änderung ``` Keine Co-Authored-By-Zeile. Keine langen Commit-Messages.