5 use BookStack\Auth\Role;
6 use BookStack\Auth\User;
9 class UsersApiTest extends TestCase
13 protected $baseEndpoint = '/api/users';
15 public function test_users_manage_permission_needed_for_all_endpoints()
20 public function test_no_endpoints_accessible_in_demo_mode()
23 // $this->preventAccessInDemoMode();
24 // Can't use directly in constructor as blocks access to docs
25 // Maybe via route middleware
28 public function test_index_endpoint_returns_expected_shelf()
30 $this->actingAsApiAdmin();
31 /** @var User $firstUser */
32 $firstUser = User::query()->orderBy('id', 'asc')->first();
34 $resp = $this->getJson($this->baseEndpoint . '?count=1&sort=+id');
35 $resp->assertJson(['data' => [
37 'id' => $firstUser->id,
38 'name' => $firstUser->name,
39 'slug' => $firstUser->slug,
40 'email' => $firstUser->email,
41 'profile_url' => $firstUser->getProfileUrl(),
42 'edit_url' => $firstUser->getEditUrl(),
43 'avatar_url' => $firstUser->getAvatar(),
48 public function test_read_endpoint()
50 $this->actingAsApiAdmin();
51 /** @var User $user */
52 $user = User::query()->first();
53 /** @var Role $userRole */
54 $userRole = $user->roles()->first();
56 $resp = $this->getJson($this->baseEndpoint . "/{$user->id}");
58 $resp->assertStatus(200);
61 'slug' => $user->slug,
62 'email' => $user->email,
63 'external_auth_id' => $user->external_auth_id,
66 'id' => $userRole->id,
67 'display_name' => $userRole->display_name,
73 public function test_delete_endpoint()
75 $this->actingAsApiAdmin();
76 /** @var User $user */
77 $user = User::query()->where('id', '!=', $this->getAdmin()->id)
78 ->whereNull('system_name')
81 $resp = $this->deleteJson($this->baseEndpoint . "/{$user->id}");
83 $resp->assertStatus(204);
84 $this->assertActivityExists('user_delete', null, $user->logDescriptor());
87 public function test_delete_endpoint_fails_deleting_only_admin()
89 $this->actingAsApiAdmin();
90 $adminRole = Role::getSystemRole('admin');
91 $adminToDelete = $adminRole->users()->first();
92 $adminRole->users()->where('id', '!=', $adminToDelete->id)->delete();
94 $resp = $this->deleteJson($this->baseEndpoint . "/{$adminToDelete->id}");
96 $resp->assertStatus(500);
97 $resp->assertJson($this->errorResponse('You cannot delete the only admin', 500));
100 public function test_delete_endpoint_fails_deleting_public_user()
102 $this->actingAsApiAdmin();
103 /** @var User $publicUser */
104 $publicUser = User::query()->where('system_name', '=', 'public')->first();
106 $resp = $this->deleteJson($this->baseEndpoint . "/{$publicUser->id}");
108 $resp->assertStatus(500);
109 $resp->assertJson($this->errorResponse('You cannot delete the guest user', 500));