Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ImagesAssert.php
Go to the documentation of this file.
1 <?php
8 
10 
18 {
22  private $productRepository;
23 
27  private $searchCriteriaBuilder;
28 
32  private $readHandler;
33 
37  private $filesystem;
38 
42  private $mediaConfig;
43 
47  private $mediaDirectory;
48 
56  public function __construct(
57  \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
58  \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
59  \Magento\Catalog\Model\Product\Gallery\ReadHandler $readHandler,
60  \Magento\Framework\Filesystem $filesystem,
61  \Magento\Catalog\Model\Product\Media\Config $mediaConfig
62  ) {
63  $this->productRepository = $productRepository;
64  $this->searchCriteriaBuilder = $searchCriteriaBuilder;
65  $this->readHandler = $readHandler;
66  $this->filesystem = $filesystem;
67  $this->mediaConfig = $mediaConfig;
68  }
69 
76  public function assert()
77  {
78  $searchCriteria = $this->searchCriteriaBuilder->create();
79  $products = $this->productRepository->getList($searchCriteria)->getItems();
80 
81  foreach ($products as $product) {
82  $this->assertProductMediaGallery($product);
83  $this->assertProductMediaAttributes($product);
84  $this->assertProductImageExistsInFS($product);
85  }
86 
87  return true;
88  }
89 
96  private function assertProductMediaGallery(\Magento\Catalog\Model\Product $product)
97  {
98  $extendedProduct = $this->readHandler->execute($product);
99  $mediaGalleryImages = $extendedProduct->getMediaGalleryEntries();
100 
101  if (count($mediaGalleryImages) !== 1) {
102  throw new \AssertionError('Product supposed to contain one image');
103  }
104 
105  $image = reset($mediaGalleryImages);
106 
107  if ($image->getFile() === null) {
108  throw new \AssertionError('Image path should not be null');
109  }
110  }
111 
119  private function assertProductMediaAttributes(\Magento\Catalog\Model\Product $product)
120  {
121  foreach ($product->getMediaAttributeValues() as $attributeCode => $attributeValue) {
122  if (empty($attributeValue)) {
123  throw new \AssertionError(
124  sprintf('Attribute: %s should not be empty', $attributeCode)
125  );
126  }
127  }
128  }
129 
136  private function assertProductImageExistsInFS(\Magento\Catalog\Model\Product $product)
137  {
138  $mediaDirectory = $this->getMediaDirectory();
139  $mediaAttributes = $product->getMediaAttributeValues();
140 
141  if (!$mediaDirectory->isExist($this->mediaConfig->getBaseMediaPath() . $mediaAttributes['image'])) {
142  throw new \AssertionError('Image file for product supposed to exist');
143  }
144  }
145 
151  private function getMediaDirectory()
152  {
153  if ($this->mediaDirectory === null) {
154  $this->mediaDirectory = $this->filesystem->getDirectoryRead(DirectoryList::MEDIA);
155  }
156 
157  return $this->mediaDirectory;
158  }
159 }
$searchCriteria
__construct(\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder, \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, \Magento\Catalog\Model\Product\Gallery\ReadHandler $readHandler, \Magento\Framework\Filesystem $filesystem, \Magento\Catalog\Model\Product\Media\Config $mediaConfig)
$attributeCode
Definition: extend.phtml:12
$searchCriteriaBuilder
$filesystem
$mediaConfig