MultilineTest.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. use Magento\Framework\Locale\ResolverInterface;
  8. use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
  9. class MultilineTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var \Magento\Eav\Model\Attribute\Data\Multiline
  13. */
  14. protected $model;
  15. /**
  16. * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Stdlib\StringUtils
  17. */
  18. protected $stringMock;
  19. /**
  20. * {@inheritDoc}
  21. */
  22. protected function setUp()
  23. {
  24. /** @var TimezoneInterface $timezoneMock */
  25. $timezoneMock = $this->createMock(TimezoneInterface::class);
  26. /** @var \Psr\Log\LoggerInterface $loggerMock */
  27. $loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
  28. /** @var ResolverInterface $localeResolverMock */
  29. $localeResolverMock = $this->createMock(ResolverInterface::class);
  30. $this->stringMock = $this->createMock(\Magento\Framework\Stdlib\StringUtils::class);
  31. $this->model = new \Magento\Eav\Model\Attribute\Data\Multiline(
  32. $timezoneMock,
  33. $loggerMock,
  34. $localeResolverMock,
  35. $this->stringMock
  36. );
  37. }
  38. /**
  39. * @covers \Magento\Eav\Model\Attribute\Data\Multiline::extractValue
  40. *
  41. * @param mixed $param
  42. * @param mixed $expectedResult
  43. * @dataProvider extractValueDataProvider
  44. */
  45. public function testExtractValue($param, $expectedResult)
  46. {
  47. /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\App\RequestInterface $requestMock */
  48. $requestMock = $this->createMock(\Magento\Framework\App\RequestInterface::class);
  49. /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Eav\Model\Attribute $attributeMock */
  50. $attributeMock = $this->createMock(\Magento\Eav\Model\Attribute::class);
  51. $requestMock->expects($this->once())->method('getParam')->will($this->returnValue($param));
  52. $attributeMock->expects($this->once())
  53. ->method('getAttributeCode')
  54. ->will($this->returnValue('attributeCode'));
  55. $this->model->setAttribute($attributeMock);
  56. $this->assertEquals($expectedResult, $this->model->extractValue($requestMock));
  57. }
  58. /**
  59. * @return array
  60. */
  61. public function extractValueDataProvider()
  62. {
  63. return [
  64. [
  65. 'param' => 'param',
  66. 'expectedResult' => false,
  67. ],
  68. [
  69. 'param' => ['param'],
  70. 'expectedResult' => ['param']
  71. ],
  72. ];
  73. }
  74. /**
  75. * @covers \Magento\Eav\Model\Attribute\Data\Multiline::outputValue
  76. *
  77. * @param string $format
  78. * @param mixed $expectedResult
  79. * @dataProvider outputValueDataProvider
  80. */
  81. public function testOutputValue($format, $expectedResult)
  82. {
  83. /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\AbstractModel $entityMock */
  84. $entityMock = $this->createMock(\Magento\Framework\Model\AbstractModel::class);
  85. $entityMock->expects($this->once())
  86. ->method('getData')
  87. ->will($this->returnValue("value1\nvalue2"));
  88. /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Eav\Model\Attribute $attributeMock */
  89. $attributeMock = $this->createMock(\Magento\Eav\Model\Attribute::class);
  90. $this->model->setEntity($entityMock);
  91. $this->model->setAttribute($attributeMock);
  92. $this->assertEquals($expectedResult, $this->model->outputValue($format));
  93. }
  94. /**
  95. * @return array
  96. */
  97. public function outputValueDataProvider()
  98. {
  99. return [
  100. [
  101. 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_ARRAY,
  102. 'expectedResult' => ['value1', 'value2'],
  103. ],
  104. [
  105. 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_HTML,
  106. 'expectedResult' => 'value1<br />value2'
  107. ],
  108. [
  109. 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_ONELINE,
  110. 'expectedResult' => 'value1 value2'
  111. ],
  112. [
  113. 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_TEXT,
  114. 'expectedResult' => "value1\nvalue2"
  115. ]
  116. ];
  117. }
  118. /**
  119. * @covers \Magento\Eav\Model\Attribute\Data\Multiline::validateValue
  120. * @covers \Magento\Eav\Model\Attribute\Data\Text::validateValue
  121. *
  122. * @param mixed $value
  123. * @param bool $isAttributeRequired
  124. * @param array $rules
  125. * @param array $expectedResult
  126. * @dataProvider validateValueDataProvider
  127. */
  128. public function testValidateValue($value, $isAttributeRequired, $rules, $expectedResult)
  129. {
  130. /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\AbstractModel $entityMock */
  131. $entityMock = $this->createMock(\Magento\Framework\Model\AbstractModel::class);
  132. $entityMock->expects($this->any())
  133. ->method('getDataUsingMethod')
  134. ->will($this->returnValue("value1\nvalue2"));
  135. /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Eav\Model\Attribute $attributeMock */
  136. $attributeMock = $this->createMock(\Magento\Eav\Model\Attribute::class);
  137. $attributeMock->expects($this->any())->method('getMultilineCount')->will($this->returnValue(2));
  138. $attributeMock->expects($this->any())->method('getValidateRules')->will($this->returnValue($rules));
  139. $attributeMock->expects($this->any())
  140. ->method('getStoreLabel')
  141. ->will($this->returnValue('Label'));
  142. $attributeMock->expects($this->any())
  143. ->method('getIsRequired')
  144. ->will($this->returnValue($isAttributeRequired));
  145. $this->stringMock->expects($this->any())->method('strlen')->will($this->returnValue(5));
  146. $this->model->setEntity($entityMock);
  147. $this->model->setAttribute($attributeMock);
  148. $this->assertEquals($expectedResult, $this->model->validateValue($value));
  149. }
  150. /**
  151. * @return array
  152. */
  153. public function validateValueDataProvider()
  154. {
  155. return [
  156. [
  157. 'value' => false,
  158. 'isAttributeRequired' => false,
  159. 'rules' => [],
  160. 'expectedResult' => true,
  161. ],
  162. [
  163. 'value' => 'value',
  164. 'isAttributeRequired' => false,
  165. 'rules' => [],
  166. 'expectedResult' => true,
  167. ],
  168. [
  169. 'value' => ['value1', 'value2'],
  170. 'isAttributeRequired' => false,
  171. 'rules' => [],
  172. 'expectedResult' => true,
  173. ],
  174. [
  175. 'value' => 'value',
  176. 'isAttributeRequired' => false,
  177. 'rules' => ['input_validation' => 'other', 'max_text_length' => 3],
  178. 'expectedResult' => ['"Label" length must be equal or less than 3 characters.'],
  179. ],
  180. [
  181. 'value' => 'value',
  182. 'isAttributeRequired' => false,
  183. 'rules' => ['input_validation' => 'other', 'min_text_length' => 10],
  184. 'expectedResult' => ['"Label" length must be equal or greater than 10 characters.'],
  185. ],
  186. [
  187. 'value' => "value1\nvalue2\nvalue3",
  188. 'isAttributeRequired' => false,
  189. 'rules' => [],
  190. 'expectedResult' => ['"Label" cannot contain more than 2 lines.'],
  191. ],
  192. [
  193. 'value' => ['value1', 'value2', 'value3'],
  194. 'isAttributeRequired' => false,
  195. 'rules' => [],
  196. 'expectedResult' => ['"Label" cannot contain more than 2 lines.'],
  197. ],
  198. [
  199. 'value' => [],
  200. 'isAttributeRequired' => true,
  201. 'rules' => [],
  202. 'expectedResult' => ['"Label" is a required value.'],
  203. ],
  204. [
  205. 'value' => '',
  206. 'isAttributeRequired' => true,
  207. 'rules' => [],
  208. 'expectedResult' => ['"Label" is a required value.'],
  209. ],
  210. ];
  211. }
  212. }