61 lines
3.2 KiB
PHP
61 lines
3.2 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
use Steuerkram\View;
|
||
|
||
/**
|
||
* Test 87: View::kontrastfarbe() und View::gruppiereKonten() (Fix #158)
|
||
*
|
||
* Kontrastfarben-Formel und Kontengruppierung waren mehrfach über die Views
|
||
* kopiert, mit bereits eingetretener Divergenz beim Zahlungskonten-Filter.
|
||
* Dieser Test hält das gebündelte Verhalten in src/View.php fest.
|
||
*/
|
||
class ViewHelperTest extends TestCase
|
||
{
|
||
protected string $testName = 'Test 87: View-Helfer (Kontrastfarbe, Kontengruppierung)';
|
||
|
||
public function run(): void
|
||
{
|
||
$this->assertEquals('#1e293b', View::kontrastfarbe('#ffffff'), 'Heller Hintergrund → dunkle Schrift');
|
||
$this->assertEquals('#ffffff', View::kontrastfarbe('#000000'), 'Dunkler Hintergrund → helle Schrift');
|
||
|
||
// Ungültige/zu kurze Werte liefern die Standardfarbe statt einer
|
||
// stillen Rechnung auf 0 (die vormals immer "hell" ergeben hätte).
|
||
$this->assertEquals('#1e293b', View::kontrastfarbe(''), 'Leerer Wert → Standardfarbe');
|
||
$this->assertEquals('#1e293b', View::kontrastfarbe('abc'), 'Wert ohne # → Standardfarbe');
|
||
$this->assertEquals('#1e293b', View::kontrastfarbe('#xyz123'), 'Ungültiges Hex → Standardfarbe');
|
||
|
||
// Dreistellige Kurzform wird korrekt expandiert: #abc → #aabbcc,
|
||
// Helligkeit (0.299*170+0.587*187+0.114*204=182.9) > 128 → dunkle Schrift
|
||
$this->assertEquals('#1e293b', View::kontrastfarbe('#abc'), 'Kurzform #abc wird expandiert');
|
||
|
||
// Eigene Standardfarben werden respektiert
|
||
$this->assertEquals('dunkel', View::kontrastfarbe('#ffffff', 'dunkel', 'hell'), 'Eigene Standardfarben (hell)');
|
||
$this->assertEquals('dunkel', View::kontrastfarbe('', 'dunkel', 'hell'), 'Eigene Standardfarben (ungültig)');
|
||
|
||
$accounts = [
|
||
['kontonummer' => '4400', 'kontenart' => 'Betriebseinnahme'],
|
||
['kontonummer' => '1000', 'kontenart' => 'Zahlungskonto'], // Kasse
|
||
['kontonummer' => '1200', 'kontenart' => 'Zahlungskonto'], // Bank 1
|
||
['kontonummer' => '1299', 'kontenart' => 'Zahlungskonto'], // Grenzwert oben
|
||
['kontonummer' => '1300', 'kontenart' => 'Zahlungskonto'], // außerhalb
|
||
['kontonummer' => '1800', 'kontenart' => 'Privat'],
|
||
];
|
||
|
||
$ohneFilter = View::gruppiereKonten($accounts);
|
||
$this->assertEquals(6, array_sum(array_map('count', $ohneFilter)), 'Ohne Filter enthält gruppiereKonten() alle Konten');
|
||
$this->assertEquals(4, count($ohneFilter['Zahlungskonto']), 'Ohne Filter bleiben alle Zahlungskonten in der Gruppe');
|
||
$this->assertEquals(1, count($ohneFilter['Betriebseinnahme']), 'Andere Kontenarten bleiben unangetastet');
|
||
$this->assertEquals(1, count($ohneFilter['Privat']), 'Andere Kontenarten bleiben unangetastet');
|
||
|
||
$mitFilter = View::gruppiereKonten($accounts, true);
|
||
$this->assertEquals(
|
||
['1200', '1299'],
|
||
array_column($mitFilter['Zahlungskonto'], 'kontonummer'),
|
||
'Mit Filter bleiben nur Zahlungskonten 1200–1299'
|
||
);
|
||
$this->assertEquals(1, count($mitFilter['Betriebseinnahme']), 'Filter lässt andere Kontenarten unangetastet');
|
||
$this->assertEquals(1, count($mitFilter['Privat']), 'Filter lässt andere Kontenarten unangetastet');
|
||
}
|
||
}
|