mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
Fixed name retrieval on missing users and added tests to cover along with some test helper methods
This commit is contained in:
parent
123dc11583
commit
af33156369
@ -159,16 +159,14 @@ class UserController extends Controller
|
||||
$this->checkPermissionOr('user-delete', function () use ($id) {
|
||||
return $this->currentUser->id == $id;
|
||||
});
|
||||
$user = $this->userRepo->getById($id);
|
||||
|
||||
// Delete social accounts
|
||||
$user = $this->userRepo->getById($id);
|
||||
if ($this->userRepo->isOnlyAdmin($user)) {
|
||||
session()->flash('error', 'You cannot delete the only admin');
|
||||
return redirect($user->getEditUrl());
|
||||
}
|
||||
$this->userRepo->destroy($user);
|
||||
|
||||
$user->socialAccounts()->delete();
|
||||
$user->delete();
|
||||
return redirect('/users');
|
||||
}
|
||||
}
|
||||
|
@ -46,16 +46,21 @@ class UserRepo
|
||||
public function registerNew(array $data)
|
||||
{
|
||||
$user = $this->create($data);
|
||||
$roleId = \Setting::get('registration-role');
|
||||
|
||||
if ($roleId === false) {
|
||||
$roleId = $this->role->getDefault()->id;
|
||||
}
|
||||
|
||||
$user->attachRoleId($roleId);
|
||||
$this->attachDefaultRole($user);
|
||||
return $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Give a user the default role. Used when creating a new user.
|
||||
* @param $user
|
||||
*/
|
||||
public function attachDefaultRole($user)
|
||||
{
|
||||
$roleId = \Setting::get('registration-role');
|
||||
if ($roleId === false) $roleId = $this->role->getDefault()->id;
|
||||
$user->attachRoleId($roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the give user is the only admin.
|
||||
* @param User $user
|
||||
@ -88,4 +93,14 @@ class UserRepo
|
||||
'password' => bcrypt($data['password'])
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the given user from storage, Delete all related content.
|
||||
* @param User $user
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
$user->socialAccounts()->delete();
|
||||
$user->delete();
|
||||
}
|
||||
}
|
@ -32,6 +32,8 @@ body.dragging, body.dragging * {
|
||||
.avatar {
|
||||
border-radius: 100%;
|
||||
background-color: #EEE;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
&.med {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
|
@ -58,7 +58,7 @@
|
||||
<p class="text-muted small">
|
||||
Created {{$book->created_at->diffForHumans()}} @if($book->createdBy) by {{$book->createdBy->name}} @endif
|
||||
<br>
|
||||
Last Updated {{$book->updated_at->diffForHumans()}} @if($book->createdBy) by {{$book->updatedBy->name}} @endif
|
||||
Last Updated {{$book->updated_at->diffForHumans()}} @if($book->updatedBy) by {{$book->updatedBy->name}} @endif
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -56,7 +56,7 @@
|
||||
<p class="text-muted small">
|
||||
Created {{$chapter->created_at->diffForHumans()}} @if($chapter->createdBy) by {{$chapter->createdBy->name}} @endif
|
||||
<br>
|
||||
Last Updated {{$chapter->updated_at->diffForHumans()}} @if($chapter->createdBy) by {{$chapter->updatedBy->name}} @endif
|
||||
Last Updated {{$chapter->updated_at->diffForHumans()}} @if($chapter->updatedBy) by {{$chapter->updatedBy->name}} @endif
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-3 col-md-offset-1">
|
||||
|
@ -53,7 +53,7 @@
|
||||
<p class="text-muted small">
|
||||
Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by {{$page->createdBy->name}} @endif
|
||||
<br>
|
||||
Last Updated {{$page->updated_at->diffForHumans()}} @if($page->createdBy) by {{$page->updatedBy->name}} @endif
|
||||
Last Updated {{$page->updated_at->diffForHumans()}} @if($page->updatedBy) by {{$page->updatedBy->name}} @endif
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
@ -10,6 +10,8 @@
|
||||
<div class="right">
|
||||
@if($activity->user)
|
||||
{{$activity->user->name}}
|
||||
@else
|
||||
A deleted user
|
||||
@endif
|
||||
|
||||
{{ $activity->getText() }}
|
||||
|
@ -171,4 +171,29 @@ class EntityTest extends TestCase
|
||||
}
|
||||
|
||||
|
||||
public function testEntitiesViewableAfterCreatorDeletion()
|
||||
{
|
||||
$creator = $this->getNewUser();
|
||||
$updater = $this->getNewUser();
|
||||
$entities = $this->createEntityChainBelongingToUser($creator, $updater);
|
||||
app('BookStack\Repos\UserRepo')->destroy($creator);
|
||||
|
||||
$this->asAdmin()->visit($entities['book']->getUrl())->seeStatusCode(200)
|
||||
->visit($entities['chapter']->getUrl())->seeStatusCode(200)
|
||||
->visit($entities['page']->getUrl())->seeStatusCode(200);
|
||||
}
|
||||
|
||||
public function testEntitiesViewableAfterUpdaterDeletion()
|
||||
{
|
||||
$creator = $this->getNewUser();
|
||||
$updater = $this->getNewUser();
|
||||
$entities = $this->createEntityChainBelongingToUser($creator, $updater);
|
||||
app('BookStack\Repos\UserRepo')->destroy($updater);
|
||||
|
||||
$this->asAdmin()->visit($entities['book']->getUrl())->seeStatusCode(200)
|
||||
->visit($entities['chapter']->getUrl())->seeStatusCode(200)
|
||||
->visit($entities['page']->getUrl())->seeStatusCode(200);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -49,6 +49,40 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a group of entities that belong to a specific user.
|
||||
* @param $creatorUser
|
||||
* @param $updaterUser
|
||||
* @return array
|
||||
*/
|
||||
protected function createEntityChainBelongingToUser($creatorUser, $updaterUser = false)
|
||||
{
|
||||
if ($updaterUser === false) $updaterUser = $creatorUser;
|
||||
$book = factory(BookStack\Book::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]);
|
||||
$chapter = factory(BookStack\Chapter::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]);
|
||||
$page = factory(BookStack\Page::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id]);
|
||||
$book->chapters()->saveMany([$chapter]);
|
||||
$chapter->pages()->saveMany([$page]);
|
||||
return [
|
||||
'book' => $book,
|
||||
'chapter' => $chapter,
|
||||
'page' => $page
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Quick way to create a new user
|
||||
* @param array $attributes
|
||||
* @return mixed
|
||||
*/
|
||||
protected function getNewUser($attributes = [])
|
||||
{
|
||||
$user = factory(\BookStack\User::class)->create($attributes);
|
||||
$userRepo = app('BookStack\Repos\UserRepo');
|
||||
$userRepo->attachDefaultRole($user);
|
||||
return $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that a given string is seen inside an element.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user