X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ee24635e06a8c01d751f80caba47c57f76e8989d..HEAD:/tests/Api/AttachmentsApiTest.php diff --git a/tests/Api/AttachmentsApiTest.php b/tests/Api/AttachmentsApiTest.php index 6077868b2..b23465879 100644 --- a/tests/Api/AttachmentsApiTest.php +++ b/tests/Api/AttachmentsApiTest.php @@ -12,12 +12,12 @@ class AttachmentsApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/attachments'; + protected string $baseEndpoint = '/api/attachments'; 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, @@ -37,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, @@ -51,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' => [ @@ -66,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', @@ -85,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 = [ @@ -106,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); @@ -130,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, @@ -146,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', @@ -165,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', @@ -182,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', @@ -216,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 = [ @@ -257,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->id; $page->save(); - $this->regenEntityPermissions($page); + $this->permissions->regenerateForEntity($page); $attachment = $this->createAttachmentForPage($page, [ 'name' => 'my attachment', @@ -280,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 = [ @@ -298,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'); @@ -318,8 +304,24 @@ 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(); + $attachment = $this->createAttachmentForPage($page); + + $resp = $this->putJson("{$this->baseEndpoint}/{$attachment->id}", [ + 'link' => 'https://example.com/donkey', + ]); + + $resp->assertStatus(200); + $this->assertDatabaseHas('attachments', [ + 'id' => $attachment->id, + 'path' => 'https://example.com/donkey', + ]); + } + + public function test_update_does_not_require_name() + { + $this->actingAsApiAdmin(); + $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 */ @@ -346,8 +348,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}"); @@ -358,7 +359,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,