Skip to content

Commit 7acc338

Browse files
authored
Merge pull request #5040 from magento-engcom/adobe-stock-integration-fix-2
[Magento Community Engineering] Adobe Stock Integration Bug Fixes
2 parents ba8dddb + c9b40f3 commit 7acc338

File tree

18 files changed

+529
-46
lines changed

18 files changed

+529
-46
lines changed

app/code/Magento/MediaGallery/Model/Asset/Command/DeleteByPath.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
namespace Magento\MediaGallery\Model\Asset\Command;
99

10-
use Magento\MediaGalleryApi\Model\Asset\Command\DeleteByPathInterface;
1110
use Magento\Framework\App\ResourceConnection;
12-
use Magento\Framework\Exception\CouldNotDeleteException;
1311
use Magento\Framework\DB\Adapter\AdapterInterface;
12+
use Magento\Framework\Exception\CouldNotDeleteException;
13+
use Magento\MediaGalleryApi\Model\Asset\Command\DeleteByPathInterface;
1414
use Psr\Log\LoggerInterface;
1515

1616
/**
@@ -62,11 +62,11 @@ public function execute(string $mediaAssetPath): void
6262
$tableName = $this->resourceConnection->getTableName(self::TABLE_MEDIA_GALLERY_ASSET);
6363
$connection->delete($tableName, [self::MEDIA_GALLERY_ASSET_PATH . ' = ?' => $mediaAssetPath]);
6464
} catch (\Exception $exception) {
65+
$this->logger->critical($exception);
6566
$message = __(
6667
'Could not delete media asset with path %path: %error',
6768
['path' => $mediaAssetPath, 'error' => $exception->getMessage()]
6869
);
69-
$this->logger->critical($message);
7070
throw new CouldNotDeleteException($message, $exception);
7171
}
7272
}

app/code/Magento/MediaGallery/Model/Asset/Command/GetById.php

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
namespace Magento\MediaGallery\Model\Asset\Command;
99

10-
use Magento\MediaGalleryApi\Api\Data\AssetInterface;
11-
use Magento\MediaGalleryApi\Api\Data\AssetInterfaceFactory;
12-
use Magento\MediaGalleryApi\Model\Asset\Command\GetByIdInterface;
1310
use Magento\Framework\App\ResourceConnection;
1411
use Magento\Framework\Exception\IntegrationException;
1512
use Magento\Framework\Exception\NoSuchEntityException;
13+
use Magento\MediaGalleryApi\Api\Data\AssetInterface;
14+
use Magento\MediaGalleryApi\Api\Data\AssetInterfaceFactory;
15+
use Magento\MediaGalleryApi\Model\Asset\Command\GetByIdInterface;
1616
use Psr\Log\LoggerInterface;
1717

1818
/**
@@ -66,24 +66,34 @@ public function __construct(
6666
public function execute(int $mediaAssetId): AssetInterface
6767
{
6868
try {
69+
$mediaAssetTable = $this->resourceConnection->getTableName(self::TABLE_MEDIA_GALLERY_ASSET);
6970
$connection = $this->resourceConnection->getConnection();
7071
$select = $connection->select()
71-
->from(['amg' => $this->resourceConnection->getTableName(self::TABLE_MEDIA_GALLERY_ASSET)])
72+
->from(['amg' => $mediaAssetTable])
7273
->where('amg.id = ?', $mediaAssetId);
73-
$data = $connection->query($select)->fetch();
74+
$mediaAssetData = $connection->query($select)->fetch();
75+
} catch (\Exception $exception) {
76+
$message = __(
77+
'En error occurred during get media asset data by id %id: %error',
78+
['id' => $mediaAssetId, 'error' => $exception->getMessage()]
79+
);
80+
$this->logger->critical($message);
81+
throw new IntegrationException($message, $exception);
82+
}
7483

75-
if (empty($data)) {
76-
$message = __('There is no such media asset with id "%1"', $mediaAssetId);
77-
throw new NoSuchEntityException($message);
78-
}
84+
if (empty($mediaAssetData)) {
85+
$message = __('There is no such media asset with id "%1"', $mediaAssetId);
86+
throw new NoSuchEntityException($message);
87+
}
7988

80-
return $this->assetFactory->create(['data' => $data]);
89+
try {
90+
return $this->assetFactory->create(['data' => $mediaAssetData]);
8191
} catch (\Exception $exception) {
92+
$this->logger->critical($exception->getMessage());
8293
$message = __(
83-
'En error occurred during get media asset with id %id by id: %error',
94+
'En error occurred during initialize media asset with id %id: %error',
8495
['id' => $mediaAssetId, 'error' => $exception->getMessage()]
8596
);
86-
$this->logger->critical($message);
8797
throw new IntegrationException($message, $exception);
8898
}
8999
}

app/code/Magento/MediaGallery/Model/Asset/Command/GetByPath.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public function execute(string $mediaFilePath): AssetInterface
8282

8383
return $mediaAssets;
8484
} catch (\Exception $exception) {
85+
$this->logger->critical($exception);
8586
$message = __('An error occurred during get media asset list: %1', $exception->getMessage());
86-
$this->logger->critical($message);
8787
throw new IntegrationException($message, $exception);
8888
}
8989
}

app/code/Magento/MediaGallery/Model/Asset/Command/Save.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ public function execute(AssetInterface $mediaAsset): int
7171
$connection->insertOnDuplicate($tableName, $this->extractor->extract($mediaAsset, AssetInterface::class));
7272
return (int) $connection->lastInsertId($tableName);
7373
} catch (\Exception $exception) {
74+
$this->logger->critical($exception);
7475
$message = __('An error occurred during media asset save: %1', $exception->getMessage());
75-
$this->logger->critical($message);
7676
throw new CouldNotSaveException($message, $exception);
7777
}
7878
}

app/code/Magento/MediaGallery/Model/DataExtractor.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,13 @@
1515
class DataExtractor implements DataExtractorInterface
1616
{
1717
/**
18-
* @inheritdoc
18+
* Extract data from an object using available getters (does not process extension attributes)
19+
*
20+
* @param object $object
21+
* @param string|null $interface
22+
*
23+
* @return array
24+
* @throws \ReflectionException
1925
*/
2026
public function extract($object, string $interface = null): array
2127
{

app/code/Magento/MediaGallery/Model/Keyword/Command/GetAssetKeywords.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77

88
namespace Magento\MediaGallery\Model\Keyword\Command;
99

10+
use Magento\Framework\Exception\IntegrationException;
1011
use Magento\MediaGalleryApi\Api\Data\KeywordInterface;
1112
use Magento\MediaGalleryApi\Api\Data\KeywordInterfaceFactory;
1213
use Magento\MediaGalleryApi\Model\Keyword\Command\GetAssetKeywordsInterface;
1314
use Magento\Framework\App\ResourceConnection;
14-
use Magento\Framework\Exception\NotFoundException;
15+
use Psr\Log\LoggerInterface;
1516

1617
/**
1718
* ClassGetAssetKeywords
@@ -31,27 +32,35 @@ class GetAssetKeywords implements GetAssetKeywordsInterface
3132
*/
3233
private $assetKeywordFactory;
3334

35+
/**
36+
* @var LoggerInterface
37+
*/
38+
private $logger;
39+
3440
/**
3541
* GetAssetKeywords constructor.
3642
*
3743
* @param ResourceConnection $resourceConnection
3844
* @param KeywordInterfaceFactory $assetKeywordFactory
45+
* @param LoggerInterface $logger
3946
*/
4047
public function __construct(
4148
ResourceConnection $resourceConnection,
42-
KeywordInterfaceFactory $assetKeywordFactory
49+
KeywordInterfaceFactory $assetKeywordFactory,
50+
LoggerInterface $logger
4351
) {
4452
$this->resourceConnection = $resourceConnection;
4553
$this->assetKeywordFactory = $assetKeywordFactory;
54+
$this->logger = $logger;
4655
}
4756

4857
/**
4958
* Get asset related keywords.
5059
*
5160
* @param int $assetId
5261
*
53-
* @return KeywordInterface[]
54-
* @throws NotFoundException
62+
* @return KeywordInterface[]|[]
63+
* @throws IntegrationException
5564
*/
5665
public function execute(int $assetId): array
5766
{
@@ -71,8 +80,9 @@ public function execute(int $assetId): array
7180

7281
return $keywords;
7382
} catch (\Exception $exception) {
83+
$this->logger->critical($exception);
7484
$message = __('An error occurred during get asset keywords: %1', $exception->getMessage());
75-
throw new NotFoundException($message, $exception);
85+
throw new IntegrationException($message, $exception);
7686
}
7787
}
7888
}

