Add: Update user
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
4548407d55
commit
2ec7dd23eb
|
@ -32,6 +32,9 @@ class UserResource extends JsonResource
|
|||
'avatar' => [
|
||||
'src' => Storage::url('avatar.png'),
|
||||
],
|
||||
'links' => [
|
||||
'update' => route('user.update', ['user' => $this->getModel()]),
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace App\User\Actions;
|
||||
|
||||
use App\User;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Lorisleiva\Actions\ActionRequest;
|
||||
use Lorisleiva\Actions\Concerns\AsAction;
|
||||
|
||||
class UpdateAction
|
||||
{
|
||||
use AsAction;
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'firstname' => 'required|string|max:255',
|
||||
'lastname' => 'required|string|max:255',
|
||||
'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users', 'email')->ignore(request()->route('user')->id)],
|
||||
];
|
||||
}
|
||||
|
||||
public function handle(User $user, ActionRequest $request): JsonResponse
|
||||
{
|
||||
$user->update($request->validated());
|
||||
|
||||
return response()->json([]);
|
||||
}
|
||||
}
|
|
@ -78,6 +78,7 @@ use App\Membership\Actions\MembershipStoreAction;
|
|||
use App\Membership\Actions\MembershipUpdateAction;
|
||||
use App\Payment\SubscriptionController;
|
||||
use App\User\Actions\StoreAction as UserStoreAction;
|
||||
use App\User\Actions\UpdateAction as UserUpdateAction;
|
||||
|
||||
Route::group(['namespace' => 'App\\Http\\Controllers'], function (): void {
|
||||
Auth::routes(['register' => false]);
|
||||
|
@ -186,4 +187,5 @@ Route::group(['middleware' => 'auth:web'], function (): void {
|
|||
|
||||
// -------------------------------------- user -------------------------------------
|
||||
Route::post('/user', UserStoreAction::class)->name('user.store');
|
||||
Route::patch('/user/{user}', UserUpdateAction::class)->name('user.update');
|
||||
});
|
||||
|
|
|
@ -23,6 +23,7 @@ class UserIndexTest extends TestCase
|
|||
->assertInertiaPath('data.data.0.firstname', 'Anna')
|
||||
->assertInertiaPath('data.data.0.lastname', 'Doe')
|
||||
->assertInertiaPath('data.data.0.id', $anna->id)
|
||||
->assertInertiaPath('data.data.0.links.update', route('user.update', ['user' => $anna]))
|
||||
->assertInertiaPath('data.data.1.firstname', 'Jane')
|
||||
->assertInertiaPath('data.data.2.firstname', 'John')
|
||||
->assertInertiaPath('data.meta.default.firstname', '')
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature\Permission;
|
||||
|
||||
use App\User;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Tests\RequestFactories\UserRequestFactory;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UserUpdateTest extends TestCase
|
||||
{
|
||||
|
||||
use DatabaseTransactions;
|
||||
|
||||
public function testItUpdatesAUser(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
|
||||
$user = User::factory()->create();
|
||||
$this->patchJson(route('user.update', ['user' => $user]), UserRequestFactory::new()->name('Max Muster')->email('max@muster.de')->create())
|
||||
->assertOk();
|
||||
|
||||
$this->assertDatabaseHas('users', [
|
||||
'email' => 'max@muster.de',
|
||||
'firstname' => 'Max',
|
||||
'lastname' => 'Muster',
|
||||
]);
|
||||
$this->assertDatabaseCount('users', 2);
|
||||
}
|
||||
|
||||
public function testItCannotUseAGivenMailAddress(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
|
||||
$jane = User::factory()->email('jane@muster.de')->create();
|
||||
$user = User::factory()->create();
|
||||
$this->patchJson(route('user.update', ['user' => $user]), UserRequestFactory::new()->email('jane@muster.de')->create())
|
||||
->assertJsonValidationErrors('email');
|
||||
$this->patchJson(route('user.update', ['user' => $jane]), UserRequestFactory::new()->email('jane@muster.de')->create())
|
||||
->assertJsonMissingValidationErrors('email');
|
||||
}
|
||||
|
||||
public function testItNeedsNameAndEmail(): void
|
||||
{
|
||||
Mail::fake();
|
||||
$this->login()->loginNami();
|
||||
$user = User::factory()->create();
|
||||
|
||||
User::factory()->email('jane@doe.de')->create();
|
||||
$this->patchJson(route('user.update', ['user' => $user]), UserRequestFactory::new()->name('')->email('max@muster.de')->create())->assertJsonValidationErrors('firstname');
|
||||
$this->patchJson(route('user.update', ['user' => $user]), UserRequestFactory::new()->name('Max Muster')->email('maxusterde')->create())->assertJsonValidationErrors('email');
|
||||
$this->patchJson(route('user.update', ['user' => $user]), UserRequestFactory::new()->name('Max Muster')->email('')->create())->assertJsonValidationErrors('email');
|
||||
$this->patchJson(route('user.update', ['user' => $user]), UserRequestFactory::new()->email('jane@doe.de')->create())->assertJsonValidationErrors('email');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue