X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c6ad16dba657c82512ae495a4a38b99b8cfa9eeb..refs/pull/5280/head:/tests/Api/AttachmentsApiTest.php diff --git a/tests/Api/AttachmentsApiTest.php b/tests/Api/AttachmentsApiTest.php index d7625c938..b03f280ac 100644 --- a/tests/Api/AttachmentsApiTest.php +++ b/tests/Api/AttachmentsApiTest.php @@ -5,6 +5,7 @@ namespace Tests\Api; use BookStack\Entities\Models\Page; use BookStack\Uploads\Attachment; use Illuminate\Http\UploadedFile; +use Illuminate\Testing\AssertableJsonString; use Tests\TestCase; class AttachmentsApiTest extends TestCase @@ -16,7 +17,7 @@ class AttachmentsApiTest extends TestCase public function test_index_endpoint_returns_expected_book() { $this->actingAsApiEditor(); - $page = Page::query()->first(); + $page = $this->entities->page(); $attachment = $this->createAttachmentForPage($page, [ 'name' => 'My test attachment', 'external' => true, @@ -36,8 +37,7 @@ class AttachmentsApiTest extends TestCase public function test_attachments_listing_based_upon_page_visibility() { $this->actingAsApiEditor(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $attachment = $this->createAttachmentForPage($page, [ 'name' => 'My test attachment', 'external' => true, @@ -50,9 +50,7 @@ class AttachmentsApiTest extends TestCase ], ]]); - $page->restricted = true; - $page->save(); - $this->regenEntityPermissions($page); + $this->permissions->setEntityPermissions($page, [], []); $resp = $this->getJson($this->baseEndpoint . '?count=1&sort=+id'); $resp->assertJsonMissing(['data' => [ @@ -65,8 +63,7 @@ class AttachmentsApiTest extends TestCase public function test_create_endpoint_for_link_attachment() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $details = [ 'name' => 'My attachment', @@ -84,8 +81,7 @@ class AttachmentsApiTest extends TestCase public function test_create_endpoint_for_upload_attachment() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $file = $this->getTestFile('textfile.txt'); $details = [ @@ -105,8 +101,7 @@ class AttachmentsApiTest extends TestCase public function test_upload_limit_restricts_attachment_uploads() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); config()->set('app.upload_limit', 1); @@ -129,8 +124,7 @@ class AttachmentsApiTest extends TestCase public function test_name_needed_to_create() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $details = [ 'uploaded_to' => $page->id, @@ -145,8 +139,7 @@ class AttachmentsApiTest extends TestCase public function test_link_or_file_needed_to_create() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $details = [ 'name' => 'my attachment', @@ -164,8 +157,7 @@ class AttachmentsApiTest extends TestCase public function test_message_shown_if_file_is_not_a_valid_file() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $details = [ 'name' => 'my attachment', @@ -181,8 +173,7 @@ class AttachmentsApiTest extends TestCase public function test_read_endpoint_for_link_attachment() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $attachment = $this->createAttachmentForPage($page, [ 'name' => 'my attachment', @@ -215,8 +206,7 @@ class AttachmentsApiTest extends TestCase public function test_read_endpoint_for_file_attachment() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $file = $this->getTestFile('textfile.txt'); $details = [ @@ -228,9 +218,11 @@ class AttachmentsApiTest extends TestCase $attachment = Attachment::query()->orderByDesc('id')->where('name', '=', $details['name'])->firstOrFail(); $resp = $this->getJson("{$this->baseEndpoint}/{$attachment->id}"); - $resp->assertStatus(200); - $resp->assertJson([ + $resp->assertHeader('Content-Type', 'application/json'); + + $json = new AssertableJsonString($resp->streamedContent()); + $json->assertSubset([ 'id' => $attachment->id, 'content' => base64_encode(file_get_contents(storage_path($attachment->path))), 'external' => false, @@ -254,14 +246,13 @@ class AttachmentsApiTest extends TestCase public function test_attachment_not_visible_on_other_users_draft() { $this->actingAsApiAdmin(); - $editor = $this->getEditor(); + $editor = $this->users->editor(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $page->draft = true; - $page->owned_by = $editor; + $page->owned_by = $editor->id; $page->save(); - $this->regenEntityPermissions($page); + $this->permissions->regenerateForEntity($page); $attachment = $this->createAttachmentForPage($page, [ 'name' => 'my attachment', @@ -277,8 +268,7 @@ class AttachmentsApiTest extends TestCase public function test_update_endpoint() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $attachment = $this->createAttachmentForPage($page); $details = [ @@ -295,8 +285,7 @@ class AttachmentsApiTest extends TestCase public function test_update_link_attachment_to_file() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $attachment = $this->createAttachmentForPage($page); $file = $this->getTestFile('textfile.txt'); @@ -315,8 +304,7 @@ class AttachmentsApiTest extends TestCase public function test_update_file_attachment_to_link() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $file = $this->getTestFile('textfile.txt'); $this->call('POST', $this->baseEndpoint, ['name' => 'My file attachment', 'uploaded_to' => $page->id], [], ['file' => $file]); /** @var Attachment $attachment */ @@ -343,8 +331,7 @@ class AttachmentsApiTest extends TestCase public function test_delete_endpoint() { $this->actingAsApiAdmin(); - /** @var Page $page */ - $page = Page::query()->first(); + $page = $this->entities->page(); $attachment = $this->createAttachmentForPage($page); $resp = $this->deleteJson("{$this->baseEndpoint}/{$attachment->id}"); @@ -355,7 +342,7 @@ class AttachmentsApiTest extends TestCase protected function createAttachmentForPage(Page $page, $attributes = []): Attachment { - $admin = $this->getAdmin(); + $admin = $this->users->admin(); /** @var Attachment $attachment */ $attachment = $page->attachments()->forceCreate(array_merge([ 'uploaded_to' => $page->id,