assertNotEmpty($anlageKonto, 'Anlagevermögens-Konto vorhanden'); $bankKonto = \Steuerkram\Database::fetchOne( "SELECT id FROM accounts WHERE kontenart = 'Zahlungskonto' AND aktiv = 1 LIMIT 1" ); $this->assertNotEmpty($bankKonto, 'Zahlungskonto vorhanden'); if (!$anlageKonto || !$bankKonto) { return; } // Beleg anlegen $belegNr = 'ANLAGE-TEST-' . uniqid(); $datum = date('Y-m-d'); $belegId = Beleg::create([ 'beleg_nr' => $belegNr, 'filename' => 'anlage-test.pdf', 'storage_path' => 'static/uploads/test/anlage-test.pdf', 'mime_type' => 'application/pdf', 'file_hash' => hash('sha256', $belegNr), 'beleg_datum' => $datum, 'rechnungs_nr' => 'RE-ANLAGE-001', 'betrag_brutto' => 1190.00, 'belegtyp' => 'Eingangsrechnung', ]); $this->assertGreaterThan(0, $belegId, 'Beleg angelegt'); // Buchung auf Anlagevermögens-Konto, kein bestehendes Asset $buchungId = Booking::create([ 'beleg_id' => $belegId, 'buchungs_datum' => $datum, 'buchungstyp' => 'Ausgabe', 'kategorie_konto_id' => (int)$anlageKonto['id'], 'zahlungskonto_id' => (int)$bankKonto['id'], 'betrag_netto' => 1000.00, 'ust_satz' => 19.0, 'buchungstext' => 'Test-Notebook', 'asset_id' => null, ]); $this->assertGreaterThan(0, $buchungId, 'Buchung auf Anlagekonto angelegt'); // Neues Asset muss automatisch existieren und mit Buchungstext befüllt sein $buchung = Booking::find($buchungId); $this->assertNotEmpty($buchung, 'Buchung abrufbar'); // In der Praxis legt BookingController das Asset an und setzt asset_id. // Hier testen wir, dass Asset::create() korrekt einen Datensatz erzeugt, // der die Buchungsdaten spiegelt – so wie BookingController es tut. $assetId = Asset::create([ 'bezeichnung' => 'Test-Notebook', 'account_id' => (int)$anlageKonto['id'], 'anschaffungsdatum' => $datum, 'anschaffungskosten' => 1000.00, ]); $this->assertGreaterThan(0, $assetId, 'Asset wird aus Buchungsdaten angelegt (ID > 0)'); $asset = Asset::find($assetId); $this->assertNotEmpty($asset, 'Asset abrufbar'); $this->assertEquals('Test-Notebook', $asset['bezeichnung'], 'Bezeichnung = Buchungstext'); $this->assertEquals($datum, $asset['anschaffungsdatum'], 'Anschaffungsdatum = Buchungsdatum'); $this->assertEquals(1000.00, (float)$asset['anschaffungskosten'], 'Anschaffungskosten = Nettobetrag'); $this->assertEquals((int)$anlageKonto['id'], (int)$asset['account_id'], 'Account-ID verknüpft'); } }