Attachment API: Fixed error when name not provided in update

Fixes #5353
This commit is contained in:
Dan Brown 2024-12-09 11:32:15 +00:00
parent 7e6f6af463
commit 55d074f1a5
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 23 additions and 4 deletions

View File

@ -116,16 +116,18 @@ class AttachmentService
*/ */
public function updateFile(Attachment $attachment, array $requestData): Attachment public function updateFile(Attachment $attachment, array $requestData): Attachment
{ {
$attachment->name = $requestData['name']; if (isset($requestData['name'])) {
$link = trim($requestData['link'] ?? ''); $attachment->name = $requestData['name'];
}
$link = trim($requestData['link'] ?? '');
if (!empty($link)) { if (!empty($link)) {
if (!$attachment->external) { if (!$attachment->external) {
$this->deleteFileInStorage($attachment); $this->deleteFileInStorage($attachment);
$attachment->external = true; $attachment->external = true;
$attachment->extension = ''; $attachment->extension = '';
} }
$attachment->path = $requestData['link']; $attachment->path = $link;
} }
$attachment->save(); $attachment->save();

View File

@ -12,7 +12,7 @@ class AttachmentsApiTest extends TestCase
{ {
use TestsApi; use TestsApi;
protected $baseEndpoint = '/api/attachments'; protected string $baseEndpoint = '/api/attachments';
public function test_index_endpoint_returns_expected_book() public function test_index_endpoint_returns_expected_book()
{ {
@ -302,6 +302,23 @@ class AttachmentsApiTest extends TestCase
} }
public function test_update_file_attachment_to_link() public function test_update_file_attachment_to_link()
{
$this->actingAsApiAdmin();
$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(); $this->actingAsApiAdmin();
$page = $this->entities->page(); $page = $this->entities->page();