/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/MediaTest.php

https://gitlab.com/yousafsyed/easternglamor · PHP · 238 lines · 183 code · 28 blank · 27 comment · 2 complexity · f9c15558a25cf6b93ef2e4c670d20f91 MD5 · raw file

  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Catalog\Model\Product\Attribute\Backend;
  7. use Magento\Framework\App\Filesystem\DirectoryList;
  8. /**
  9. * Test class for \Magento\Catalog\Model\Product\Attribute\Backend\Media.
  10. * @magentoDataFixture Magento/Catalog/_files/product_simple.php
  11. */
  12. class MediaTest extends \PHPUnit_Framework_TestCase
  13. {
  14. /**
  15. * @var \Magento\Catalog\Model\Product\Attribute\Backend\Media
  16. */
  17. protected $_model;
  18. /**
  19. * @var string
  20. */
  21. protected static $_mediaTmpDir;
  22. /**
  23. * @var string
  24. */
  25. protected static $_mediaDir;
  26. public static function setUpBeforeClass()
  27. {
  28. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  29. /** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */
  30. $config = $objectManager->get('Magento\Catalog\Model\Product\Media\Config');
  31. $mediaDirectory = $objectManager->get(
  32. 'Magento\Framework\Filesystem'
  33. )->getDirectoryWrite(
  34. DirectoryList::MEDIA
  35. );
  36. self::$_mediaTmpDir = $mediaDirectory->getAbsolutePath($config->getBaseTmpMediaPath());
  37. self::$_mediaDir = $mediaDirectory->getAbsolutePath($config->getBaseMediaPath());
  38. $fixtureDir = realpath(__DIR__ . '/../../../../_files');
  39. $mediaDirectory->create($config->getBaseTmpMediaPath());
  40. $mediaDirectory->create($config->getBaseMediaPath());
  41. copy($fixtureDir . "/magento_image.jpg", self::$_mediaTmpDir . "/magento_image.jpg");
  42. copy($fixtureDir . "/magento_image.jpg", self::$_mediaDir . "/magento_image.jpg");
  43. copy($fixtureDir . "/magento_small_image.jpg", self::$_mediaTmpDir . "/magento_small_image.jpg");
  44. }
  45. public static function tearDownAfterClass()
  46. {
  47. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  48. /** @var \Magento\Catalog\Model\Product\Media\Config $config */
  49. $config = $objectManager->get('Magento\Catalog\Model\Product\Media\Config');
  50. /** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */
  51. $mediaDirectory = $objectManager->get(
  52. 'Magento\Framework\Filesystem'
  53. )->getDirectoryWrite(
  54. DirectoryList::MEDIA
  55. );
  56. if ($mediaDirectory->isExist($config->getBaseMediaPath())) {
  57. $mediaDirectory->delete($config->getBaseMediaPath());
  58. }
  59. if ($mediaDirectory->isExist($config->getBaseTmpMediaPath())) {
  60. $mediaDirectory->delete($config->getBaseTmpMediaPath());
  61. }
  62. }
  63. protected function setUp()
  64. {
  65. $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  66. 'Magento\Catalog\Model\Product\Attribute\Backend\Media'
  67. );
  68. $this->_model->setAttribute(
  69. \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  70. 'Magento\Eav\Model\Config'
  71. )->getAttribute(
  72. 'catalog_product',
  73. 'media_gallery'
  74. )
  75. );
  76. }
  77. public function testAfterLoad()
  78. {
  79. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  80. 'Magento\Catalog\Model\Product'
  81. );
  82. $this->_model->afterLoad($product);
  83. $data = $product->getData();
  84. $this->assertArrayHasKey('media_gallery', $data);
  85. $this->assertArrayHasKey('images', $data['media_gallery']);
  86. $this->assertArrayHasKey('values', $data['media_gallery']);
  87. }
  88. public function testValidate()
  89. {
  90. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  91. 'Magento\Catalog\Model\Product'
  92. );
  93. $this->assertTrue($this->_model->validate($product));
  94. $this->_model->getAttribute()->setIsRequired(true);
  95. try {
  96. $this->assertFalse($this->_model->validate($product));
  97. $this->_model->getAttribute()->setIsRequired(false);
  98. } catch (\Exception $e) {
  99. $this->_model->getAttribute()->setIsRequired(false);
  100. throw $e;
  101. }
  102. }
  103. /**
  104. * @covers \Magento\Catalog\Model\Product\Attribute\Backend\Media::beforeSave
  105. * @covers \Magento\Catalog\Model\Product\Attribute\Backend\Media::getRenamedImage
  106. */
  107. public function testBeforeSave()
  108. {
  109. $fileName = 'magento_image.jpg';
  110. $fileLabel = 'Magento image';
  111. /** @var $product \Magento\Catalog\Model\Product */
  112. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  113. 'Magento\Catalog\Model\Product'
  114. );
  115. $product->setData(
  116. 'media_gallery',
  117. ['images' => ['image' => ['file' => $fileName, 'label' => $fileLabel]]]
  118. );
  119. $product->setData('image', $fileName);
  120. $this->_model->beforeSave($product);
  121. $this->assertStringStartsWith('./magento_image', $product->getData('media_gallery/images/image/new_file'));
  122. $this->assertEquals($fileLabel, $product->getData('image_label'));
  123. $product->setIsDuplicate(true);
  124. $product->setData(
  125. 'media_gallery',
  126. ['images' => ['image' => ['value_id' => '100', 'file' => $fileName, 'label' => $fileLabel]]]
  127. );
  128. $this->_model->beforeSave($product);
  129. $this->assertStringStartsWith('./magento_image', $product->getData('media_gallery/duplicate/100'));
  130. $this->assertEquals($fileLabel, $product->getData('image_label'));
  131. }
  132. public function testAfterSaveAndAfterLoad()
  133. {
  134. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  135. 'Magento\Catalog\Model\Product'
  136. );
  137. $product->setId(1);
  138. $product->setData('media_gallery', ['images' => ['image' => ['file' => 'magento_image.jpg']]]);
  139. $this->_model->afterSave($product);
  140. $this->assertEmpty($product->getData('media_gallery/images/0/value_id'));
  141. $this->_model->afterLoad($product);
  142. $this->assertNotEmpty($product->getData('media_gallery/images/0/value_id'));
  143. }
  144. public function testAddImage()
  145. {
  146. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  147. 'Magento\Catalog\Model\Product'
  148. );
  149. $product->setId(1);
  150. $file = $this->_model->addImage($product, self::$_mediaTmpDir . '/magento_small_image.jpg');
  151. $this->assertStringMatchesFormat('/m/a/magento_small_image%sjpg', $file);
  152. }
  153. public function testUpdateImage()
  154. {
  155. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  156. 'Magento\Catalog\Model\Product'
  157. );
  158. $product->setData('media_gallery', ['images' => ['image' => ['file' => 'magento_image.jpg']]]);
  159. $this->_model->updateImage($product, 'magento_image.jpg', ['label' => 'test label']);
  160. $this->assertEquals('test label', $product->getData('media_gallery/images/image/label'));
  161. }
  162. public function testRemoveImage()
  163. {
  164. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  165. 'Magento\Catalog\Model\Product'
  166. );
  167. $product->setData('media_gallery', ['images' => ['image' => ['file' => 'magento_image.jpg']]]);
  168. $this->_model->removeImage($product, 'magento_image.jpg');
  169. $this->assertEquals('1', $product->getData('media_gallery/images/image/removed'));
  170. }
  171. public function testGetImage()
  172. {
  173. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  174. 'Magento\Catalog\Model\Product'
  175. );
  176. $product->setData('media_gallery', ['images' => ['image' => ['file' => 'magento_image.jpg']]]);
  177. $this->assertEquals(
  178. ['file' => 'magento_image.jpg'],
  179. $this->_model->getImage($product, 'magento_image.jpg')
  180. );
  181. }
  182. public function testClearMediaAttribute()
  183. {
  184. /** @var $product \Magento\Catalog\Model\Product */
  185. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  186. 'Magento\Catalog\Model\Product'
  187. );
  188. $product->setData(['image' => 'test1', 'small_image' => 'test2', 'thumbnail' => 'test3']);
  189. $this->assertNotEmpty($product->getData('image'));
  190. $this->_model->clearMediaAttribute($product, 'image');
  191. $this->assertNull($product->getData('image'));
  192. $this->assertNotEmpty($product->getData('small_image'));
  193. $this->assertNotEmpty($product->getData('thumbnail'));
  194. $this->_model->clearMediaAttribute($product, ['small_image', 'thumbnail']);
  195. $this->assertNull($product->getData('small_image'));
  196. $this->assertNull($product->getData('thumbnail'));
  197. }
  198. public function testSetMediaAttribute()
  199. {
  200. /** @var $product \Magento\Catalog\Model\Product */
  201. $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  202. 'Magento\Catalog\Model\Product'
  203. );
  204. $this->_model->setMediaAttribute($product, 'image', 'test1');
  205. $this->assertEquals('test1', $product->getData('image'));
  206. $this->_model->setMediaAttribute($product, ['non-exist-image-attribute', 'small_image'], 'test');
  207. $this->assertNull($product->getData('non-exist-image-attribute'));
  208. $this->assertEquals('test', $product->getData('small_image'));
  209. }
  210. }