Skip to content

Commit b8e89a1

Browse files
committed
magento/adobe-stock-integration#1724: Support batches processing for synchronization queue messages - fixed failed static test and added integration test
1 parent a5e5c1b commit b8e89a1

File tree

3 files changed

+170
-14
lines changed

3 files changed

+170
-14
lines changed

app/code/Magento/MediaContentSynchronization/Model/SynchronizeIdentities.php

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ class SynchronizeIdentities implements SynchronizeIdentitiesInterface
1919
private const ENTITY_ID = 'entityId';
2020
private const FIELD = 'field';
2121

22-
private const MEDIA_CONTENT_TYPE = 'entity_type';
23-
private const MEDIA_CONTENT_ENTITY_ID = 'entity_id';
24-
private const MEDIA_CONTENT_FIELD = 'field';
25-
2622
private const FIELD_CMS_PAGE = 'cms_page';
2723
private const FIELD_CMS_BLOCK = 'cms_block';
2824

@@ -77,18 +73,18 @@ public function execute(array $mediaContentIdentities): void
7773
foreach ($mediaContentIdentities as $identity) {
7874
$contentIdentity = $this->contentIdentityFactory->create(
7975
[
80-
self::ENTITY_TYPE => $identity[self::MEDIA_CONTENT_TYPE],
81-
self::ENTITY_ID => $identity[self::MEDIA_CONTENT_ENTITY_ID],
82-
self::FIELD => $identity[self::MEDIA_CONTENT_FIELD]
76+
self::ENTITY_TYPE => $identity[self::ENTITY_TYPE],
77+
self::ENTITY_ID => $identity[self::ENTITY_ID],
78+
self::FIELD => $identity[self::FIELD]
8379
]
8480
);
8581

86-
if ($identity[self::MEDIA_CONTENT_TYPE] === self::FIELD_CMS_PAGE
87-
|| $identity[self::MEDIA_CONTENT_TYPE] === self::FIELD_CMS_BLOCK
82+
if ($identity[self::ENTITY_TYPE] === self::FIELD_CMS_PAGE
83+
|| $identity[self::ENTITY_TYPE] === self::FIELD_CMS_BLOCK
8884
) {
8985
$content = $this->getCmsMediaContent(
90-
$identity[self::MEDIA_CONTENT_TYPE],
91-
$identity[self::MEDIA_CONTENT_ENTITY_ID]
86+
$identity[self::ENTITY_TYPE],
87+
$identity[self::ENTITY_ID]
9288
);
9389
} else {
9490
$content = implode(PHP_EOL, $this->getEntityContents->execute($contentIdentity));
@@ -105,10 +101,10 @@ public function execute(array $mediaContentIdentities): void
105101
* Get cms media content from database
106102
*
107103
* @param string $tableName
108-
* @param string $cmsId
104+
* @param int $cmsId
109105
* @return string
110106
*/
111-
private function getCmsMediaContent(string $tableName, string $cmsId): string
107+
private function getCmsMediaContent(string $tableName, int $cmsId): string
112108
{
113109
$connection = $this->resourceConnection->getConnection();
114110
$tableName = $this->resourceConnection->getTableName($tableName);
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
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\MediaContentSynchronization\Test\Integration\Model;
9+
10+
use Magento\Framework\Exception\IntegrationException;
11+
use Magento\MediaContentApi\Api\Data\ContentIdentityInterfaceFactory;
12+
use Magento\MediaContentApi\Api\GetAssetIdsByContentIdentityInterface;
13+
use Magento\MediaContentApi\Api\GetContentByAssetIdsInterface;
14+
use Magento\MediaContentSynchronizationApi\Api\SynchronizeIdentitiesInterface;
15+
use Magento\MediaContentSynchronizationApi\Api\SynchronizeInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use PHPUnit\Framework\TestCase;
18+
19+
/**
20+
* Test for SynchronizeIdentities.
21+
*/
22+
class SynchronizeIdentitiesTest extends TestCase
23+
{
24+
/**
25+
* @var ContentIdentityInterfaceFactory
26+
*/
27+
private $contentIdentityFactory;
28+
29+
/**
30+
* @var GetAssetIdsByContentIdentityInterface
31+
*/
32+
private $getAssetIds;
33+
34+
/**
35+
* @var GetContentByAssetIdsInterface
36+
*/
37+
private $getContentIdentities;
38+
39+
/**
40+
* @var SynchronizeIdentitiesInterface
41+
*/
42+
private $synchronizeIdentities;
43+
44+
/**
45+
* @var SynchronizeInterface
46+
*/
47+
private $synchronize;
48+
49+
protected function setUp(): void
50+
{
51+
$this->contentIdentityFactory = Bootstrap::getObjectManager()->get(ContentIdentityInterfaceFactory::class);
52+
$this->getAssetIds = Bootstrap::getObjectManager()->get(GetAssetIdsByContentIdentityInterface::class);
53+
$this->synchronizeIdentities = Bootstrap::getObjectManager()->get(SynchronizeIdentitiesInterface::class);
54+
$this->synchronize = Bootstrap::getObjectManager()->get(SynchronizeInterface::class);
55+
$this->getContentIdentities = Bootstrap::getObjectManager()->get(GetContentByAssetIdsInterface::class);
56+
}
57+
58+
/**
59+
* @dataProvider filesProvider
60+
* @magentoDataFixture Magento/MediaContentCatalog/_files/category_with_asset.php
61+
* @magentoDataFixture Magento/MediaContentCatalog/_files/product_with_asset.php
62+
* @magentoDataFixture Magento/MediaContentCms/_files/page_with_asset.php
63+
* @magentoDataFixture Magento/MediaContentCms/_files/block_with_asset.php
64+
* @magentoDataFixture Magento/MediaGallery/_files/media_asset.php
65+
* @param array $mediaContentIdentities
66+
* @throws IntegrationException
67+
*/
68+
public function testExecute(array $mediaContentIdentities): void
69+
{
70+
$this->assertNotEmpty($mediaContentIdentities);
71+
$this->synchronizeIdentities->execute($mediaContentIdentities);
72+
73+
foreach ($mediaContentIdentities as $contentIdentity) {
74+
$assetId = 2020;
75+
$categoryId = 28767;
76+
$productId = 1567;
77+
$pageId = 5;
78+
$blockId = 1;
79+
$identity = $this->contentIdentityFactory->create($contentIdentity);
80+
$this->assertEquals([$assetId], $this->getAssetIds->execute($identity));
81+
82+
$synchronizedContentIdentities = $this->getContentIdentities->execute([$assetId]);
83+
$this->assertEquals(4, count($synchronizedContentIdentities));
84+
$this->assertEquals($categoryId, $synchronizedContentIdentities[0]->getEntityId());
85+
$this->assertEquals($productId, $synchronizedContentIdentities[1]->getEntityId());
86+
$this->assertEquals($pageId, $synchronizedContentIdentities[2]->getEntityId());
87+
$this->assertEquals($blockId, $synchronizedContentIdentities[3]->getEntityId());
88+
}
89+
}
90+
91+
/**
92+
* Data provider
93+
*
94+
* @return array
95+
*/
96+
public function filesProvider(): array
97+
{
98+
return [
99+
[
100+
[
101+
$this->getCategoryIdentities(),
102+
$this->getProductIdentities(),
103+
$this->getCmsPageIdentities(),
104+
$this->getCmsBlockIdentities()
105+
]
106+
]
107+
];
108+
}
109+
110+
/**
111+
* Format category media content identities
112+
*/
113+
public function getCategoryIdentities()
114+
{
115+
$categoryId = 28767;
116+
return $contentIdentity = [
117+
'entityType' => 'catalog_category',
118+
'field' => 'description',
119+
'entityId' => $categoryId
120+
];
121+
}
122+
123+
/**
124+
* Format product media content identities
125+
*/
126+
public function getProductIdentities()
127+
{
128+
$productId = 1567;
129+
return $contentIdentity = [
130+
'entityType' => 'catalog_product',
131+
'field' => 'description',
132+
'entityId' => $productId
133+
];
134+
}
135+
136+
/**
137+
* Format cms page media content identities
138+
*/
139+
public function getCmsPageIdentities()
140+
{
141+
$pageId = 5;
142+
return $contentIdentity = [
143+
'entityType' => 'cms_page',
144+
'field' => 'content',
145+
'entityId' => $pageId
146+
];
147+
}
148+
149+
/**
150+
* Format cms block media content identities
151+
*/
152+
public function getCmsBlockIdentities()
153+
{
154+
$blockId = 1;
155+
return $contentIdentity = [
156+
'entityType' => 'cms_block',
157+
'field' => 'content',
158+
'entityId' => $blockId
159+
];
160+
}
161+
}

app/code/Magento/MediaContentSynchronization/composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"magento/framework": "*",
77
"magento/framework-bulk": "*",
88
"magento/module-media-content-synchronization-api": "*",
9-
"magento/framework-message-queue": "*",
109
"magento/module-media-content-api": "*",
1110
"magento/module-asynchronous-operations": "*"
1211
},

0 commit comments

Comments
 (0)