189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\MediaGallery\Model\ResourceModel;
 | 
						|
 | 
						|
use Magento\Framework\Reflection\DataObjectProcessor;
 | 
						|
use Magento\MediaGalleryApi\Api\Data\AssetInterfaceFactory;
 | 
						|
use Magento\MediaGalleryApi\Api\Data\AssetInterface;
 | 
						|
use Magento\MediaGalleryApi\Api\GetAssetsByIdsInterface;
 | 
						|
use Magento\MediaGalleryApi\Api\GetAssetsByPathsInterface;
 | 
						|
use Magento\MediaGalleryApi\Api\SaveAssetsInterface;
 | 
						|
use Magento\MediaGalleryApi\Api\DeleteAssetsByPathsInterface;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test for assets operations
 | 
						|
 */
 | 
						|
class AssetsTest extends TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var AssetInterfaceFactory
 | 
						|
     */
 | 
						|
    private $assetFactory;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var SaveAssetsInterface
 | 
						|
     */
 | 
						|
    private $saveAssets;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var GetAssetsByIdsInterface
 | 
						|
     */
 | 
						|
    private $getAssetsByIds;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var GetAssetsByPathsInterface
 | 
						|
     */
 | 
						|
    private $getAssetsByPath;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var DeleteAssetsByPathsInterface
 | 
						|
     */
 | 
						|
    private $deleteAssetsByPaths;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var DataObjectProcessor
 | 
						|
     */
 | 
						|
    private $dataObjectProcessor;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->assetFactory = Bootstrap::getObjectManager()->get(AssetInterfaceFactory::class);
 | 
						|
        $this->saveAssets = Bootstrap::getObjectManager()->get(SaveAssetsInterface::class);
 | 
						|
        $this->getAssetsByIds = Bootstrap::getObjectManager()->get(GetAssetsByIdsInterface::class);
 | 
						|
        $this->getAssetsByPath = Bootstrap::getObjectManager()->get(GetAssetsByPathsInterface::class);
 | 
						|
        $this->deleteAssetsByPaths = Bootstrap::getObjectManager()->get(DeleteAssetsByPathsInterface::class);
 | 
						|
        $this->dataObjectProcessor = Bootstrap::getObjectManager()->get(DataObjectProcessor::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Testing assets keywords save and get
 | 
						|
     *
 | 
						|
     * @param array $assetsData
 | 
						|
     * @throws \Magento\Framework\Exception\CouldNotSaveException
 | 
						|
     * @throws \Magento\Framework\Exception\LocalizedException
 | 
						|
     *
 | 
						|
     * @dataProvider assetsDataProvider
 | 
						|
     */
 | 
						|
    public function testExecute(array $assetsData): void
 | 
						|
    {
 | 
						|
        $this->saveAssets->execute($this->getAssets($assetsData));
 | 
						|
 | 
						|
        $paths = $this->getKeyValues($assetsData, 'path');
 | 
						|
        $loadedAssets = $this->getAssetsByPath->execute($paths);
 | 
						|
        $loadedPaths = $this->getFieldValues($loadedAssets, 'path');
 | 
						|
 | 
						|
        $this->assertEquals(count($assetsData), count($loadedAssets));
 | 
						|
 | 
						|
        sort($paths);
 | 
						|
        sort($loadedPaths);
 | 
						|
        $this->assertEquals($paths, $loadedPaths);
 | 
						|
 | 
						|
        $this->deleteAssetsByPaths->execute($paths);
 | 
						|
        $this->assertEmpty($this->getAssetsByPath->execute($paths));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Data provider for testExecute
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function assetsDataProvider(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'One asset' => [
 | 
						|
                'assetsData' => [
 | 
						|
                    'asset1' => [
 | 
						|
                        'path' => 'fruit.jpg',
 | 
						|
                        'title' => 'Img',
 | 
						|
                        'source' => 'Local',
 | 
						|
                        'contentType' => 'image/jpeg',
 | 
						|
                        'width' => 420,
 | 
						|
                        'height' => 240,
 | 
						|
                        'size' => 12877
 | 
						|
                    ]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            'Two assets' => [
 | 
						|
                'assetsData' => [
 | 
						|
                    'asset1' => [
 | 
						|
                        'path' => 'image.jpg',
 | 
						|
                        'title' => 'Img',
 | 
						|
                        'source' => 'Local',
 | 
						|
                        'contentType' => 'image/jpeg',
 | 
						|
                        'width' => 420,
 | 
						|
                        'height' => 240,
 | 
						|
                        'size' => 12877
 | 
						|
                    ],
 | 
						|
                    'asset2' => [
 | 
						|
                        'path' => 'image2.jpg',
 | 
						|
                        'title' => 'Img',
 | 
						|
                        'source' => 'Local',
 | 
						|
                        'contentType' => 'image/jpeg',
 | 
						|
                        'width' => 420,
 | 
						|
                        'height' => 240,
 | 
						|
                        'size' => 12877
 | 
						|
                    ]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create assets
 | 
						|
     *
 | 
						|
     * @param array $assetsData
 | 
						|
     * @return AssetInterface[]
 | 
						|
     */
 | 
						|
    private function getAssets(array $assetsData): array
 | 
						|
    {
 | 
						|
        $assets = [];
 | 
						|
        foreach ($assetsData as $assetData) {
 | 
						|
            $assets[] = $this->assetFactory->create($assetData);
 | 
						|
        }
 | 
						|
        return $assets;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get field values from assets
 | 
						|
     *
 | 
						|
     * @param AssetInterface[] $assets
 | 
						|
     * @param string $fieldName
 | 
						|
     * @return string[]
 | 
						|
     */
 | 
						|
    private function getFieldValues(array $assets, string $fieldName): array
 | 
						|
    {
 | 
						|
        $values = [];
 | 
						|
        foreach ($assets as $asset) {
 | 
						|
            $data = $this->dataObjectProcessor->buildOutputDataArray($asset, AssetInterface::class);
 | 
						|
            $values[] = $data[$fieldName];
 | 
						|
        }
 | 
						|
        return $values;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get key values from assets data array
 | 
						|
     *
 | 
						|
     * @param array $assetsData
 | 
						|
     * @param string $key
 | 
						|
     * @return string[]
 | 
						|
     */
 | 
						|
    private function getKeyValues(array $assetsData, string $key): array
 | 
						|
    {
 | 
						|
        $values = [];
 | 
						|
        foreach ($assetsData as $assetData) {
 | 
						|
            $values[] = $assetData[$key];
 | 
						|
        }
 | 
						|
        return $values;
 | 
						|
    }
 | 
						|
}
 |