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