app/code/Magento/MediaGallery/Model/Keyword/Command/SaveAssetKeywords.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Framework\DB\Adapter\AdapterInterface;
1414
use Magento\Framework\DB\Adapter\Pdo\Mysql;
1515
use Magento\Framework\Exception\CouldNotSaveException;
16+
use Psr\Log\LoggerInterface;
1617

1718
/**
1819
* Class SaveAssetKeywords
@@ -33,22 +34,34 @@ class SaveAssetKeywords implements SaveAssetKeywordsInterface
3334
*/
3435
private $saveAssetLinks;
3536

37+
/**
38+
* @var LoggerInterface
39+
*/
40+
private $logger;
41+
3642
/**
3743
* SaveAssetKeywords constructor.
3844
*
3945
* @param ResourceConnection $resourceConnection
4046
* @param SaveAssetLinks $saveAssetLinks
47+
* @param LoggerInterface $logger
4148
*/
4249
public function __construct(
4350
ResourceConnection $resourceConnection,
44-
SaveAssetLinks $saveAssetLinks
51+
SaveAssetLinks $saveAssetLinks,
52+
LoggerInterface $logger
4553
) {
4654
$this->resourceConnection = $resourceConnection;
4755
$this->saveAssetLinks = $saveAssetLinks;
56+
$this->logger = $logger;
4857
}
4958

