69 lines
2.5 KiB
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'
|
|
);
|
|
}
|
|
}
|