magento2-docker/dev/tests/integration/testsuite/Magento/MediaGallerySynchronization.../Model/SynchronizeFilesTest.php

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
);
}
}