Skip to content

Commit 3c4f30a

Browse files
committed
ACP2E-3797: New Files Created Instead of Replacing Existing Images
1 parent aae55be commit 3c4f30a

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +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-
if (!empty($image['recreate'])) {
222+
if (!empty($image['recreate']) && $newFile !== $image['file']) {
225223
//delete old image
226-
$this->mediaDirectory->delete($this->mediaConfig->getMediaPath($image['file']));
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;
227233
}
228-
$image['file'] = $newFile;
229234
} else {
230235
$existImages[$image['file']] = $image;
231236
}

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

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99

1010
use Magento\Catalog\Test\Fixture\Product as ProductFixture;
1111
use Magento\Framework\Api\Data\ImageContentInterface;
12-
use Magento\Framework\App\Filesystem\DirectoryList;
13-
use Magento\Framework\Filesystem;
14-
use Magento\Framework\Filesystem\Directory\WriteInterface;
1512
use Magento\Store\Test\Fixture\Store as StoreFixture;
1613
use Magento\TestFramework\Fixture\DataFixture;
1714
use Magento\TestFramework\Fixture\DataFixtureStorage;
@@ -25,7 +22,7 @@
2522
use Magento\Framework\ObjectManagerInterface;
2623

2724
/**
28-
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
25+
* Class ProductAttributeMediaGalleryManagementInterfaceTest
2926
*/
3027
class ProductAttributeMediaGalleryManagementInterfaceTest extends WebapiAbstract
3128
{
@@ -71,11 +68,6 @@ class ProductAttributeMediaGalleryManagementInterfaceTest extends WebapiAbstract
7168
*/
7269
private $fixtures;
7370

74-
/**
75-
* @var WriteInterface
76-
*/
77-
private $mediaDirectory;
78-
7971
/**
8072
* @inheritDoc
8173
*/
@@ -120,8 +112,6 @@ protected function setUp(): void
120112

121113
$this->testImagePath = __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'test_image.jpg';
122114
$this->fixtures = $this->objectManager->get(DataFixtureStorageManager::class)->getStorage();
123-
$this->mediaDirectory = $this->objectManager->get(Filesystem::class)
124-
->getDirectoryWrite(DirectoryList::MEDIA);
125115
}
126116

127117
/**
@@ -906,7 +896,7 @@ public function testContentAttributeInGet(): void
906896
}
907897

908898
/**
909-
* Test update() method when existing image gets overwritten
899+
* Test update() method when existing image gets overwritten and name is not changed
910900
*
911901
* @magentoApiDataFixture Magento/Catalog/_files/product_with_image.php
912902
*/
@@ -916,7 +906,6 @@ public function testUpdateExistingImage()
916906
/** @var \Magento\Catalog\Api\Data\ProductInterface $product */
917907
$product = $productRepository->get('simple');
918908
$imageId = (int)$product->getMediaGalleryImages()->getFirstItem()->getValueId();
919-
$originalImagePath = $product->getMediaGalleryImages()->getFirstItem()->getFile();
920909
$requestData = [
921910
'sku' => 'simple',
922911
'entry' => [
@@ -929,7 +918,7 @@ public function testUpdateExistingImage()
929918
'content' => [
930919
'base64_encoded_data' => base64_encode(file_get_contents($this->testImagePath)),
931920
'type' => 'image/jpeg',
932-
'name' => 'test_image.jpg',
921+
'name' => 'magento_image.jpg',
933922
]
934923
]
935924
];
@@ -938,10 +927,8 @@ public function testUpdateExistingImage()
938927
. '/' . $this->getTargetGalleryEntryId();
939928

940929
$this->assertTrue($this->_webApiCall($this->updateServiceInfo, $requestData, null, 'all'));
941-
$updatedImage = $this->assertMediaGalleryData($imageId, '/t/e/test_image.jpg', 'Updated Image Text');
930+
$updatedImage = $this->assertMediaGalleryData($imageId, '/m/a/magento_image.jpg', 'Updated Image Text');
942931
$this->assertEquals(10, $updatedImage['position_default']);
943932
$this->assertEquals(1, $updatedImage['disabled_default']);
944-
$this->assertStringStartsWith('/t/e/test_image.jpg', $updatedImage['file']);
945-
$this->assertFalse($this->mediaDirectory->isExist($originalImagePath));
946933
}
947934
}

0 commit comments

Comments
 (0)