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