84 lines
3 KiB
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'
|
|
);
|
|
}
|
|
}
|