Steuerkram/tests/61_BetragModusToggleTest.php

84 lines
3 KiB
PHP

<?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'
);
$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'
);
}
}