Skip to content

Commit b166cf5

Browse files
committed
magento/adobe-stock-integration#1391: SaveAssetsKeywordsInterface to delete obsolete keywords - Enhancements, Revision on integration test and fix unit test failure
1 parent 659071c commit b166cf5

File tree

3 files changed

+61
-53
lines changed

3 files changed

+61
-53
lines changed

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

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -88,35 +88,29 @@ public function execute(int $assetId, array $keywordIds): void
8888
*
8989
* @param int $assetId
9090
* @param int[] $keywordIds
91-
* @throws CouldNotSaveException
9291
*/
9392
private function insertAssetKeywords(int $assetId, array $keywordIds): void
9493
{
94+
if (empty($keywordIds)) {
95+
return;
96+
}
9597
try {
96-
if (!empty($keywordIds)) {
97-
$values = [];
98-
99-
foreach ($keywordIds as $keywordId) {
100-
$values[] = [$assetId, $keywordId];
101-
}
102-
103-
if (!empty($values)) {
104-
/** @var Mysql $connection */
105-
$connection = $this->resourceConnection->getConnection();
106-
$connection->insertArray(
107-
$this->resourceConnection->getTableName(self::TABLE_ASSET_KEYWORD),
108-
[self::FIELD_ASSET_ID, self::FIELD_KEYWORD_ID],
109-
$values,
110-
AdapterInterface::INSERT_IGNORE
111-
);
112-
}
98+
$values = [];
99+
100+
foreach ($keywordIds as $keywordId) {
101+
$values[] = [$assetId, $keywordId];
113102
}
103+
104+
/** @var Mysql $connection */
105+
$connection = $this->resourceConnection->getConnection();
106+
$connection->insertArray(
107+
$this->resourceConnection->getTableName(self::TABLE_ASSET_KEYWORD),
108+
[self::FIELD_ASSET_ID, self::FIELD_KEYWORD_ID],
109+
$values,
110+
AdapterInterface::INSERT_IGNORE
111+
);
114112
} catch (\Exception $exception) {
115113
$this->logger->critical($exception);
116-
throw new CouldNotSaveException(
117-
__('Could not save asset keyword links'),
118-
$exception
119-
);
120114
}
121115
}
122116

@@ -129,20 +123,21 @@ private function insertAssetKeywords(int $assetId, array $keywordIds): void
129123
*/
130124
private function deleteAssetKeywords(int $assetId, array $obsoleteKeywordIds): void
131125
{
126+
if (empty($obsoleteKeywordIds)) {
127+
return;
128+
}
132129
try {
133-
if (!empty($obsoleteKeywordIds)) {
134-
/** @var Mysql $connection */
135-
$connection = $this->resourceConnection->getConnection();
136-
$connection->delete(
137-
$connection->getTableName(
138-
self::TABLE_ASSET_KEYWORD
139-
),
140-
[
141-
self::FIELD_KEYWORD_ID . ' in (?)' => $obsoleteKeywordIds,
142-
self::FIELD_ASSET_ID . ' = ?' => $assetId
143-
]
144-
);
145-
}
130+
/** @var Mysql $connection */
131+
$connection = $this->resourceConnection->getConnection();
132+
$connection->delete(
133+
$connection->getTableName(
134+
self::TABLE_ASSET_KEYWORD
135+
),
136+
[
137+
self::FIELD_KEYWORD_ID . ' in (?)' => $obsoleteKeywordIds,
138+
self::FIELD_ASSET_ID . ' = ?' => $assetId
139+
]
140+
);
146141
} catch (\Exception $exception) {
147142
$this->logger->critical($exception);
148143
throw new CouldNotDeleteException(

app/code/Magento/MediaGallery/Test/Unit/Model/ResourceModel/Keyword/SaveAssetLinksTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\Framework\DB\Adapter\AdapterInterface;
1212
use Magento\Framework\Exception\CouldNotSaveException;
1313
use Magento\MediaGallery\Model\ResourceModel\Keyword\SaveAssetLinks;
14+
use Magento\MediaGalleryApi\Api\GetAssetsKeywordsInterface;
1415
use PHPUnit\Framework\MockObject\MockObject;
1516
use PHPUnit\Framework\TestCase;
1617
use Psr\Log\LoggerInterface;
@@ -32,6 +33,11 @@ class SaveAssetLinksTest extends TestCase
3233
*/
3334
private $resourceConnectionMock;
3435

36+
/**
37+
* @var GetAssetsKeywordsInterface
38+
*/
39+
private $getAssetsKeywords;
40+
3541
/**
3642
* @var LoggerInterface|MockObject
3743
*/
@@ -44,9 +50,11 @@ protected function setUp(): void
4450
{
4551
$this->connectionMock = $this->getMockForAbstractClass(AdapterInterface::class);
4652
$this->resourceConnectionMock = $this->createMock(ResourceConnection::class);
53+
$this->getAssetsKeywords = $this->getMockForAbstractClass(GetAssetsKeywordsInterface::class);
4754
$this->loggerMock = $this->getMockForAbstractClass(LoggerInterface::class);
4855

4956
$this->sut = new SaveAssetLinks(
57+
$this->getAssetsKeywords,
5058
$this->resourceConnectionMock,
5159
$this->loggerMock
5260
);
@@ -60,6 +68,7 @@ protected function setUp(): void
6068
* @param int $assetId
6169
* @param array $keywordIds
6270
* @param array $values
71+
* @throws CouldNotSaveException
6372
*/
6473
public function testAssetKeywordsSave(int $assetId, array $keywordIds, array $values): void
6574
{

dev/tests/integration/testsuite/Magento/MediaGallery/Model/ResourceModel/AssetKeywordsTest.php

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
namespace Magento\MediaGallery\Model\ResourceModel;
99

1010
use Behat\Gherkin\Keywords\KeywordsInterface;
11-
use Magento\MediaGalleryApi\Api\Data\KeywordInterfaceFactory;
12-
use Magento\MediaGalleryApi\Api\Data\AssetKeywordsInterfaceFactory;
1311
use Magento\MediaGalleryApi\Api\Data\AssetKeywordsInterface;
12+
use Magento\MediaGalleryApi\Api\Data\AssetKeywordsInterfaceFactory;
13+
use Magento\MediaGalleryApi\Api\Data\KeywordInterfaceFactory;
1414
use Magento\MediaGalleryApi\Api\GetAssetsByPathsInterface;
1515
use Magento\MediaGalleryApi\Api\GetAssetsKeywordsInterface;
1616
use Magento\MediaGalleryApi\Api\SaveAssetsKeywordsInterface;
@@ -66,8 +66,8 @@ protected function setUp(): void
6666
*
6767
* @magentoDataFixture Magento/MediaGallery/_files/media_asset.php
6868
* @dataProvider keywordsProvider
69-
* @param array|null $keywords
70-
* @param array|null $updatedKeywords
69+
* @param string[] $keywords
70+
* @param string[] $updatedKeywords
7171
* @throws \Magento\Framework\Exception\LocalizedException
7272
*/
7373
public function testSaveAndGetKeywords(array $keywords = [], array $updatedKeywords = []): void
@@ -77,16 +77,17 @@ public function testSaveAndGetKeywords(array $keywords = [], array $updatedKeywo
7777
$loadedAsset = current($loadedAssets);
7878

7979
$this->updateAssetKeywords($loadedAsset->getId(), $keywords);
80-
$this->updateAssetKeywords($loadedAsset->getId(), $updatedKeywords);
80+
$this->updateAssetKeywords($loadedAsset->getId(), $updatedKeywords, $keywords);
8181
}
8282

8383
/**
8484
* Update Asset keywords
8585
*
8686
* @param int $assetId
87-
* @param array|null $keywords
87+
* @param string[] $keywords
88+
* @param string[] $currentKeywords
8889
*/
89-
private function updateAssetKeywords(int $assetId, array $keywords = []): void
90+
private function updateAssetKeywords(int $assetId, array $keywords = [], array $currentKeywords = []): void
9091
{
9192
$assetKeywords = $this->assetsKeywordsFactory->create(
9293
[
@@ -98,25 +99,28 @@ private function updateAssetKeywords(int $assetId, array $keywords = []): void
9899
$this->saveAssetsKeywords->execute([$assetKeywords]);
99100
$loadedAssetKeywords = $this->getAssetsKeywords->execute([$assetId]);
100101

101-
if (!empty($keywords)) {
102-
$this->assertCount(1, $loadedAssetKeywords);
103-
/** @var AssetKeywordsInterface $loadedAssetKeyword */
104-
$loadedAssetKeyword = current($loadedAssetKeywords);
102+
$currentKeywords = empty($keywords) ? $currentKeywords : $keywords;
103+
$expectedCount = !empty($currentKeywords) ? 1 : 0;
104+
105+
$this->assertCount($expectedCount, $loadedAssetKeywords);
106+
/** @var AssetKeywordsInterface $loadedAssetKeyword */
107+
$loadedAssetKeyword = current($loadedAssetKeywords);
105108

106-
$loadedKeywords = $loadedAssetKeyword->getKeywords();
109+
$loadedKeywords = !empty($loadedAssetKeyword) ? $loadedAssetKeyword->getKeywords() : [];
107110

108-
$this->assertEquals(count($keywords), count($loadedKeywords));
111+
$this->assertEquals(count($currentKeywords), count($loadedKeywords));
109112

110-
$loadedKeywordStrings = [];
113+
$loadedKeywordStrings = [];
114+
if (!empty($loadedKeywords)) {
111115
foreach ($loadedKeywords as $loadedKeywordObject) {
112116
$loadedKeywordStrings[] = $loadedKeywordObject->getKeyword();
113117
}
118+
}
114119

115-
sort($loadedKeywordStrings);
116-
sort($keywords);
120+
sort($loadedKeywordStrings);
121+
sort($currentKeywords);
117122

118-
$this->assertEquals($keywords, $loadedKeywordStrings);
119-
}
123+
$this->assertEquals($currentKeywords, $loadedKeywordStrings);
120124
}
121125

122126
/**

0 commit comments

Comments
 (0)