assert( $viewContent !== false, 'Teil-View belege/_buchungsform.php ist lesbar' ); $this->assert( $jsContent !== false, 'JS-Datei static/js/beleg-form.js ist lesbar' ); $this->assert( str_contains($content, 'id="betrag_netto_input"'), 'Nettobetrag-Input hat id="betrag_netto_input"' ); $this->assert( str_contains($content, 'id="ust_brutto_anzeige"'), 'Anzeigebereich id="ust_brutto_anzeige" vorhanden' ); // Kein Inline-Handler mehr im Markup (CSP) – die Verdrahtung läuft über // zentrale addEventListener()-Aufrufe in beleg-form.js. $this->assert( !str_contains($viewContent, 'oninput=') && !str_contains($viewContent, 'onchange='), 'Nettobetrag-Input/USt-Satz-Select haben keine Inline-Handler mehr' ); $this->assert( str_contains($jsContent, 'function updateNettoAnzeige()'), 'JavaScript-Funktion updateNettoAnzeige() ist definiert' ); $this->assert( str_contains($jsContent, "_betragNettoInput.addEventListener('input', updateNettoAnzeige)"), 'Nettobetrag-Input ruft updateNettoAnzeige() bei Eingabe auf' ); // Prüfe dass USt-Satz-Änderung auch updateNettoAnzeige aufruft $this->assert( str_contains($jsContent, '_ustSatzSelect.addEventListener') && str_contains($jsContent, 'updateSteuerartVisibility();') && str_contains($jsContent, 'updateNettoAnzeige();'), 'USt-Satz-Änderung löst auch updateNettoAnzeige() aus' ); } }