],
'update' => [
'name' => ['string', 'max:180'],
+ 'image' => ['file', ...$this->getImageValidationRules()],
]
];
}
/**
* Update the details of an existing image in the system.
- * Only allows updating of the image name at this time.
+ * Since "image" is expected to be a file, this needs to be a 'multipart/form-data' type request if providing a
+ * new image file. Updated image files should be of the same file type as the original image.
*/
public function update(Request $request, string $id)
{
$this->checkOwnablePermission('image-update', $image);
$this->imageRepo->updateImageDetails($image, $data);
+ if (isset($data['image'])) {
+ $this->imageRepo->updateImageFile($image, $data['image']);
+ }
return response()->json($this->formatForSingleResponse($image));
}
throw new ImageUploadException(trans('errors.image_upload_replace_type'));
}
+ $image->refresh();
$image->updated_by = user()->id;
$image->save();
$this->imageService->replaceExistingFromUpload($image->path, $image->type, $file);
]);
}
- public function test_update_endpoint_requires_image_delete_permission()
+ public function test_update_existing_image_file()
+ {
+ $this->actingAsApiAdmin();
+ $imagePage = $this->entities->page();
+ $data = $this->files->uploadGalleryImageToPage($this, $imagePage);
+ $image = Image::findOrFail($data['response']->id);
+
+ $this->assertFileEquals($this->files->testFilePath('test-image.png'), public_path($data['path']));
+
+ $resp = $this->call('PUT', $this->baseEndpoint . "/{$image->id}", [], [], [
+ 'image' => $this->files->uploadedImage('my-cool-image.png', 'compressed.png'),
+ ]);
+
+ $resp->assertStatus(200);
+ $this->assertFileEquals($this->files->testFilePath('compressed.png'), public_path($data['path']));
+ }
+
+ public function test_update_endpoint_requires_image_update_permission()
{
$user = $this->users->editor();
$this->actingAsForApi($user);