diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/api_resources/TaxonImage.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/api_resources/TaxonImage.xml
index d982cf5a38..852dc62b9b 100644
--- a/src/Sylius/Bundle/ApiBundle/Resources/config/api_resources/TaxonImage.xml
+++ b/src/Sylius/Bundle/ApiBundle/Resources/config/api_resources/TaxonImage.xml
@@ -66,6 +66,17 @@
+
+ PUT
+ /admin/taxon-images/{id}
+
+ admin:taxon_image:update
+
+
+ admin:taxon_image:read
+
+
+
DELETE
/admin/taxon-images/{id}
diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/TaxonImage.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/TaxonImage.xml
index dae76de293..29cff9142d 100644
--- a/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/TaxonImage.xml
+++ b/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/TaxonImage.xml
@@ -30,6 +30,7 @@
admin:taxon_image:read
admin:taxon:read
+ admin:taxon_image:update
diff --git a/tests/Api/Admin/TaxonImagesTest.php b/tests/Api/Admin/TaxonImagesTest.php
index 8bafb516fa..2796cf5690 100644
--- a/tests/Api/Admin/TaxonImagesTest.php
+++ b/tests/Api/Admin/TaxonImagesTest.php
@@ -131,6 +131,36 @@ final class TaxonImagesTest extends JsonApiTestCase
);
}
+ /** @test */
+ public function it_updates_only_the_type_of_the_existing_taxon_image(): void
+ {
+ $fixtures = $this->loadFixturesFromFiles(['authentication/api_administrator.yaml', 'taxon_image.yaml']);
+ $header = array_merge($this->logInAdminUser('api@example.com'), self::CONTENT_TYPE_HEADER);
+
+ /** @var TaxonImageInterface $taxonImage */
+ $taxonImage = $fixtures['taxon_thumbnail'];
+
+ /** @var TaxonInterface $taxon */
+ $taxon = $fixtures['taxon_mug'];
+
+ $this->client->request(
+ method: 'PUT',
+ uri: sprintf('/api/v2/admin/taxon-images/%s', $taxonImage->getId()),
+ server: $header,
+ content: json_encode([
+ 'type' => 'logo',
+ 'owner' => sprintf('/api/v2/admin/taxons/%s', $taxon->getCode()),
+ 'path' => 'logo.jpg',
+ ], JSON_THROW_ON_ERROR),
+ );
+
+ $this->assertResponse(
+ $this->client->getResponse(),
+ 'admin/taxon_image/put_taxon_image_response',
+ Response::HTTP_OK,
+ );
+ }
+
/** @test */
public function it_deletes_a_taxon_image(): void
{
diff --git a/tests/Api/DataFixtures/ORM/taxon_image.yaml b/tests/Api/DataFixtures/ORM/taxon_image.yaml
index 3774c7f885..ecbd8eff36 100644
--- a/tests/Api/DataFixtures/ORM/taxon_image.yaml
+++ b/tests/Api/DataFixtures/ORM/taxon_image.yaml
@@ -3,6 +3,9 @@ Sylius\Component\Core\Model\Taxon:
code: 'CATEGORY'
currentLocale: 'en_US'
images: ['@taxon_thumbnail', '@taxon_banner']
+ taxon_mug:
+ code: 'MUG'
+ currentLocale: 'en_US'
Sylius\Component\Core\Model\TaxonImage:
taxon_thumbnail:
diff --git a/tests/Api/Responses/Expected/admin/taxon_image/put_taxon_image_response.json b/tests/Api/Responses/Expected/admin/taxon_image/put_taxon_image_response.json
new file mode 100644
index 0000000000..c7ad9dc6e5
--- /dev/null
+++ b/tests/Api/Responses/Expected/admin/taxon_image/put_taxon_image_response.json
@@ -0,0 +1,9 @@
+{
+ "@context": "\/api\/v2\/contexts\/TaxonImage",
+ "@id": "\/api\/v2\/admin\/taxon-images\/@integer@",
+ "@type": "TaxonImage",
+ "id": "@integer@",
+ "owner": "\/api\/v2\/admin\/taxons\/CATEGORY",
+ "type": "logo",
+ "path": "uo\/thumbnail.jpg"
+}