Finanzmanager/tests/63_DepotbuchungDritterWertTest.php
fds2610-bot 9d771df028 Fix #129: Stück, Kurs und Betrag in der Depotbuchung automatisch berechnen
In „Depotbuchung erfassen“ ergibt sich bei Kauf und Verkauf aus zwei der drei
Felder Betrag, Stück und Kurs das dritte (Betrag = Stück × Kurs). Der
ausgerechnete Wert ist hervorgehoben und zieht nach, wenn sich die anderen
Felder ändern. Serverseitig rechnet Depotbuchung::dritterWert() dieselbe
Regel für den Weg ohne JavaScript.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:41:29 +02:00

52 lines
2.1 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 Finanzmanager\Models\Depotbuchung;
/**
* Fix #129: Bei Kauf und Verkauf ergibt sich aus zwei der drei Angaben Stück,
* Kurs und Betrag die dritte – Betrag = Stück × Kurs. Die Maske rechnet im
* Browser, der Server dieselbe Regel für den Weg ohne JavaScript.
*/
class DepotbuchungDritterWertTest extends TestCase
{
protected string $testName = 'Test 63: Depotbuchung – dritten Wert aus Stück, Kurs und Betrag';
public function run(): void
{
$werte = Depotbuchung::dritterWert('kauf', 12.0, 45.67, 0.0);
$this->assertEquals(548.04, $werte['betrag'], 'Kauf: Betrag = Stück × Kurs');
$this->assertEquals(12.0, $werte['stueck'], 'Kauf: Stück bleibt');
$this->assertEquals(45.67, $werte['kurs'], 'Kauf: Kurs bleibt');
$werte = Depotbuchung::dritterWert('verkauf', 8.0, 0.0, 1000.0);
$this->assertEquals(125.0, $werte['kurs'], 'Verkauf: Kurs = Betrag / Stück');
$werte = Depotbuchung::dritterWert('kauf', 0.0, 3.0, 100.0);
$this->assertEquals(33.333333, $werte['stueck'], 'Kauf: Stück = Betrag / Kurs, sechs Nachkommastellen');
$werte = Depotbuchung::dritterWert('kauf', 10.0, 20.0, 150.0);
$this->assertEquals(
['stueck' => 10.0, 'kurs' => 20.0, 'betrag' => 150.0],
$werte,
'Alle drei angegeben: nichts wird überschrieben'
);
$werte = Depotbuchung::dritterWert('kauf', 0.0, 0.0, 150.0);
$this->assertEquals(
['stueck' => 0.0, 'kurs' => 0.0, 'betrag' => 150.0],
$werte,
'Nur eine Angabe: nichts zu rechnen'
);
$werte = Depotbuchung::dritterWert('dividende', 0.0, 2.0, 50.0);
$this->assertEquals(0.0, $werte['stueck'], 'Dividende: keine Stückzahl aus Betrag und Kurs');
$werte = Depotbuchung::dritterWert('einlage', 5.0, 0.0, 500.0);
$this->assertEquals(0.0, $werte['kurs'], 'Einlieferung: kein Kurs aus Betrag und Stück');
$werte = Depotbuchung::dritterWert('einlage', 5.0, 10.0, 0.0);
$this->assertEquals(50.0, $werte['betrag'], 'Einlieferung: Betrag aus Stück × Kurs wie bisher');
}
}