95 lines
4.1 KiB
PHP
95 lines
4.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Test 8: Lieferantenmanagement
|
|
*
|
|
* Prüft, ob Lieferanten angelegt, gefunden, aktualisiert und
|
|
* einem Beleg zugewiesen werden können.
|
|
*/
|
|
class LieferantTest extends TestCase
|
|
{
|
|
protected string $testName = 'Test 8: Lieferantenmanagement';
|
|
|
|
public function run(): void
|
|
{
|
|
// 1. Lieferant anlegen
|
|
$name = 'Testlieferant GmbH ' . uniqid();
|
|
$id = \Steuerkram\Models\Supplier::create($name);
|
|
$this->assertGreaterThan(0, $id, 'Lieferant wurde angelegt (ID > 0)');
|
|
|
|
// 2. find() liefert den angelegten Lieferanten
|
|
$supplier = \Steuerkram\Models\Supplier::find($id);
|
|
$this->assertNotEmpty($supplier, 'Supplier::find() liefert Datensatz');
|
|
$this->assertEquals($name, $supplier['name'], 'Lieferantenname stimmt überein');
|
|
|
|
// 3. findByName() findet den Lieferanten
|
|
$found = \Steuerkram\Models\Supplier::findByName($name);
|
|
$this->assertNotEmpty($found, 'Supplier::findByName() findet den Lieferanten');
|
|
$this->assertEquals($id, (int)$found['id'], 'ID stimmt überein');
|
|
|
|
// 4. all() enthält den Lieferanten
|
|
$all = \Steuerkram\Models\Supplier::all();
|
|
$inList = false;
|
|
foreach ($all as $s) {
|
|
if ((int)$s['id'] === $id) { $inList = true; break; }
|
|
}
|
|
$this->assert($inList, 'Lieferant erscheint in Supplier::all()');
|
|
|
|
// 5. findOrCreate() gibt vorhandenen zurück
|
|
$id2 = \Steuerkram\Models\Supplier::findOrCreate($name);
|
|
$this->assertEquals($id, $id2, 'findOrCreate() gibt vorhandene ID zurück');
|
|
|
|
// 6. findOrCreate() legt neuen an
|
|
$newName = 'Neuer Lieferant ' . uniqid();
|
|
$id3 = \Steuerkram\Models\Supplier::findOrCreate($newName);
|
|
$this->assertGreaterThan(0, $id3, 'findOrCreate() legt neuen Lieferanten an');
|
|
$this->assert($id3 !== $id, 'Neue ID ist verschieden von der ersten');
|
|
|
|
// 7. update()
|
|
$updatedName = 'Umbenannt ' . uniqid();
|
|
\Steuerkram\Models\Supplier::update($id, $updatedName);
|
|
$updated = \Steuerkram\Models\Supplier::find($id);
|
|
$this->assertEquals($updatedName, $updated['name'], 'Name nach update() korrekt geändert');
|
|
|
|
// 8. Lieferant einem Beleg zuweisen via Beleg::create() + updateMeta()
|
|
$belegNr = 'TEST-SUP-' . uniqid();
|
|
$datum = date('Y-m-d');
|
|
$belegId = \Steuerkram\Models\Beleg::create([
|
|
'beleg_nr' => $belegNr,
|
|
'filename' => 'test-lieferant.pdf',
|
|
'storage_path' => 'static/uploads/test/test-lieferant.pdf',
|
|
'mime_type' => 'application/pdf',
|
|
'file_hash' => hash('sha256', $belegNr),
|
|
'beleg_datum' => $datum,
|
|
'eingangs_datum' => $datum,
|
|
'rechnungs_nr' => 'RE-SUP-001',
|
|
'betrag_brutto' => 59.50,
|
|
'belegtyp' => 'Eingangsrechnung',
|
|
]);
|
|
|
|
\Steuerkram\Models\Beleg::updateMeta($belegId, [
|
|
'rechnungs_nr' => 'RE-SUP-001',
|
|
'belegtyp' => 'Eingangsrechnung',
|
|
'beleg_datum' => $datum,
|
|
'betrag_brutto' => 59.50,
|
|
'supplier_id' => $id3,
|
|
]);
|
|
|
|
$beleg = \Steuerkram\Models\Beleg::find($belegId);
|
|
$this->assertEquals($id3, (int)$beleg['supplier_id'], 'supplier_id korrekt am Beleg gespeichert');
|
|
$this->assertNotEmpty($beleg['supplier_name'], 'supplier_name via JOIN abrufbar');
|
|
|
|
// 9. Löschen: Lieferant der noch verwendet wird kann nicht gelöscht werden
|
|
$deleted = \Steuerkram\Models\Supplier::delete($id3);
|
|
$this->assert(!$deleted, 'Lieferant in Verwendung kann nicht gelöscht werden');
|
|
|
|
// 10. Nicht verwendeten Lieferanten löschen
|
|
$unusedName = 'Ungenutzt ' . uniqid();
|
|
$unusedId = \Steuerkram\Models\Supplier::create($unusedName);
|
|
$deletedOk = \Steuerkram\Models\Supplier::delete($unusedId);
|
|
$this->assert($deletedOk, 'Nicht verwendeter Lieferant kann gelöscht werden');
|
|
$this->assert(!\Steuerkram\Models\Supplier::find($unusedId), 'Gelöschter Lieferant nicht mehr auffindbar');
|
|
}
|
|
}
|