Steuerkram/tests/61_BetragModusToggleTest.php

91 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
/**
* Test 61: Netto/Brutto-Umschalter im Buchungsformular
*
* Prüft, dass in der Teil-View _buchungsform.php die beiden Umschalt-Buttons
* für Netto- bzw. Bruttobetrag vorhanden sind und die zugehörige JS-Logik
* (Moduswechsel, Umrechnung, Konvertierung vor dem Absenden) in
* static/js/beleg-form.js existiert.
*/
class BetragModusToggleTest extends TestCase
{
protected string $testName = 'Test 61: Netto/Brutto-Umschalter im Buchungsformular';
public function run(): void
{
$viewFile = __DIR__ . '/../src/Views/belege/_buchungsform.php';
$jsFile = __DIR__ . '/../public/static/js/beleg-form.js';
$viewContent = file_get_contents($viewFile);
$jsContent = file_get_contents($jsFile);
$content = $viewContent . "\n" . $jsContent;
$this->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_modus_netto_btn"')
&& str_contains($content, 'id="betrag_modus_brutto_btn"'),
'Beide Umschalt-Buttons (Netto/Brutto) sind 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, 'onclick='),
'Umschalt-Buttons haben keinen Inline-Handler mehr'
);
$this->assert(
str_contains($jsContent, "_betragModusNettoBtn.addEventListener('click', function () { setBetragModus('netto'); });")
&& str_contains($jsContent, "_betragModusBruttoBtn.addEventListener('click', function () { 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'
);
}
}