diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 65394655..24f48069 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -82,7 +82,7 @@ class UserController extends Controller */ public function subscription(User $user) { - if (! $user->stripeId() || ! $user->subscription('main')) { + if (!$user->stripeId() || !$user->subscription('main')) { return response("User doesn't have any subscription.", 404); } @@ -174,57 +174,53 @@ class UserController extends Controller * Create new user by admin * * @param CreateUserByAdmin $request - * @return UserResource + * @return UserResource|Application|ResponseFactory|Response */ public function create_user(CreateUserByAdmin $request) { // Store avatar if ($request->hasFile('avatar')) { - $avatar = store_avatar($request->file('avatar'), 'avatars'); + $avatar = store_avatar($request->file('avatar')); } // Create user $user = User::forceCreate([ - 'avatar' => $request->hasFile('avatar') ? $avatar : null, - 'name' => $request->name, 'role' => $request->role, 'email' => $request->email, 'password' => Hash::make($request->password), ]); // Create settings - UserSettings::forceCreate([ - 'user_id' => $user->id, - 'storage_capacity' => $request->storage_capacity, - ]); + $user + ->settings() + ->create([ + 'name' => $request->name, + 'avatar' => $avatar ?? null, + 'storage_capacity' => $request->storage_capacity, + ]); - return new UserResource($user); + return response(new UserResource($user), 201); } /** * Delete user with all user data * * @param DeleteUserRequest $request - * @param $id + * @param User $user * @return ResponseFactory|Response - * @throws \Exception */ - public function delete_user(DeleteUserRequest $request, $id) + public function delete_user(DeleteUserRequest $request, User $user) { - $user = User::findOrFail($id); - - if ($user->subscribed('main')) { - abort(202, 'You can\'t delete this account while user have active subscription.'); - } - - // Demo preview if (env('APP_DEMO')) { return response('Done!', 204); } - // Check for self deleted account + if ($user->subscribed('main')) { + abort(202, "You can\'t delete this account while user have active subscription."); + } + if ($user->id === Auth::id()) { - abort(406, 'You can\'t delete your account'); + abort(406, "You can\'t delete your account"); } // Validate user name diff --git a/tests/Feature/AdminTest.php b/tests/Feature/AdminTest.php index 07502375..20f8fd5b 100644 --- a/tests/Feature/AdminTest.php +++ b/tests/Feature/AdminTest.php @@ -8,8 +8,10 @@ use App\Models\User; use App\Notifications\ResetPassword; use DB; use Illuminate\Foundation\Testing\DatabaseMigrations; +use Illuminate\Http\UploadedFile; use Notification; use Laravel\Sanctum\Sanctum; +use Storage; use Tests\TestCase; class AdminTest extends TestCase @@ -121,7 +123,6 @@ class AdminTest extends TestCase ]); } - /** * @test */ @@ -267,4 +268,41 @@ class AdminTest extends TestCase $this->assertTrue(User::find($user->id)->role === 'admin'); } + + /** + * @test + */ + public function it_create_new_user_with_avatar() + { + Storage::fake('local'); + + $admin = User::factory(User::class) + ->create(['role' => 'admin']); + + Sanctum::actingAs($admin); + + $avatar = UploadedFile::fake() + ->image('fake-image.jpg'); + + $this->postJson("/api/admin/users/create", [ + 'name' => 'John Doe', + 'role' => 'user', + 'email' => 'john@doe.com', + 'password' => 'VerySecretPassword', + 'storage_capacity' => 15, + 'password_confirmation' => 'VerySecretPassword', + 'avatar' => $avatar, + ])->assertStatus(201); + + $this->assertDatabaseHas('users', [ + 'email' => 'john@doe.com' + ]); + + $this->assertDatabaseHas('user_settings', [ + 'name' => 'John Doe' + ]); + + Storage::disk('local') + ->assertExists(User::whereEmail('john@doe.com')->first()->settings->getRawOriginal('avatar')); + } }