Steuerkram/tests/87_ViewHelperTest.php

61 lines
3.2 KiB
PHP
Raw Permalink 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\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');
}
}