161 lines
5.4 KiB
PHP
161 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace App\Tests\Entity;
|
|
|
|
use App\Entity\Bundesland;
|
|
use App\Entity\Immobilie;
|
|
use App\Entity\User;
|
|
use App\Enum\ImmobilienTyp;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class ImmobilieTest extends TestCase
|
|
{
|
|
private User $verwalter;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->verwalter = new User();
|
|
$this->verwalter->setName('Test Verwalter');
|
|
$this->verwalter->setEmail('verwalter@example.com');
|
|
}
|
|
|
|
public function testImmobilieCreation(): void
|
|
{
|
|
$immobilie = new Immobilie();
|
|
$immobilie->setVerwalter($this->verwalter);
|
|
$immobilie->setAdresse('Teststraße 123, 12345 Teststadt');
|
|
$immobilie->setWohnflaeche(100);
|
|
$immobilie->setNutzflaeche(20);
|
|
$immobilie->setZimmer(4);
|
|
$immobilie->setTyp(ImmobilienTyp::WOHNUNG);
|
|
|
|
$this->assertEquals('Teststraße 123, 12345 Teststadt', $immobilie->getAdresse());
|
|
$this->assertEquals(100, $immobilie->getWohnflaeche());
|
|
$this->assertEquals(20, $immobilie->getNutzflaeche());
|
|
$this->assertEquals(4, $immobilie->getZimmer());
|
|
$this->assertEquals(ImmobilienTyp::WOHNUNG, $immobilie->getTyp());
|
|
$this->assertEquals($this->verwalter, $immobilie->getVerwalter());
|
|
}
|
|
|
|
public function testGesamtflaecheCalculation(): void
|
|
{
|
|
$immobilie = new Immobilie();
|
|
$immobilie->setVerwalter($this->verwalter);
|
|
$immobilie->setAdresse('Test');
|
|
$immobilie->setWohnflaeche(85);
|
|
$immobilie->setNutzflaeche(15);
|
|
$immobilie->setZimmer(3);
|
|
|
|
$this->assertEquals(100, $immobilie->getGesamtflaeche());
|
|
}
|
|
|
|
public function testKaufnebenkostenWithoutBundesland(): void
|
|
{
|
|
$immobilie = new Immobilie();
|
|
$immobilie->setVerwalter($this->verwalter);
|
|
$immobilie->setAdresse('Test');
|
|
$immobilie->setWohnflaeche(100);
|
|
$immobilie->setNutzflaeche(0);
|
|
$immobilie->setZimmer(3);
|
|
$immobilie->setKaufpreis(300000);
|
|
|
|
$kosten = $immobilie->getKaufnebenkosten();
|
|
|
|
$this->assertEquals(0, $kosten['notar']);
|
|
$this->assertEquals(0, $kosten['grundbuch']);
|
|
$this->assertEquals(0, $kosten['grunderwerbsteuer']);
|
|
$this->assertEquals(0, $kosten['gesamt']);
|
|
}
|
|
|
|
public function testKaufnebenkostenWithBundesland(): void
|
|
{
|
|
$bundesland = new Bundesland();
|
|
$bundesland->setName('Bayern');
|
|
$bundesland->setGrunderwerbsteuer(3.5);
|
|
|
|
$immobilie = new Immobilie();
|
|
$immobilie->setVerwalter($this->verwalter);
|
|
$immobilie->setAdresse('Test');
|
|
$immobilie->setWohnflaeche(100);
|
|
$immobilie->setNutzflaeche(0);
|
|
$immobilie->setZimmer(3);
|
|
$immobilie->setKaufpreis(300000);
|
|
$immobilie->setBundesland($bundesland);
|
|
|
|
$kosten = $immobilie->getKaufnebenkosten();
|
|
|
|
// Notar: 1.5% von 300000 = 4500
|
|
$this->assertEquals(4500, $kosten['notar']);
|
|
|
|
// Grundbuch: 0.5% von 300000 = 1500
|
|
$this->assertEquals(1500, $kosten['grundbuch']);
|
|
|
|
// Grunderwerbsteuer: 3.5% von 300000 = 10500
|
|
$this->assertEqualsWithDelta(10500, $kosten['grunderwerbsteuer'], 0.01);
|
|
|
|
// Gesamt: 4500 + 1500 + 10500 = 16500
|
|
$this->assertEquals(16500, $kosten['gesamt']);
|
|
}
|
|
|
|
public function testKaufnebenkostenWithDifferentBundesland(): void
|
|
{
|
|
$bundesland = new Bundesland();
|
|
$bundesland->setName('Nordrhein-Westfalen');
|
|
$bundesland->setGrunderwerbsteuer(6.5);
|
|
|
|
$immobilie = new Immobilie();
|
|
$immobilie->setVerwalter($this->verwalter);
|
|
$immobilie->setAdresse('Test');
|
|
$immobilie->setWohnflaeche(100);
|
|
$immobilie->setNutzflaeche(0);
|
|
$immobilie->setZimmer(3);
|
|
$immobilie->setKaufpreis(400000);
|
|
$immobilie->setBundesland($bundesland);
|
|
|
|
$kosten = $immobilie->getKaufnebenkosten();
|
|
|
|
// Notar: 1.5% von 400000 = 6000
|
|
$this->assertEquals(6000, $kosten['notar']);
|
|
|
|
// Grundbuch: 0.5% von 400000 = 2000
|
|
$this->assertEquals(2000, $kosten['grundbuch']);
|
|
|
|
// Grunderwerbsteuer: 6.5% von 400000 = 26000
|
|
$this->assertEquals(26000, $kosten['grunderwerbsteuer']);
|
|
|
|
// Gesamt: 6000 + 2000 + 26000 = 34000
|
|
$this->assertEquals(34000, $kosten['gesamt']);
|
|
}
|
|
|
|
public function testDefaultValues(): void
|
|
{
|
|
$immobilie = new Immobilie();
|
|
|
|
$this->assertEquals(ImmobilienTyp::WOHNUNG, $immobilie->getTyp());
|
|
$this->assertEquals(0, $immobilie->getNutzflaeche());
|
|
$this->assertFalse($immobilie->getGarage());
|
|
$this->assertNotNull($immobilie->getCreatedAt());
|
|
$this->assertNotNull($immobilie->getUpdatedAt());
|
|
}
|
|
|
|
public function testOptionalFields(): void
|
|
{
|
|
$immobilie = new Immobilie();
|
|
$immobilie->setVerwalter($this->verwalter);
|
|
$immobilie->setAdresse('Test');
|
|
$immobilie->setWohnflaeche(100);
|
|
$immobilie->setNutzflaeche(0);
|
|
$immobilie->setZimmer(3);
|
|
|
|
$immobilie->setBaujahr(2020);
|
|
$immobilie->setEtage(3);
|
|
$immobilie->setAbschreibungszeit(50);
|
|
$immobilie->setBeschreibung('Schöne Wohnung');
|
|
|
|
$this->assertEquals(2020, $immobilie->getBaujahr());
|
|
$this->assertEquals(3, $immobilie->getEtage());
|
|
$this->assertEquals(50, $immobilie->getAbschreibungszeit());
|
|
$this->assertEquals('Schöne Wohnung', $immobilie->getBeschreibung());
|
|
}
|
|
}
|