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' ); } }