5059
/**
51-
* @inheritdoc
60+
* Save asset keywords.
61+
*
62+
* @param KeywordInterface[] $keywords
63+
* @param int $assetId
64+
* @throws CouldNotSaveException
5265
*/
5366
public function execute(array $keywords, int $assetId): void
5467
{
@@ -72,6 +85,7 @@ public function execute(array $keywords, int $assetId): void
7285
$this->saveAssetLinks->execute($assetId, $this->getKeywordIds($data));
7386
}
7487
} catch (\Exception $exception) {
88+
$this->logger->critical($exception);
7589
$message = __('An error occurred during save asset keyword: %1', $exception->getMessage());
7690
throw new CouldNotSaveException($message, $exception);
7791
}

app/code/Magento/MediaGallery/Model/Keyword/Command/SaveAssetLinks.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Framework\DB\Adapter\AdapterInterface;
1414
use Magento\Framework\DB\Adapter\Pdo\Mysql;
1515
use Magento\Framework\Exception\CouldNotSaveException;
16+
use Psr\Log\LoggerInterface;
1617

1718
/**
1819
* Class SaveAssetLinks
@@ -29,14 +30,22 @@ class SaveAssetLinks
2930
private $resourceConnection;
3031

3132
/**
32-
* SaveAssetKeywords constructor.
33+
* @var LoggerInterface
34+
*/
35+
private $logger;
36+
37+
/**
38+
* SaveAssetLinks constructor.
3339
*
3440
* @param ResourceConnection $resourceConnection
41+
* @param LoggerInterface $logger
3542
*/
3643
public function __construct(
37-
ResourceConnection $resourceConnection
44+
ResourceConnection $resourceConnection,
45+
LoggerInterface $logger
3846
) {
3947
$this->resourceConnection = $resourceConnection;
48+
$this->logger = $logger;
4049
}
4150

