151 lines
4.1 KiB
PHP
Executable File
151 lines
4.1 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\MediaGallerySynchronizationMetadata\Model;
|
|
|
|
use Magento\Framework\App\Filesystem\DirectoryList;
|
|
use Magento\Framework\Exception\FileSystemException;
|
|
use Magento\Framework\Filesystem;
|
|
use Magento\Framework\Filesystem\Directory\WriteInterface;
|
|
use Magento\Framework\Filesystem\DriverInterface;
|
|
use Magento\MediaGalleryApi\Api\Data\AssetInterface;
|
|
use Magento\MediaGalleryApi\Api\Data\KeywordInterface;
|
|
use Magento\MediaGalleryApi\Api\GetAssetsByPathsInterface;
|
|
use Magento\MediaGallerySynchronizationApi\Api\SynchronizeFilesInterface;
|
|
use Magento\MediaGalleryApi\Api\GetAssetsKeywordsInterface;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* Test for SynchronizeFiles.
|
|
*/
|
|
class SynchronizeFilesTest extends TestCase
|
|
{
|
|
/**
|
|
* @var DriverInterface
|
|
*/
|
|
private $driver;
|
|
|
|
/**
|
|
* @var SynchronizeFilesInterface
|
|
*/
|
|
private $synchronizeFiles;
|
|
|
|
/**
|
|
* @var GetAssetsByPathsInterface
|
|
*/
|
|
private $getAssetsByPath;
|
|
|
|
/**
|
|
* @var WriteInterface
|
|
*/
|
|
private $mediaDirectory;
|
|
|
|
/**
|
|
* @var GetAssetsKeywordsInterface
|
|
*/
|
|
private $getAssetKeywords;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->synchronizeFiles = Bootstrap::getObjectManager()->get(SynchronizeFilesInterface::class);
|
|
$this->getAssetsByPath = Bootstrap::getObjectManager()->get(GetAssetsByPathsInterface::class);
|
|
$this->getAssetKeywords = Bootstrap::getObjectManager()->get(GetAssetsKeywordsInterface::class);
|
|
$this->mediaDirectory = Bootstrap::getObjectManager()->get(Filesystem::class)
|
|
->getDirectoryWrite(DirectoryList::MEDIA);
|
|
$this->driver = $this->mediaDirectory->getDriver();
|
|
}
|
|
|
|
/**
|
|
* Test for SynchronizeFiles::execute
|
|
*
|
|
* @dataProvider filesProvider
|
|
* @param null|string $file
|
|
* @param null|string $title
|
|
* @param null|string $description
|
|
* @param null|array $keywords
|
|
* @throws FileSystemException
|
|
* @throws \Magento\Framework\Exception\LocalizedException
|
|
*/
|
|
public function testExecute(
|
|
?string $file,
|
|
?string $title,
|
|
?string $description,
|
|
?array $keywords
|
|
): void {
|
|
$path = realpath(__DIR__ . '/../_files/' . $file);
|
|
$modifiableFilePath = $this->mediaDirectory->getAbsolutePath($file);
|
|
$this->driver->filePutContents(
|
|
$modifiableFilePath,
|
|
file_get_contents($path)
|
|
);
|
|
|
|
$this->synchronizeFiles->execute([$file]);
|
|
|
|
$loadedAssets = $this->getAssetsByPath->execute([$file])[0];
|
|
$loadedKeywords = $this->getKeywords($loadedAssets) ?: null;
|
|
|
|
$this->assertEquals($title, $loadedAssets->getTitle());
|
|
$this->assertEquals($description, $loadedAssets->getDescription());
|
|
$this->assertEquals($keywords, $loadedKeywords);
|
|
$this->driver->deleteFile($modifiableFilePath);
|
|
}
|
|
|
|
/**
|
|
* Data provider for testExecute
|
|
*
|
|
* @return array[]
|
|
*/
|
|
public function filesProvider(): array
|
|
{
|
|
return [
|
|
[
|
|
'/magento.jpg',
|
|
'magento',
|
|
null,
|
|
null
|
|
],
|
|
[
|
|
'/magento_metadata.jpg',
|
|
'Title of the magento image',
|
|
'Description of the magento image',
|
|
[
|
|
'magento',
|
|
'mediagallerymetadata'
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Key asset keywords
|
|
*
|
|
* @param AssetInterface $asset
|
|
* @return string[]
|
|
*/
|
|
private function getKeywords(AssetInterface $asset): array
|
|
{
|
|
$assetKeywords = $this->getAssetKeywords->execute([$asset->getId()]);
|
|
|
|
if (empty($assetKeywords)) {
|
|
return [];
|
|
}
|
|
|
|
$keywords = current($assetKeywords)->getKeywords();
|
|
|
|
return array_map(
|
|
function (KeywordInterface $keyword) {
|
|
return $keyword->getKeyword();
|
|
},
|
|
$keywords
|
|
);
|
|
}
|
|
}
|