create(); $auftragnehmer = Auftragnehmer::factory()->create(['mandant_id' => $projekt->mandant_id]); [$pfa3, $pfa4] = Abschnitt::factory()->count(2)->create(['projekt_id' => $projekt->id]); Vertrag::factory()->create(['abschnitt_id' => $pfa3->id, 'auftragnehmer_id' => $auftragnehmer->id]); Vertrag::factory()->create(['abschnitt_id' => $pfa4->id, 'auftragnehmer_id' => $auftragnehmer->id]); $this->assertEqualsCanonicalizing( [$pfa3->id, $pfa4->id], $auftragnehmer->vertraege()->pluck('abschnitt_id')->all(), ); $this->assertSame(2, $projekt->vertraege()->count()); } public function test_nachtrag_hat_mka_bezug_status_und_positionen_in_reihenfolge(): void { $nachtrag = Nachtrag::factory()->create(['mka_bezug' => ['MKA 131', 'MKA 133']]); Nachtragsposition::factory()->create(['nachtrag_id' => $nachtrag->id, 'oz' => 'N1.0020', 'sortierung' => 2]); Nachtragsposition::factory()->create(['nachtrag_id' => $nachtrag->id, 'oz' => 'N1.0010', 'sortierung' => 1]); $nachtrag = $nachtrag->fresh(); $this->assertNotNull($nachtrag); $this->assertSame(['MKA 131', 'MKA 133'], $nachtrag->mka_bezug); $this->assertSame(NachtragStatus::Eingegangen, $nachtrag->status); $this->assertSame(['N1.0010', 'N1.0020'], $nachtrag->positionen->pluck('oz')->all()); } public function test_nachtragsnummer_ist_je_vertrag_eindeutig(): void { $vertrag = Vertrag::factory()->create(); Nachtrag::factory()->create(['vertrag_id' => $vertrag->id, 'nummer' => 'N14']); $this->expectException(QueryException::class); Nachtrag::factory()->create(['vertrag_id' => $vertrag->id, 'nummer' => 'N14']); } public function test_projektmitglieder_haben_eine_rolle(): void { $projekt = Projekt::factory()->create(); $leiterin = User::factory()->create(); $leser = User::factory()->create(); $aussenstehend = User::factory()->create(); $projekt->mitglieder()->attach($leiterin, ['rolle' => Projektrolle::Projektleiter->value]); $projekt->mitglieder()->attach($leser, ['rolle' => Projektrolle::Leser->value]); $this->assertSame(Projektrolle::Projektleiter, $projekt->rolleVon($leiterin)); $this->assertSame(Projektrolle::Leser, $projekt->rolleVon($leser)); $this->assertNull($projekt->rolleVon($aussenstehend)); $this->assertTrue($leiterin->projekte()->whereKey($projekt->id)->exists()); } public function test_vertrauliches_dokument_hat_benannte_freigaben(): void { $nachtrag = Nachtrag::factory()->create(); $dokument = Dokument::factory()->zu($nachtrag, DokumentKategorie::Anlage)->vertraulich()->create(); $berechtigt = User::factory()->create(); $dokument->freigaben()->attach($berechtigt); $this->assertTrue($dokument->vertraulich); $this->assertSame([$berechtigt->id], $dokument->freigaben()->pluck('users.id')->all()); $this->assertSame(1, $nachtrag->dokumente()->count()); } public function test_archiviertes_projekt_wird_erkannt(): void { $this->assertTrue(Projekt::factory()->archiviert()->create()->istArchiviert()); $this->assertFalse(Projekt::factory()->create()->istArchiviert()); } }