Skip to content

Commit bcf7cd7

Browse files
committed
Merge remote-tracking branch 'adobe-commerce-tier-4/ACP2E-3797' into PR_2025_06_12_muntianu
2 parents e289191 + 3c4f30a commit bcf7cd7

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,18 @@ public function execute($product, $arguments = [])
219219
$clearImages[] = $image['file'];
220220
} elseif (empty($image['value_id']) || !empty($image['recreate'])) {
221221
$newFile = $this->moveImageFromTmp($image['file'] ?? '');
222-
$image['new_file'] = $newFile;
223-
$newImages[$image['file']] = $image;
224-
$image['file'] = $newFile;
222+
if (!empty($image['recreate']) && $newFile !== $image['file']) {
223+
//delete old image
224+
$this->mediaDirectory->renameFile(
225+
$this->mediaConfig->getMediaPath($newFile),
226+
$this->mediaConfig->getMediaPath($image['file'])
227+
);
228+
$existImages[$image['file']] = $image;
229+
} else {
230+
$image['new_file'] = $newFile;
231+
$newImages[$image['file']] = $image;
232+
$image['file'] = $newFile;
233+
}
225234
} else {
226235
$existImages[$image['file']] = $image;
227236
}

dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<?php
22
/**
3-
*
4-
* Copyright © Magento, Inc. All rights reserved.
5-
* See COPYING.txt for license details.
3+
* Copyright 2015 Adobe
4+
* All Rights Reserved.
65
*/
76
declare(strict_types=1);
87

@@ -895,4 +894,41 @@ public function testContentAttributeInGet(): void
895894
$response = $this->_webApiCall($serviceInfo, $requestData);
896895
$this->assertArrayHasKey('content', $response);
897896
}
897+
898+
/**
899+
* Test update() method when existing image gets overwritten and name is not changed
900+
*
901+
* @magentoApiDataFixture Magento/Catalog/_files/product_with_image.php
902+
*/
903+
public function testUpdateExistingImage()
904+
{
905+
$productRepository = $this->objectManager->create(ProductRepositoryInterface::class);
906+
/** @var \Magento\Catalog\Api\Data\ProductInterface $product */
907+
$product = $productRepository->get('simple');
908+
$imageId = (int)$product->getMediaGalleryImages()->getFirstItem()->getValueId();
909+
$requestData = [
910+
'sku' => 'simple',
911+
'entry' => [
912+
'id' => $this->getTargetGalleryEntryId(),
913+
'label' => 'Updated Image Text',
914+
'position' => 10,
915+
'types' => ['thumbnail'],
916+
'disabled' => true,
917+
'media_type' => 'image',
918+
'content' => [
919+
'base64_encoded_data' => base64_encode(file_get_contents($this->testImagePath)),
920+
'type' => 'image/jpeg',
921+
'name' => 'magento_image.jpg',
922+
]
923+
]
924+
];
925+
926+
$this->updateServiceInfo['rest']['resourcePath'] = $this->updateServiceInfo['rest']['resourcePath']
927+
. '/' . $this->getTargetGalleryEntryId();
928+
929+
$this->assertTrue($this->_webApiCall($this->updateServiceInfo, $requestData, null, 'all'));
930+
$updatedImage = $this->assertMediaGalleryData($imageId, '/m/a/magento_image.jpg', 'Updated Image Text');
931+
$this->assertEquals(10, $updatedImage['position_default']);
932+
$this->assertEquals(1, $updatedImage['disabled_default']);
933+
}
898934
}

0 commit comments

Comments
 (0)