assert( $content !== false, 'View-Datei belege/detail.php ist lesbar' ); $this->assert( str_contains($content, 'id="betrag_modus_netto_btn"') && str_contains($content, 'id="betrag_modus_brutto_btn"'), 'Beide Umschalt-Buttons (Netto/Brutto) sind vorhanden' ); $this->assert( str_contains($content, "onclick=\"setBetragModus('netto')\"") && str_contains($content, "onclick=\"setBetragModus('brutto')\""), 'Buttons rufen setBetragModus() mit dem jeweiligen Modus auf' ); $this->assert( str_contains($content, 'function setBetragModus(modus)'), 'JavaScript-Funktion setBetragModus() ist definiert' ); $this->assert( str_contains($content, 'function getBetragModus()'), 'JavaScript-Funktion getBetragModus() ist definiert' ); $this->assert( str_contains($content, "classList.toggle('active'"), 'Aktiver Button wird optisch (CSS-Klasse) hervorgehoben' ); // Vor dem Absenden muss im Brutto-Modus der Feldwert in den Nettobetrag // umgerechnet werden, da das Backend ausschließlich betrag_netto erwartet. $this->assert( str_contains($content, "if (_betragModus !== 'brutto') return;") && str_contains($content, "addEventListener('submit'"), 'Vor dem Absenden wird im Brutto-Modus auf Nettobetrag umgerechnet' ); // CSS-Klasse für den Umschalter muss definiert sein $cssFile = __DIR__ . '/../public/static/css/app.css'; $cssContent = file_get_contents($cssFile); $this->assert( $cssContent !== false && str_contains($cssContent, '.betrag-modus-btn'), 'CSS-Klasse .betrag-modus-btn ist definiert' ); $this->assert( str_contains($cssContent, '.betrag-modus-btn.active'), 'CSS für aktiven Zustand des Umschalters ist definiert' ); } }