--wip-- [skip ci]
This commit is contained in:
parent
73fb79cd1a
commit
8462a572ac
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
namespace App\Activity\Actions;
|
||||
|
||||
use App\Activity;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Lorisleiva\Actions\ActionRequest;
|
||||
use Lorisleiva\Actions\Concerns\AsAction;
|
||||
|
||||
class ActivityStoreAction
|
||||
{
|
||||
use AsAction;
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $payload
|
||||
*/
|
||||
public function handle(array $payload): Activity
|
||||
{
|
||||
$activity = Activity::create($payload);
|
||||
|
||||
$activity->subactivities()->sync($payload['subactivities']);
|
||||
|
||||
return $activity;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'required|max:255',
|
||||
'subactivities' => 'present|array',
|
||||
];
|
||||
}
|
||||
|
||||
public function asController(ActionRequest $request): RedirectResponse
|
||||
{
|
||||
$this->handle($request->validated());
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
|
@ -193,5 +193,6 @@ return [
|
|||
'event_name' => 'Veranstaltung',
|
||||
'organizer' => 'Veranstalter',
|
||||
'subscription_id' => 'Beitragsart',
|
||||
'subactivities' => 'Untergliederungen',
|
||||
],
|
||||
];
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
|
||||
use App\Activity\Actions\ActivityStoreAction;
|
||||
use App\Activity\Actions\IndexAction as ActivityIndexAction;
|
||||
use App\Contribution\Actions\FormAction as ContributionFormAction;
|
||||
use App\Contribution\ContributionController;
|
||||
|
@ -48,4 +49,5 @@ Route::group(['middleware' => 'auth:web'], function (): void {
|
|||
Route::get('/contribution', ContributionFormAction::class)->name('contribution.form');
|
||||
Route::get('/contribution/generate', [ContributionController::class, 'generate'])->name('contribution.generate');
|
||||
Route::get('/activity', ActivityIndexAction::class)->name('activity.index');
|
||||
Route::post('/activity', ActivityStoreAction::class)->name('activity.store');
|
||||
});
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature\Activity;
|
||||
|
||||
use App\Activity;
|
||||
use App\Subactivity;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Tests\TestCase;
|
||||
|
||||
class StoreTest extends TestCase
|
||||
{
|
||||
use DatabaseTransactions;
|
||||
|
||||
public function testItStoresAnActivity(): void
|
||||
{
|
||||
$this->login()->loginNami()->withoutExceptionHandling();
|
||||
|
||||
$response = $this->from('/activity')->post(route('activity.store'), [
|
||||
'name' => 'Lorem',
|
||||
'subactivities' => [],
|
||||
]);
|
||||
|
||||
$response->assertRedirect('/activity');
|
||||
$this->assertDatabaseHas('activities', [
|
||||
'name' => 'Lorem',
|
||||
'nami_id' => null,
|
||||
]);
|
||||
$this->assertDatabaseCount('activity_subactivity', 0);
|
||||
}
|
||||
|
||||
public function testNameIsRequired(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
|
||||
$response = $this->post(route('activity.store'), []);
|
||||
|
||||
$response->assertSessionHasErrors([
|
||||
'name' => 'Name ist erforderlich.',
|
||||
'subactivities' => 'Untergliederungen muss vorhanden sein.',
|
||||
]);
|
||||
}
|
||||
|
||||
public function testNamiIdIsNotSet(): void
|
||||
{
|
||||
$this->login()->loginNami()->withoutExceptionHandling();
|
||||
|
||||
$response = $this->post(route('activity.store'), [
|
||||
'name' => 'Lorem',
|
||||
'nami_id' => 556,
|
||||
'subactivities' => [],
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('activities', [
|
||||
'nami_id' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testItCanStoreASubactivityWithTheActivity(): void
|
||||
{
|
||||
$this->login()->loginNami()->withoutExceptionHandling();
|
||||
$subactivity = Subactivity::factory()->create();
|
||||
|
||||
$response = $this->from('/activity')->post(route('activity.store'), [
|
||||
'name' => 'Lorem',
|
||||
'subactivities' => [$subactivity->id],
|
||||
]);
|
||||
|
||||
$this->assertDatabaseCount('activity_subactivity', 1);
|
||||
$this->assertDatabaseHas('activity_subactivity', [
|
||||
'activity_id' => Activity::firstWhere('name', 'Lorem')->id,
|
||||
'subactivity_id' => $subactivity->id,
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature\Activity;
|
||||
|
||||
use App\Activity;
|
||||
use App\Subactivity;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UpdateTest extends TestCase
|
||||
{
|
||||
use DatabaseTransactions;
|
||||
|
||||
public function testItCannotUpdateAnActivityFromNami(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
|
||||
$activity = Activity::factory()->inNami(67)->create();
|
||||
|
||||
$response = $this->patch(route('activity.update', ['activity' => $activity]), [
|
||||
'name' => 'Lorem',
|
||||
'subactivities' => [],
|
||||
]);
|
||||
|
||||
$response->assertStatus(403);
|
||||
}
|
||||
|
||||
public function testItUpdatesName(): void
|
||||
{
|
||||
$this->login()->loginNami()->withoutExceptionHandling();
|
||||
$activity = Activity::factory()->name('before')->create();
|
||||
|
||||
$response = $this->from("/activity/{$activity->id}")->patch(route('activity.update', ['activity' => $activity]), [
|
||||
'name' => 'after',
|
||||
'subactivities' => [],
|
||||
]);
|
||||
|
||||
$response->assertRedirect('/activity');
|
||||
$this->assertDatabaseHas('activities', [
|
||||
'name' => 'Lorem',
|
||||
'nami_id' => null,
|
||||
]);
|
||||
$this->assertDatabaseCount('activity_subactivity', 0);
|
||||
}
|
||||
|
||||
public function testNameIsRequired(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
$activity = Activity::factory()->name('before')->create();
|
||||
$response = $this->post(route('activity.store'), []);
|
||||
|
||||
$response->assertSessionHasErrors([
|
||||
'name' => 'Name ist erforderlich.',
|
||||
'subactivities' => 'Untergliederungen muss vorhanden sein.',
|
||||
]);
|
||||
}
|
||||
|
||||
public function testNamiIdIsNotSet(): void
|
||||
{
|
||||
$this->login()->loginNami()->withoutExceptionHandling();
|
||||
|
||||
$response = $this->post(route('activity.store'), [
|
||||
'name' => 'Lorem',
|
||||
'nami_id' => 556,
|
||||
'subactivities' => [],
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('activities', [
|
||||
'nami_id' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testItCanStoreASubactivityWithTheActivity(): void
|
||||
{
|
||||
$this->login()->loginNami()->withoutExceptionHandling();
|
||||
$subactivity = Subactivity::factory()->create();
|
||||
|
||||
$response = $this->from('/activity')->post(route('activity.store'), [
|
||||
'name' => 'Lorem',
|
||||
'subactivities' => [$subactivity->id],
|
||||
]);
|
||||
|
||||
$this->assertDatabaseCount('activity_subactivity', 1);
|
||||
$this->assertDatabaseHas('activity_subactivity', [
|
||||
'activity_id' => Activity::firstWhere('name', 'Lorem')->id,
|
||||
'subactivity_id' => $subactivity->id,
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue