namespace Tests\Settings;
use BookStack\Entities\Models\Book;
-use BookStack\Entities\Models\Bookshelf;
-use BookStack\Entities\Models\Chapter;
use BookStack\Entities\Models\Deletion;
-use BookStack\Entities\Models\Entity;
use BookStack\Entities\Models\Page;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
{
public function test_recycle_bin_routes_permissions()
{
- $page = Page::query()->first();
- $editor = $this->getEditor();
+ $page = $this->entities->page();
+ $editor = $this->users->editor();
$this->actingAs($editor)->delete($page->getUrl());
$deletion = Deletion::query()->firstOrFail();
$this->assertPermissionError($resp);
}
- $this->giveUserPermissions($editor, ['restrictions-manage-all']);
+ $this->permissions->grantUserRolePermissions($editor, ['restrictions-manage-all']);
foreach ($routes as $route) {
[$method, $url] = explode(':', $route);
$this->assertPermissionError($resp);
}
- $this->giveUserPermissions($editor, ['settings-manage']);
+ $this->permissions->grantUserRolePermissions($editor, ['settings-manage']);
foreach ($routes as $route) {
DB::beginTransaction();
public function test_recycle_bin_view()
{
- $page = Page::query()->first();
+ $page = $this->entities->page();
$book = Book::query()->whereHas('pages')->whereHas('chapters')->withCount(['pages', 'chapters'])->first();
- $editor = $this->getEditor();
+ $editor = $this->users->editor();
$this->actingAs($editor)->delete($page->getUrl());
$this->actingAs($editor)->delete($book->getUrl());
$viewReq = $this->asAdmin()->get('/settings/recycle-bin');
$html = $this->withHtml($viewReq);
- $html->assertElementContains('table.table', $page->name);
- $html->assertElementContains('table.table', $editor->name);
- $html->assertElementContains('table.table', $book->name);
- $html->assertElementContains('table.table', $book->pages_count . ' Pages');
- $html->assertElementContains('table.table', $book->chapters_count . ' Chapters');
+ $html->assertElementContains('.item-list-row', $page->name);
+ $html->assertElementContains('.item-list-row', $editor->name);
+ $html->assertElementContains('.item-list-row', $book->name);
+ $html->assertElementContains('.item-list-row', $book->pages_count . ' Pages');
+ $html->assertElementContains('.item-list-row', $book->chapters_count . ' Chapters');
}
public function test_recycle_bin_empty()
{
- $page = Page::query()->first();
+ $page = $this->entities->page();
$book = Book::query()->where('id', '!=', $page->book_id)->whereHas('pages')->whereHas('chapters')->with(['pages', 'chapters'])->firstOrFail();
- $editor = $this->getEditor();
+ $editor = $this->users->editor();
$this->actingAs($editor)->delete($page->getUrl());
$this->actingAs($editor)->delete($book->getUrl());
public function test_entity_restore()
{
- $book = Book::query()->whereHas('pages')->whereHas('chapters')->with(['pages', 'chapters'])->firstOrFail();
+ $book = $this->entities->bookHasChaptersAndPages();
$this->asEditor()->delete($book->getUrl());
$deletion = Deletion::query()->firstOrFail();
public function test_permanent_delete()
{
- $book = Book::query()->whereHas('pages')->whereHas('chapters')->with(['pages', 'chapters'])->firstOrFail();
+ $book = $this->entities->bookHasChaptersAndPages();
$this->asEditor()->delete($book->getUrl());
$deletion = Deletion::query()->firstOrFail();
public function test_permanent_delete_for_each_type()
{
- /** @var Entity $entity */
- foreach ([new Bookshelf(), new Book(), new Chapter(), new Page()] as $entity) {
- $entity = $entity->newQuery()->first();
+ foreach ($this->entities->all() as $type => $entity) {
$this->asEditor()->delete($entity->getUrl());
$deletion = Deletion::query()->orderBy('id', 'desc')->firstOrFail();
public function test_permanent_entity_delete_updates_existing_activity_with_entity_name()
{
- $page = Page::query()->firstOrFail();
+ $page = $this->entities->page();
$this->asEditor()->delete($page->getUrl());
$deletion = $page->deletions()->firstOrFail();
$this->assertDatabaseHas('activities', [
'type' => 'page_delete',
- 'entity_id' => $page->id,
- 'entity_type' => $page->getMorphClass(),
+ 'loggable_id' => $page->id,
+ 'loggable_type' => $page->getMorphClass(),
]);
$this->asAdmin()->delete("/settings/recycle-bin/{$deletion->id}");
$this->assertDatabaseMissing('activities', [
'type' => 'page_delete',
- 'entity_id' => $page->id,
- 'entity_type' => $page->getMorphClass(),
+ 'loggable_id' => $page->id,
+ 'loggable_type' => $page->getMorphClass(),
]);
$this->assertDatabaseHas('activities', [
'type' => 'page_delete',
- 'entity_id' => null,
- 'entity_type' => null,
+ 'loggable_id' => null,
+ 'loggable_type' => null,
'detail' => $page->name,
]);
}
public function test_auto_clear_functionality_works()
{
config()->set('app.recycle_bin_lifetime', 5);
- $page = Page::query()->firstOrFail();
- $otherPage = Page::query()->where('id', '!=', $page->id)->firstOrFail();
+ $page = $this->entities->page();
+ $otherPage = $this->entities->page();
$this->asEditor()->delete($page->getUrl());
$this->assertDatabaseHas('pages', ['id' => $page->id]);
public function test_auto_clear_functionality_with_negative_time_keeps_forever()
{
config()->set('app.recycle_bin_lifetime', -1);
- $page = Page::query()->firstOrFail();
- $otherPage = Page::query()->where('id', '!=', $page->id)->firstOrFail();
+ $page = $this->entities->page();
+ $otherPage = $this->entities->page();
$this->asEditor()->delete($page->getUrl());
$this->assertEquals(1, Deletion::query()->count());
public function test_auto_clear_functionality_with_zero_time_deletes_instantly()
{
config()->set('app.recycle_bin_lifetime', 0);
- $page = Page::query()->firstOrFail();
+ $page = $this->entities->page();
$this->asEditor()->delete($page->getUrl());
$this->assertDatabaseMissing('pages', ['id' => $page->id]);
public function test_restore_page_shows_link_to_parent_restore_if_parent_also_deleted()
{
- /** @var Book $book */
- $book = Book::query()->whereHas('pages')->whereHas('chapters')->with(['pages', 'chapters'])->firstOrFail();
+ $book = $this->entities->bookHasChaptersAndPages();
$chapter = $book->chapters->first();
/** @var Page $page */
$page = $chapter->pages->first();