'fints', 'bezeichnung' => 'TestFinTS-Balance', 'blz' => '12030000', 'benutzerkennung' => 'kundennummer', 'pin' => 'g3h31m', ]); $this->assertGreaterThan(0, $id, 'FinTS-Quelle wurde angelegt'); $fresh = BankSource::find($id); $this->assert($fresh['last_balance'] === null, 'Kontostand ist vor dem ersten Abruf leer'); BankSource::updateLastFetched($id, 1234.56); $after1 = BankSource::find($id); $this->assertNotEmpty($after1['last_fetched_at'], 'last_fetched_at wurde gesetzt'); $this->assertEquals(1234.56, (float)$after1['last_balance'], 'Kontostand wurde übernommen'); // Ein Abruf ohne ermittelten Kontostand (z.B. Fehler bei der Kontoabfrage) // darf den zuletzt bekannten Stand nicht löschen. BankSource::updateLastFetched($id, null); $after2 = BankSource::find($id); $this->assertEquals(1234.56, (float)$after2['last_balance'], 'Kontostand bleibt bei fehlendem neuen Wert erhalten'); BankSource::updateLastFetched($id, -42.10); $after3 = BankSource::find($id); $this->assertEquals(-42.10, (float)$after3['last_balance'], 'Negativer Kontostand (Dispo) wird korrekt übernommen'); } finally { if ($oldKey === null) { unset($_ENV['APP_KEY']); } else { $_ENV['APP_KEY'] = $oldKey; } Config::load(); } } }