login()->loginNami(); $activity = Activity::factory()->inNami(67)->name('abc')->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'Lorem', 'is_filterable' => false, 'subactivities' => [], ]); $response->assertSessionHasErrors(['nami_id' => 'Aktivität ist in NaMi. Update des Namens nicht möglich.']); } public function testItCanUpdateSubactivitiesOfNamiActivity(): void { $this->login()->loginNami(); $activity = Activity::factory()->inNami(67)->name('abc')->create(); $subactivity = Subactivity::factory()->create(); $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'abc', 'is_filterable' => false, 'subactivities' => [$subactivity->id], ]); $this->assertDatabaseHas('activity_subactivity', ['activity_id' => $activity->id, 'subactivity_id' => $subactivity->id]); } public function testItCannotRemoveANamiSubactivityFromANamiActivity(): void { $this->login()->loginNami(); $activity = Activity::factory()->inNami(67)->name('abc')->has(Subactivity::factory()->inNami(69))->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'abc', 'is_filterable' => false, 'subactivities' => [], ]); $response->assertSessionHasErrors(['nami_id' => 'Untertätigkeit kann nicht entfernt werden.']); } public function testItCannotAddANamiSubactivityToANamiActivity(): void { $this->login()->loginNami(); $activity = Activity::factory()->inNami(67)->name('abc')->create(); $subactivity = Subactivity::factory()->inNami(60)->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'abc', 'is_filterable' => false, 'subactivities' => [$subactivity->id], ]); $response->assertSessionHasErrors(['nami_id' => 'Untertätigkeit kann nicht hinzugefügt werden.']); } public function testItCannotRemoveANamiSubactivityFromANamiActivityAndSetAnother(): void { $this->login()->loginNami(); $activity = Activity::factory()->inNami(67)->name('abc')->has(Subactivity::factory()->inNami(69))->create(); $otherSubactivity = Subactivity::factory()->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'abc', 'is_filterable' => false, 'subactivities' => [$otherSubactivity->id], ]); $response->assertSessionHasErrors(['nami_id' => 'Untertätigkeit kann nicht entfernt werden.']); } public function testNameIsRequired(): void { $this->login()->loginNami(); $activity = Activity::factory()->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => '', 'is_filterable' => true, ]); $response->assertSessionHasErrors(['name' => 'Name ist erforderlich.']); $response->assertSessionHasErrors(['subactivities' => 'Untergliederungen muss vorhanden sein.']); } public function testItUpdatesName(): void { $this->login()->loginNami(); $activity = Activity::factory()->name('UUU')->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'Lorem', 'is_filterable' => true, 'subactivities' => [], ]); $response->assertRedirect('/activity'); $this->assertDatabaseHas('activities', ['name' => 'Lorem', 'is_filterable' => true]); } public function testItSetsSubactivities(): void { $this->login()->loginNami(); $activity = Activity::factory()->create(); $subactivity = Subactivity::factory()->create(); $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'Lorem', 'is_filterable' => false, 'subactivities' => [$subactivity->id], ]); $this->assertDatabaseHas('activity_subactivity', ['activity_id' => $activity->id, 'subactivity_id' => $subactivity->id]); } public function testItCannotSetNamiId(): void { $this->login()->loginNami(); $activity = Activity::factory()->create(); $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'Lorem', 'nami_id' => 66, 'is_filterable' => false, 'subactivities' => [], ]); $this->assertDatabaseHas('activities', ['nami_id' => null]); } public function testItUnsetsSubactivities(): void { $this->login()->loginNami(); $activity = Activity::factory() ->hasAttached(Subactivity::factory()) ->create(); $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'Lorem', 'is_filterable' => false, 'subactivities' => [], ]); $this->assertDatabaseEmpty('activity_subactivity'); } public function testItCannotSetSubactivityIfItStillHasMembers(): void { $this->login()->loginNami(); $activity = Activity::factory()->create(); $subactivity = Subactivity::factory()->hasAttached($activity)->create(); $newSubactivity = Subactivity::factory()->create(); Member::factory()->defaults()->has(Membership::factory()->for($activity)->for($subactivity))->create(); $response = $this->patch(route('activity.update', ['activity' => $activity]), [ 'name' => 'abc', 'is_filterable' => false, 'subactivities' => [$newSubactivity->id], ]); $response->assertSessionHasErrors(['subactivities' => 'Untergliederung hat noch Mitglieder.']); } }