Steuerkram/tests/38_BankSourceFilterFromPostTest.php
fds2610-bot 0dc1b6c3a7 Fix: FinTS-Konto-Auswahl speichern + Bearbeiten-Dialog mit Checkboxen
Session-Lock im SSE-Stream blockierte den parallelen POST der Konto-Auswahl
bis zum Timeout. session_write_close() im Run-Endpoint behebt das.
Bearbeiten-Dialog zeigt gespeicherte Konto-Identifier jetzt als Checkboxen;
Abhaken entfernt aus account_filter, alles abgehakt = Reset.
2026-05-22 12:19:16 +02:00

69 lines
2.9 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);
use Steuerkram\Models\BankSource;
/**
* Test 38: BankSource::computeFilterFromPost – Logik des Bearbeiten-Dialogs
* (Checkbox-Auswahl der aktiven Konten + Reset-Toggle).
*/
class BankSourceFilterFromPostTest extends TestCase
{
protected string $testName = 'Test 38: BankSource::computeFilterFromPost – Filter aus POST';
public function run(): void
{
$current = json_encode(['DE53120300000000123456', 'AN:42:']);
// 1. Reset-Flag hat Vorrang und liefert null
$r = BankSource::computeFilterFromPost($current, [
'reset_account_filter' => '1',
'active_accounts' => ['DE53120300000000123456'], // wird ignoriert
]);
$this->assert($r['update'] === true, 'Reset löst Update aus');
$this->assert($r['value'] === null, 'Reset liefert null');
// 2. Eine Checkbox abgehakt – nur die übrig bleibende wird gespeichert
$r = BankSource::computeFilterFromPost($current, [
'active_accounts' => ['DE53120300000000123456'],
]);
$this->assert($r['update'] === true, 'Teilauswahl löst Update aus');
$decoded = json_decode((string)$r['value'], true);
$this->assertEquals(['DE53120300000000123456'], $decoded, 'Nur angehakter Wert verbleibt');
// 3. Alle Checkboxen abgehakt → Reset-Verhalten (null)
$r = BankSource::computeFilterFromPost($current, [
'active_accounts' => [],
]);
$this->assert($r['update'] === true, 'Alles abgehakt löst Update aus');
$this->assert($r['value'] === null, 'Alles abgehakt → null (wie Reset)');
// 4. Kein active_accounts-Schlüssel im POST → unverändert lassen
$r = BankSource::computeFilterFromPost($current, []);
$this->assert($r['update'] === false, 'Ohne active_accounts kein Update');
// 5. POST enthält fremden Identifier, der nicht im aktuellen Filter steht → wird verworfen
$r = BankSource::computeFilterFromPost($current, [
'active_accounts' => ['DE53120300000000123456', 'FREMD:99:'],
]);
$decoded = json_decode((string)$r['value'], true);
$this->assertEquals(
['DE53120300000000123456'],
$decoded,
'Nur Identifier aus aktuellem Filter werden übernommen'
);
// 6. Aktueller Filter leer (null) + leeres active_accounts → kein Update
$r = BankSource::computeFilterFromPost(null, [
'active_accounts' => [],
]);
$this->assert($r['update'] === false, 'Leerer Filter + leere Auswahl → kein Update');
// 7. Aktueller Filter ist ungültiges JSON → wie leerer Filter behandeln
$r = BankSource::computeFilterFromPost('not-json', [
'active_accounts' => ['DE53120300000000123456'],
]);
$this->assert($r['update'] === false, 'Ungültiges Current-JSON führt zu leerer kept-Liste → kein Update');
}
}