4251
/**
@@ -66,6 +75,7 @@ public function execute(int $assetId, array $keywordIds): void
6675
);
6776
}
6877
} catch (\Exception $exception) {
78+
$this->logger->critical($exception);
6979
$message = __('An error occurred during save asset keyword links: %1', $exception->getMessage());
7080
throw new CouldNotSaveException($message, $exception);
7181
}

app/code/Magento/MediaGallery/Plugin/Product/Gallery/Processor.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ public function afterRemoveImage(
6767
try {
6868
$this->deleteMediaAssetByPath->execute($file);
6969
} catch (\Exception $exception) {
70-
$message = __('An error occurred during media asset delete at media processor: %1', $exception->getMessage());
71-
$this->logger->critical($message->render());
70+
$this->logger->critical($exception);
7271
}
7372

7473
return $result;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\MediaGallery\Test\Unit\Model\Asset\Command;
9+
10+
use Magento\Framework\App\ResourceConnection;
11+
use Magento\Framework\DB\Adapter\AdapterInterface;
12+
use Magento\Framework\DB\Select;
13+
use Magento\Framework\Exception\IntegrationException;
14+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
15+
use Magento\MediaGallery\Model\Asset\Command\GetById;
16+
use Magento\MediaGalleryApi\Api\Data\AssetInterfaceFactory;
17+
use PHPUnit\Framework\MockObject\MockObject;
18+
use Psr\Log\LoggerInterface;
19+
use Zend\Db\Adapter\Driver\Pdo\Statement;
20+
21+
/**
22+
* Test the GetById command with exception during media asset initialization
23+
*/
24+
class GetByIdExceptionDuringMediaAssetInitializationTest extends \PHPUnit\Framework\TestCase
25+
{
26+
private const MEDIA_ASSET_STUB_ID = 1;
27+
28+
private const MEDIA_ASSET_DATA = ['id' => 1];
29+
30+
/**
31+
* @var GetById|MockObject
32+
*/
33+
private $getMediaAssetById;
34+
35+
/**
36+
* @var AssetInterfaceFactory|MockObject
37+
*/
38+
private $assetFactory;
39+
40+
/**
41+
* @var AdapterInterface|MockObject
42+
*/
43+
private $adapter;
44+
45+
/**
46+
* @var Select|MockObject
47+
*/
48+
private $selectStub;
49+
50+
/**
51+
* @var Statement|MockObject
52+
*/
53+
private $statementMock;
54+
55+
/**
56+
* @var LoggerInterface|MockObject
57+
*/
58+
private $logger;
59+
60+
/**
61+
* Initialize basic test class mocks
62+
*/
63+
protected function setUp(): void
64+
{
65+
$resourceConnection = $this->createMock(ResourceConnection::class);
66+
$this->assetFactory = $this->createMock(AssetInterfaceFactory::class);
67+
$this->logger = $this->createMock(LoggerInterface::class);
68+
69+
$this->getMediaAssetById = (new ObjectManager($this))->getObject(
70+
GetById::class,
71+
[
72+
'resourceConnection' => $resourceConnection,
73+
'assetFactory' => $this->assetFactory,
74+
'logger' => $this->logger,
75+
]
76+
);
77+
$this->adapter = $this->createMock(AdapterInterface::class);
78+
$resourceConnection->method('getConnection')->willReturn($this->adapter);
79+
80+
$this->selectStub = $this->createMock(Select::class);
81+
$this->selectStub->method('from')->willReturnSelf();
82+
$this->selectStub->method('where')->willReturnSelf();
83+
$this->adapter->method('select')->willReturn($this->selectStub);
84+
85+
$this->statementMock = $this->getMockBuilder(\Zend_Db_Statement_Interface::class)->getMock();
86+
}
87+
88+
/**
89+
* Test case when a problem occurred during asset initialization from received data.
90+
*/
91+
public function testErrorDuringMediaAssetInitializationException(): void
92+
{
93+
$this->statementMock->method('fetch')->willReturn(self::MEDIA_ASSET_DATA);
94+
$this->adapter->method('query')->willReturn($this->statementMock);
95+
96+
$this->assetFactory->expects($this->once())->method('create')->willThrowException(new \Exception());
97+
98+
$this->expectException(IntegrationException::class);
99+
$this->logger->expects($this->any())
100+
->method('critical')
101+
->willReturnSelf();
102+
103+
$this->getMediaAssetById->execute(self::MEDIA_ASSET_STUB_ID);
104+
}
105+
}

0 commit comments

Comments
 (0)