Steuerkram/tests/104_BankSortierungAeltesteZuerstTest.php

69 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
use Steuerkram\Database;
use Steuerkram\Models\BankTransaction;
/**
* Test 104: „Bank buchen“ sortiert standardmäßig älteste zuerst (Issue #219)
*
* Ohne ausdrückliche Sortierrichtung liefert BankTransaction::all() die
* Umsätze aufsteigend nach Wertstellung, damit datumsgetreu gebucht wird.
* Mit dir=desc bleibt die absteigende Sortierung weiterhin wählbar.
*/
class BankSortierungAeltesteZuerstTest extends TestCase
{
protected string $testName = 'Test 104: Bank buchen sortiert standardmäßig älteste zuerst';
public function run(): void
{
Database::execute(
'INSERT INTO bank_import_batches (source_id, filename, row_count) VALUES (NULL, ?, 3)',
['test-104.csv']
);
$batchId = (int)Database::lastInsertId();
$marker = 'T104-' . bin2hex(random_bytes(4));
foreach (['2026-03-15', '2026-01-05', '2026-02-10'] as $datum) {
Database::execute(
'INSERT INTO bank_transactions (batch_id, buchungstag, wertstellung, buchungstext, wert)
VALUES (?, ?, ?, ?, -10.00)',
[$batchId, $datum, $datum, "$marker $datum"]
);
}
$daten = static fn(array $result): array => array_column($result['rows'], 'wertstellung');
$standard = BankTransaction::all(['search' => $marker]);
$this->assertEquals(
['2026-01-05', '2026-02-10', '2026-03-15'],
$daten($standard),
'Ohne dir-Parameter: älteste Wertstellung zuerst'
);
$absteigend = BankTransaction::all(['search' => $marker, 'dir' => 'desc']);
$this->assertEquals(
['2026-03-15', '2026-02-10', '2026-01-05'],
$daten($absteigend),
'dir=desc: neueste Wertstellung zuerst'
);
$ungueltig = BankTransaction::all(['search' => $marker, 'dir' => 'quatsch']);
$this->assertEquals(
['2026-01-05', '2026-02-10', '2026-03-15'],
$daten($ungueltig),
'Ungültiger dir-Wert fällt auf aufsteigend zurück'
);
$view = (string)file_get_contents(dirname(__DIR__) . '/src/Views/bank/index.php');
$this->assert(
str_contains($view, "(\$filter['dir'] ?? 'asc') === 'asc'"),
'Filterauswahl zeigt „Aufsteigend“ als Vorbelegung'
);
$this->assert(
!str_contains($view, "(\$filter['dir'] ?? 'desc')"),
'Filterauswahl belegt nicht mehr „Absteigend“ vor'
);
}
}