X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c6ad16dba657c82512ae495a4a38b99b8cfa9eeb..refs/pull/5280/head:/tests/Api/UsersApiTest.php diff --git a/tests/Api/UsersApiTest.php b/tests/Api/UsersApiTest.php index e1bcb02d5..a0c67d0d2 100644 --- a/tests/Api/UsersApiTest.php +++ b/tests/Api/UsersApiTest.php @@ -2,11 +2,13 @@ namespace Tests\Api; -use BookStack\Actions\ActivityType; -use BookStack\Auth\Role; -use BookStack\Auth\User; +use BookStack\Access\Notifications\UserInviteNotification; +use BookStack\Activity\ActivityType; +use BookStack\Activity\Models\Activity as ActivityModel; use BookStack\Entities\Models\Entity; -use BookStack\Notifications\UserInvite; +use BookStack\Facades\Activity; +use BookStack\Users\Models\Role; +use BookStack\Users\Models\User; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Notification; use Tests\TestCase; @@ -15,9 +17,9 @@ class UsersApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/users'; + protected string $baseEndpoint = '/api/users'; - protected $endpointMap = [ + protected array $endpointMap = [ ['get', '/api/users'], ['post', '/api/users'], ['get', '/api/users/1'], @@ -47,7 +49,7 @@ class UsersApiTest extends TestCase } } - public function test_index_endpoint_returns_expected_shelf() + public function test_index_endpoint_returns_expected_user() { $this->actingAsApiAdmin(); /** @var User $firstUser */ @@ -56,13 +58,34 @@ class UsersApiTest extends TestCase $resp = $this->getJson($this->baseEndpoint . '?count=1&sort=+id'); $resp->assertJson(['data' => [ [ - 'id' => $firstUser->id, - 'name' => $firstUser->name, - 'slug' => $firstUser->slug, - 'email' => $firstUser->email, + 'id' => $firstUser->id, + 'name' => $firstUser->name, + 'slug' => $firstUser->slug, + 'email' => $firstUser->email, 'profile_url' => $firstUser->getProfileUrl(), - 'edit_url' => $firstUser->getEditUrl(), - 'avatar_url' => $firstUser->getAvatar(), + 'edit_url' => $firstUser->getEditUrl(), + 'avatar_url' => $firstUser->getAvatar(), + ], + ]]); + } + + public function test_index_endpoint_has_correct_created_and_last_activity_dates() + { + $user = $this->users->editor(); + $user->created_at = now()->subYear(); + $user->save(); + + $this->actingAs($user); + Activity::add(ActivityType::AUTH_LOGIN, 'test login activity'); + /** @var ActivityModel $activity */ + $activity = ActivityModel::query()->where('user_id', '=', $user->id)->latest()->first(); + + $resp = $this->asAdmin()->getJson($this->baseEndpoint . '?filter[id]=3'); + $resp->assertJson(['data' => [ + [ + 'id' => $user->id, + 'created_at' => $user->created_at->toJSON(), + 'last_activity_at' => $activity->created_at->toJson(), ], ]]); } @@ -74,24 +97,24 @@ class UsersApiTest extends TestCase $role = Role::query()->first(); $resp = $this->postJson($this->baseEndpoint, [ - 'name' => 'Benny Boris', - 'email' => 'bboris@example.com', - 'password' => 'mysuperpass', - 'language' => 'it', - 'roles' => [$role->id], + 'name' => 'Benny Boris', + 'email' => 'bboris@example.com', + 'password' => 'mysuperpass', + 'language' => 'it', + 'roles' => [$role->id], 'send_invite' => false, ]); $resp->assertStatus(200); $resp->assertJson([ - 'name' => 'Benny Boris', - 'email' => 'bboris@example.com', + 'name' => 'Benny Boris', + 'email' => 'bboris@example.com', 'external_auth_id' => '', - 'roles' => [ + 'roles' => [ [ - 'id' => $role->id, + 'id' => $role->id, 'display_name' => $role->display_name, - ] + ], ], ]); $this->assertDatabaseHas('users', ['email' => 'bboris@example.com']); @@ -109,15 +132,32 @@ class UsersApiTest extends TestCase Notification::fake(); $resp = $this->postJson($this->baseEndpoint, [ - 'name' => 'Benny Boris', - 'email' => 'bboris@example.com', + 'name' => 'Benny Boris', + 'email' => 'bboris@example.com', 'send_invite' => true, ]); $resp->assertStatus(200); /** @var User $user */ $user = User::query()->where('email', '=', 'bboris@example.com')->first(); - Notification::assertSentTo($user, UserInvite::class); + Notification::assertSentTo($user, UserInviteNotification::class); + } + + public function test_create_with_send_invite_works_with_value_of_1() + { + $this->actingAsApiAdmin(); + Notification::fake(); + + $resp = $this->postJson($this->baseEndpoint, [ + 'name' => 'Benny Boris', + 'email' => 'bboris@example.com', + 'send_invite' => '1', // Submissions via x-www-form-urlencoded/form-data may use 1 instead of boolean + ]); + + $resp->assertStatus(200); + /** @var User $user */ + $user = User::query()->where('email', '=', 'bboris@example.com')->first(); + Notification::assertSentTo($user, UserInviteNotification::class); } public function test_create_name_and_email_validation() @@ -140,7 +180,7 @@ class UsersApiTest extends TestCase $resp = $this->postJson($this->baseEndpoint, [ 'email' => $existingUser->email, - 'name' => 'Benny Boris', + 'name' => 'Benny Boris', ]); $resp->assertStatus(422); $resp->assertJson($this->validationResponse(['email' => ['The email has already been taken.']])); @@ -158,15 +198,15 @@ class UsersApiTest extends TestCase $resp->assertStatus(200); $resp->assertJson([ - 'id' => $user->id, - 'slug' => $user->slug, - 'email' => $user->email, + 'id' => $user->id, + 'slug' => $user->slug, + 'email' => $user->email, 'external_auth_id' => $user->external_auth_id, - 'roles' => [ + 'roles' => [ [ - 'id' => $userRole->id, + 'id' => $userRole->id, 'display_name' => $userRole->display_name, - ] + ], ], ]); } @@ -175,22 +215,22 @@ class UsersApiTest extends TestCase { $this->actingAsApiAdmin(); /** @var User $user */ - $user = $this->getAdmin(); + $user = $this->users->admin(); $roles = Role::query()->pluck('id'); $resp = $this->putJson($this->baseEndpoint . "/{$user->id}", [ - 'name' => 'My updated user', - 'email' => 'barrytest@example.com', - 'roles' => $roles, + 'name' => 'My updated user', + 'email' => 'barrytest@example.com', + 'roles' => $roles, 'external_auth_id' => 'btest', - 'password' => 'barrytester', - 'language' => 'fr', + 'password' => 'barrytester', + 'language' => 'fr', ]); $resp->assertStatus(200); $resp->assertJson([ - 'id' => $user->id, - 'name' => 'My updated user', - 'email' => 'barrytest@example.com', + 'id' => $user->id, + 'name' => 'My updated user', + 'email' => 'barrytest@example.com', 'external_auth_id' => 'btest', ]); $user->refresh(); @@ -204,15 +244,15 @@ class UsersApiTest extends TestCase { $this->actingAsApiAdmin(); /** @var User $user */ - $user = $this->getAdmin(); + $user = $this->users->admin(); $roleCount = $user->roles()->count(); $resp = $this->putJson($this->baseEndpoint . "/{$user->id}", []); $resp->assertStatus(200); $this->assertDatabaseHas('users', [ - 'id' => $user->id, - 'name' => $user->name, - 'email' => $user->email, + 'id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, 'password' => $user->password, ]); $this->assertEquals($roleCount, $user->roles()->count()); @@ -222,7 +262,7 @@ class UsersApiTest extends TestCase { $this->actingAsApiAdmin(); /** @var User $user */ - $user = User::query()->where('id', '!=', $this->getAdmin()->id) + $user = User::query()->where('id', '!=', $this->users->admin()->id) ->whereNull('system_name') ->first(); @@ -236,10 +276,10 @@ class UsersApiTest extends TestCase { $this->actingAsApiAdmin(); /** @var User $user */ - $user = User::query()->where('id', '!=', $this->getAdmin()->id) + $user = User::query()->where('id', '!=', $this->users->admin()->id) ->whereNull('system_name') ->first(); - $entityChain = $this->createEntityChainBelongingToUser($user); + $entityChain = $this->entities->createChainBelongingToUser($user); /** @var User $newOwner */ $newOwner = User::query()->where('id', '!=', $user->id)->first();