create(['land' => Land::AT]); $abschnitt = Abschnitt::factory()->create(['projekt_id' => $projekt->id]); $vertrag = Vertrag::factory()->create(['abschnitt_id' => $abschnitt->id]); $lv = Leistungsverzeichnis::factory()->create(['vertrag_id' => $vertrag->id]); $nachtrag = Nachtrag::factory()->create(['vertrag_id' => $vertrag->id]); $position = Nachtragsposition::factory()->create(['nachtrag_id' => $nachtrag->id]); foreach ([$abschnitt, $vertrag, $lv, $nachtrag, $position] as $datensatz) { $this->assertSame($projekt->mandant_id, $datensatz->mandant_id, $datensatz::class); $this->assertSame(Land::AT, $datensatz->land, $datensatz::class); $this->assertSame($projekt->id, $datensatz->projekt_id, $datensatz::class); } } public function test_dokument_uebernimmt_die_zuordnung_vom_lv(): void { $lv = Leistungsverzeichnis::factory()->create(); $dokument = Dokument::factory()->zu($lv, DokumentKategorie::LvX86)->create(); $this->assertSame($lv->projekt_id, $dokument->projekt_id); $this->assertSame($lv->mandant_id, $dokument->mandant_id); $this->assertTrue($dokument->dokumentable?->is($lv)); $this->assertSame('leistungsverzeichnis', $dokument->dokumentable_type); } public function test_allgemeines_dokument_ohne_projekt_braucht_mandant_und_land(): void { $mandant = Mandant::factory()->create(); $dokument = Dokument::factory()->create([ 'projekt_id' => null, 'mandant_id' => $mandant->id, 'land' => Land::DE, 'kategorie' => DokumentKategorie::Vorlage, ]); $this->assertNull($dokument->projekt_id); $this->assertSame($mandant->id, $dokument->mandant_id); } public function test_vertrag_mit_auftragnehmer_eines_anderen_mandanten_wird_abgewiesen(): void { $abschnitt = Abschnitt::factory()->create(); $fremderAuftragnehmer = Auftragnehmer::factory()->create(); $this->expectException(LogicException::class); Vertrag::factory()->create([ 'abschnitt_id' => $abschnitt->id, 'auftragnehmer_id' => $fremderAuftragnehmer->id, ]); } public function test_abweichender_mandant_beim_anlegen_wird_abgewiesen(): void { $projekt = Projekt::factory()->create(); $andererMandant = Mandant::factory()->create(); $this->expectException(LogicException::class); Abschnitt::factory()->create([ 'projekt_id' => $projekt->id, 'mandant_id' => $andererMandant->id, ]); } public function test_nachtrag_laesst_sich_nicht_in_ein_anderes_projekt_verschieben(): void { $nachtrag = Nachtrag::factory()->create(); $vertragInAnderemProjekt = Vertrag::factory()->create(); $this->expectException(LogicException::class); $nachtrag->update(['vertrag_id' => $vertragInAnderemProjekt->id]); } public function test_nachtrag_darf_innerhalb_des_projekts_den_vertrag_wechseln(): void { $nachtrag = Nachtrag::factory()->create(); $abschnitt = $nachtrag->vertrag->abschnitt; $andererVertrag = Vertrag::factory()->create(['abschnitt_id' => $abschnitt->id]); $nachtrag->update(['vertrag_id' => $andererVertrag->id]); $this->assertSame($andererVertrag->id, $nachtrag->fresh()?->vertrag_id); } }