ImageTest.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Eav\Test\Unit\Model\Attribute\Data;
  7. class ImageTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Eav\Model\Attribute\Data\File
  11. */
  12. protected $model;
  13. protected function setUp()
  14. {
  15. $this->markTestSkipped('MAGETWO-34751: Test fails after being moved. Might have hidden dependency.');
  16. $timezoneMock = $this->createMock(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class);
  17. $loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
  18. $localeResolverMock = $this->createMock(\Magento\Framework\Locale\ResolverInterface::class);
  19. $urlEncoder = $this->createMock(\Magento\Framework\Url\EncoderInterface::class);
  20. $fileValidatorMock = $this->createMock(\Magento\MediaStorage\Model\File\Validator\NotProtectedExtension::class);
  21. $filesystemMock = $this->createMock(\Magento\Framework\Filesystem::class);
  22. $this->model = new \Magento\Eav\Model\Attribute\Data\Image(
  23. $timezoneMock,
  24. $loggerMock,
  25. $localeResolverMock,
  26. $urlEncoder,
  27. $fileValidatorMock,
  28. $filesystemMock
  29. );
  30. }
  31. /**
  32. * Attention: this test depends on mock of "is_uploaded_file" function in ./FileTest.php,
  33. * so validates method successfully in batch run of directory tests, separately will fail.
  34. *
  35. * @covers \Magento\Eav\Model\Attribute\Data\Image::_validateByRules
  36. *
  37. * @param mixed $value
  38. * @param mixed $originalValue
  39. * @param bool $isRequired
  40. * @param bool $isAjaxRequest
  41. * @param array $rules
  42. * @param array $expectedResult
  43. * @dataProvider validateValueDataProvider
  44. */
  45. public function testValidateValue(
  46. $value,
  47. $originalValue,
  48. $isRequired,
  49. $isAjaxRequest,
  50. $rules,
  51. $expectedResult
  52. ) {
  53. $entityMock = $this->createMock(\Magento\Framework\Model\AbstractModel::class);
  54. $entityMock->expects($this->any())->method('getData')->will($this->returnValue($originalValue));
  55. $attributeMock = $this->createMock(\Magento\Eav\Model\Attribute::class);
  56. $attributeMock->expects($this->any())->method('getStoreLabel')->will($this->returnValue('Label'));
  57. $attributeMock->expects($this->any())->method('getIsRequired')->will($this->returnValue($isRequired));
  58. $attributeMock->expects($this->any())->method('getIsAjaxRequest')->will($this->returnValue($isAjaxRequest));
  59. $attributeMock->expects($this->any())->method('getValidateRules')->will($this->returnValue($rules));
  60. $this->model->setEntity($entityMock);
  61. $this->model->setAttribute($attributeMock);
  62. $this->model->setIsAjaxRequest($isAjaxRequest);
  63. $this->assertEquals($expectedResult, $this->model->validateValue($value));
  64. }
  65. /**
  66. * @return array
  67. */
  68. public function validateValueDataProvider()
  69. {
  70. return [
  71. [
  72. 'value' => ['delete' => 'delete', 'tmp_name' => 'NotUploaded'],
  73. 'originalValue' => 'value',
  74. 'isRequired' => true,
  75. 'isAjaxRequest' => false,
  76. 'rules' => [],
  77. 'expectedResult' => ['"Label" is not a valid file'],
  78. ],
  79. [
  80. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.ico', 'name' => 'image.ico'],
  81. 'originalValue' => 'value',
  82. 'isRequired' => true,
  83. 'isAjaxRequest' => false,
  84. 'rules' => [],
  85. 'expectedResult' => ['"Label" is not a valid image format']
  86. ],
  87. [
  88. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg', 'name' => 'image.ppp'],
  89. 'originalValue' => 'value',
  90. 'isRequired' => true,
  91. 'isAjaxRequest' => false,
  92. 'rules' => [],
  93. 'expectedResult' => true
  94. ],
  95. [
  96. 'value' => [
  97. 'delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg',
  98. 'name' => 'image.jpg', 'size' => 10,
  99. ],
  100. 'originalValue' => 'value',
  101. 'isRequired' => true,
  102. 'isAjaxRequest' => false,
  103. 'rules' => ['max_file_size' => 2],
  104. 'expectedResult' => ['"Label" exceeds the allowed file size.']
  105. ],
  106. [
  107. 'value' => [
  108. 'delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg',
  109. 'name' => 'image.jpg', 'size' => 10,
  110. ],
  111. 'originalValue' => 'value',
  112. 'isRequired' => true,
  113. 'isAjaxRequest' => false,
  114. 'rules' => ['max_file_size' => 20],
  115. 'expectedResult' => true
  116. ],
  117. [
  118. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg', 'name' => 'image.jpg'],
  119. 'originalValue' => 'value',
  120. 'isRequired' => true,
  121. 'isAjaxRequest' => false,
  122. 'rules' => ['max_image_width' => 2],
  123. 'expectedResult' => ['"Label" width exceeds allowed value of 2 px.']
  124. ],
  125. [
  126. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg', 'name' => 'image.jpg'],
  127. 'originalValue' => 'value',
  128. 'isRequired' => true,
  129. 'isAjaxRequest' => false,
  130. 'rules' => ['max_image_width' => 2000],
  131. 'expectedResult' => true
  132. ],
  133. [
  134. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg', 'name' => 'image.jpg'],
  135. 'originalValue' => 'value',
  136. 'isRequired' => true,
  137. 'isAjaxRequest' => false,
  138. 'rules' => ['max_image_height' => 2],
  139. 'expectedResult' => ['"Label" height exceeds allowed value of 2 px.']
  140. ],
  141. [
  142. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg', 'name' => 'image.jpg'],
  143. 'originalValue' => 'value',
  144. 'isRequired' => true,
  145. 'isAjaxRequest' => false,
  146. 'rules' => ['max_image_height' => 2000],
  147. 'expectedResult' => true
  148. ],
  149. [
  150. 'value' => ['delete' => 'delete', 'tmp_name' => __DIR__ . '/_files/image.jpg', 'name' => 'image.jpg'],
  151. 'originalValue' => 'value',
  152. 'isRequired' => true,
  153. 'isAjaxRequest' => false,
  154. 'rules' => ['max_image_height' => 2, 'max_image_width' => 2],
  155. 'expectedResult' => [
  156. '"Label" width exceeds allowed value of 2 px.',
  157. '"Label" height exceeds allowed value of 2 px.',
  158. ]
  159. ],
  160. ];
  161. }
  162. }