Steuerkram/tests/61_BetragModusToggleTest.php

75 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
/**
* Test 61: Netto/Brutto-Umschalter im Buchungsformular
*
* Prüft, dass im Beleg-Detailview die beiden Umschalt-Buttons für
* Netto- bzw. Bruttobetrag vorhanden sind und die zugehörige JS-Logik
* (Moduswechsel, Umrechnung, Konvertierung vor dem Absenden) existiert.
*/
class BetragModusToggleTest extends TestCase
{
protected string $testName = 'Test 61: Netto/Brutto-Umschalter im Buchungsformular';
public function run(): void
{
$viewFile = __DIR__ . '/../src/Views/belege/detail.php';
$content = file_get_contents($viewFile);
$this->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'
);
}
}