X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/14bccae6bd93164c6fc647747654c0fccd8dffe7..refs/pull/5280/head:/tests/Api/RecycleBinApiTest.php diff --git a/tests/Api/RecycleBinApiTest.php b/tests/Api/RecycleBinApiTest.php index 4849080b9..d174838c2 100644 --- a/tests/Api/RecycleBinApiTest.php +++ b/tests/Api/RecycleBinApiTest.php @@ -4,7 +4,6 @@ namespace Tests\Api; use BookStack\Entities\Models\Book; use BookStack\Entities\Models\Deletion; -use BookStack\Entities\Models\Page; use Illuminate\Support\Collection; use Tests\TestCase; @@ -12,18 +11,18 @@ class RecycleBinApiTest extends TestCase { use TestsApi; - protected string $baseEndpoint = '/api/recycle_bin'; + protected string $baseEndpoint = '/api/recycle-bin'; protected array $endpointMap = [ - ['get', '/api/recycle_bin'], - ['put', '/api/recycle_bin/1'], - ['delete', '/api/recycle_bin/1'], + ['get', '/api/recycle-bin'], + ['put', '/api/recycle-bin/1'], + ['delete', '/api/recycle-bin/1'], ]; public function test_settings_manage_permission_needed_for_all_endpoints() { - $editor = $this->getEditor(); - $this->giveUserPermissions($editor, ['settings-manage']); + $editor = $this->users->editor(); + $this->permissions->grantUserRolePermissions($editor, ['settings-manage']); $this->actingAs($editor); foreach ($this->endpointMap as [$method, $uri]) { @@ -35,8 +34,8 @@ class RecycleBinApiTest extends TestCase public function test_restrictions_manage_all_permission_needed_for_all_endpoints() { - $editor = $this->getEditor(); - $this->giveUserPermissions($editor, ['restrictions-manage-all']); + $editor = $this->users->editor(); + $this->permissions->grantUserRolePermissions($editor, ['restrictions-manage-all']); $this->actingAs($editor); foreach ($this->endpointMap as [$method, $uri]) { @@ -48,13 +47,12 @@ class RecycleBinApiTest extends TestCase public function test_index_endpoint_returns_expected_page() { - $this->actingAsAuthorizedUser(); + $admin = $this->users->admin(); - $page = Page::query()->first(); - $book = Book::query()->whereHas('pages')->whereHas('chapters')->withCount(['pages', 'chapters'])->first(); - $editor = $this->getEditor(); - $this->actingAs($editor)->delete($page->getUrl()); - $this->actingAs($editor)->delete($book->getUrl()); + $page = $this->entities->page(); + $book = $this->entities->book(); + $this->actingAs($admin)->delete($page->getUrl()); + $this->delete($book->getUrl()); $deletions = Deletion::query()->orderBy('id')->get(); @@ -62,14 +60,17 @@ class RecycleBinApiTest extends TestCase $expectedData = $deletions ->zip([$page, $book]) - ->map(function (Collection $data) use ($editor) { + ->map(function (Collection $data) use ($admin) { return [ 'id' => $data[0]->id, - 'deleted_by' => $editor->getKey(), + 'deleted_by' => $admin->id, 'created_at' => $data[0]->created_at->toJson(), 'updated_at' => $data[0]->updated_at->toJson(), 'deletable_type' => $data[1]->getMorphClass(), - 'deletable_id' => $data[1]->getKey(), + 'deletable_id' => $data[1]->id, + 'deletable' => [ + 'name' => $data[1]->name, + ], ]; }); @@ -79,13 +80,12 @@ class RecycleBinApiTest extends TestCase ]); } - public function test_index_endpoint_returns_children() + public function test_index_endpoint_returns_children_count() { - $this->actingAsAuthorizedUser(); + $admin = $this->users->admin(); $book = Book::query()->whereHas('pages')->whereHas('chapters')->withCount(['pages', 'chapters'])->first(); - $editor = $this->getEditor(); - $this->actingAs($editor)->delete($book->getUrl()); + $this->actingAs($admin)->delete($book->getUrl()); $deletion = Deletion::query()->orderBy('id')->first(); @@ -93,17 +93,11 @@ class RecycleBinApiTest extends TestCase $expectedData = [ [ - 'id' => $deletion->getKey(), - 'deleted_by' => $editor->getKey(), - 'created_at' => $deletion->created_at->toJson(), - 'updated_at' => $deletion->updated_at->toJson(), - 'deletable_type' => $book->getMorphClass(), - 'deletable_id' => $book->getKey(), - 'children' => [ - 'BookStack\Page' => $book->pages_count, - 'BookStack\Chapter' => $book->chapters_count, + 'id' => $deletion->id, + 'deletable' => [ + 'pages_count' => $book->pages_count, + 'chapters_count' => $book->chapters_count, ], - 'parent' => null, ], ]; @@ -115,30 +109,24 @@ class RecycleBinApiTest extends TestCase public function test_index_endpoint_returns_parent() { - $this->actingAsAuthorizedUser(); - - $page = Page::query()->whereHas('chapter')->with('chapter')->first(); - - $editor = $this->getEditor(); - $this->actingAs($editor)->delete($page->getUrl()); + $admin = $this->users->admin(); + $page = $this->entities->pageWithinChapter(); + $this->actingAs($admin)->delete($page->getUrl()); $deletion = Deletion::query()->orderBy('id')->first(); $resp = $this->getJson($this->baseEndpoint); $expectedData = [ [ - 'id' => $deletion->getKey(), - 'deleted_by' => $editor->getKey(), - 'created_at' => $deletion->created_at->toJson(), - 'updated_at' => $deletion->updated_at->toJson(), - 'deletable_type' => $page->getMorphClass(), - 'deletable_id' => $page->getKey(), - 'parent' => [ - 'type' => 'BookStack\Chapter', - 'id' => $page->chapter->getKey(), + 'id' => $deletion->id, + 'deletable' => [ + 'parent' => [ + 'id' => $page->chapter->id, + 'name' => $page->chapter->name, + 'type' => 'chapter', + ], ], - 'children' => null, ], ]; @@ -150,53 +138,46 @@ class RecycleBinApiTest extends TestCase public function test_restore_endpoint() { - $this->actingAsAuthorizedUser(); - - $page = Page::query()->first(); - $editor = $this->getEditor(); - $this->actingAs($editor)->delete($page->getUrl()); + $page = $this->entities->page(); + $this->asAdmin()->delete($page->getUrl()); $page->refresh(); $deletion = Deletion::query()->orderBy('id')->first(); $this->assertDatabaseHas('pages', [ - 'id' => $page->getKey(), + 'id' => $page->id, 'deleted_at' => $page->deleted_at, ]); - $this->putJson($this->baseEndpoint . '/' . $deletion->getKey()); + $resp = $this->putJson($this->baseEndpoint . '/' . $deletion->id); + $resp->assertJson([ + 'restore_count' => 1, + ]); $this->assertDatabaseHas('pages', [ - 'id' => $page->getKey(), + 'id' => $page->id, 'deleted_at' => null, ]); } public function test_destroy_endpoint() { - $this->actingAsAuthorizedUser(); - - $page = Page::query()->first(); - $editor = $this->getEditor(); - $this->actingAs($editor)->delete($page->getUrl()); + $page = $this->entities->page(); + $this->asAdmin()->delete($page->getUrl()); $page->refresh(); $deletion = Deletion::query()->orderBy('id')->first(); $this->assertDatabaseHas('pages', [ - 'id' => $page->getKey(), + 'id' => $page->id, 'deleted_at' => $page->deleted_at, ]); - $this->deleteJson($this->baseEndpoint . '/' . $deletion->getKey()); - $this->assertDatabaseMissing('pages', ['id' => $page->getKey()]); - } + $resp = $this->deleteJson($this->baseEndpoint . '/' . $deletion->id); + $resp->assertJson([ + 'delete_count' => 1, + ]); - private function actingAsAuthorizedUser() - { - $editor = $this->getEditor(); - $this->giveUserPermissions($editor, ['restrictions-manage-all']); - $this->giveUserPermissions($editor, ['settings-manage']); - $this->actingAs($editor); + $this->assertDatabaseMissing('pages', ['id' => $page->id]); } }