Finanzmanager/tests/37_UeberweisungBankZuordnungTest.php
fds2610-bot da8e3784fa Fix #50: Zahlungsverkehr wählt die Bank automatisch zum Auftragskonto
Das Überweisungsformular fragt nur noch das Auftragskonto ab; die passende
Bankverbindung ermittelt Bankzugang::zugangJeKonto() aus der Kontenzuordnung.
Konten ohne konfigurierte Bank stehen in der Auswahl nicht mehr zur Verfügung.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 07:58:07 +02:00

132 lines
4.4 KiB
PHP
Raw 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\Bankzugang;
use Finanzmanager\Models\Konto;
use Finanzmanager\Models\Zahlungsauftrag;
/**
* Automatische Bankauswahl im Zahlungsverkehr.
*
* Beim Erfassen einer Überweisung wählt der Nutzer nur noch das Auftragskonto;
* die Bankverbindung ergibt sich aus `Bankzugang::zugangJeKonto()`. Konten ohne
* konfigurierte Bank tauchen dort nicht auf und dürfen deshalb auch nicht als
* Auftragskonto zur Wahl stehen.
*/
class UeberweisungBankZuordnungTest extends TestCase
{
protected string $testName = 'Test 37: Überweisung – automatische Bankzuordnung';
private int $giro = 0;
private int $ohneBank = 0;
private int $zugang = 0;
public function run(): void
{
$this->mandantAnlegen();
$this->stammdaten();
$this->kontoOhneBankStehtNichtInDerZuordnung();
$this->zugeordnetesKontoStehtInDerZuordnung();
$this->einDeaktivierterZugangFaelltHeraus();
$this->derAuftragUebernimmtDieBankAutomatisch();
}
private function stammdaten(): void
{
$this->giro = Konto::anlegen([
'name' => 'Zahlungsverkehr-Giro', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 1,
]);
$this->ohneBank = Konto::anlegen([
'name' => 'Zahlungsverkehr-Sparbuch', 'kontoart' => 'sparkonto', 'anfangssaldo' => 0, 'aktiv' => 1,
]);
$this->zugang = Bankzugang::anlegen([
'name' => 'Zahlungsverkehr-Bank',
'bankname' => 'Zahlungsverkehr-Bank AG',
'blz' => '12030000',
'fints_url' => 'https://banking.example.org/fints',
'benutzerkennung' => 'testkunde',
'pin' => 'geheim1234',
'abrufzeitraum' => 'letzter_abruf',
'aktiv' => 1,
]);
}
private function kontoOhneBankStehtNichtInDerZuordnung(): void
{
$this->assert(
!array_key_exists($this->ohneBank, Bankzugang::zugangJeKonto()),
'Ein Konto ohne Bankverbindung fehlt in der Zuordnung'
);
}
private function zugeordnetesKontoStehtInDerZuordnung(): void
{
$bankkonto = Bankzugang::findeOderLegeKontoAn(
$this->zugang,
'DE29120300000000202052',
'202052',
'Girokonto'
);
Bankzugang::ordneKontoZu((int)$bankkonto['id'], $this->giro);
$this->assertEquals(
$this->zugang,
Bankzugang::zugangJeKonto()[$this->giro] ?? null,
'Das zugeordnete Konto verweist auf seine Bank'
);
}
private function einDeaktivierterZugangFaelltHeraus(): void
{
Bankzugang::speichern($this->zugang, [
'name' => 'Zahlungsverkehr-Bank',
'bankname' => 'Zahlungsverkehr-Bank AG',
'blz' => '12030000',
'fints_url' => 'https://banking.example.org/fints',
'benutzerkennung' => 'testkunde',
'abrufzeitraum' => 'letzter_abruf',
'aktiv' => 0,
]);
$this->assert(
!array_key_exists($this->giro, Bankzugang::zugangJeKonto()),
'Ein deaktivierter Zugang taugt nicht als automatische Auswahl'
);
Bankzugang::speichern($this->zugang, [
'name' => 'Zahlungsverkehr-Bank',
'bankname' => 'Zahlungsverkehr-Bank AG',
'blz' => '12030000',
'fints_url' => 'https://banking.example.org/fints',
'benutzerkennung' => 'testkunde',
'abrufzeitraum' => 'letzter_abruf',
'aktiv' => 1,
]);
}
/**
* Genau das, was der Controller beim Anlegen tut: die Bank kommt aus der
* Zuordnung, nicht aus einer eigenen Formularauswahl.
*/
private function derAuftragUebernimmtDieBankAutomatisch(): void
{
$zugangId = Bankzugang::zugangJeKonto()[$this->giro] ?? null;
$auftragId = Zahlungsauftrag::anlegen([
'konto_id' => $this->giro,
'zugang_id' => $zugangId,
'empfaenger' => 'Beispielempfänger',
'iban' => 'DE02120300000000202051',
'betrag' => 42.50,
]);
$this->assertEquals(
$this->zugang,
(int)Zahlungsauftrag::find($auftragId)['zugang_id'],
'Der Auftrag trägt die automatisch ermittelte Bank'
);
}
}