TextTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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\Exception\LocalizedException;
  8. use Magento\Framework\Stdlib\StringUtils;
  9. class TextTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var \Magento\Eav\Model\Attribute\Data\Text
  13. */
  14. private $model;
  15. /**
  16. * {@inheritDoc}
  17. */
  18. protected function setUp()
  19. {
  20. $locale = $this->createMock(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class);
  21. $localeResolver = $this->createMock(\Magento\Framework\Locale\ResolverInterface::class);
  22. $logger = $this->createMock(\Psr\Log\LoggerInterface::class);
  23. $helper = new StringUtils;
  24. $this->model = new \Magento\Eav\Model\Attribute\Data\Text($locale, $logger, $localeResolver, $helper);
  25. $this->model->setAttribute(
  26. $this->createAttribute(
  27. [
  28. 'store_label' => 'Test',
  29. 'attribute_code' => 'test',
  30. 'is_required' => 1,
  31. 'validate_rules' => ['min_text_length' => 0, 'max_text_length' => 0, 'input_validation' => 0],
  32. ]
  33. )
  34. );
  35. }
  36. /**
  37. * {@inheritDoc}
  38. */
  39. protected function tearDown()
  40. {
  41. $this->model = null;
  42. }
  43. /**
  44. * Test for string validation
  45. */
  46. public function testValidateValueString(): void
  47. {
  48. $inputValue = '0';
  49. $expectedResult = true;
  50. self::assertEquals($expectedResult, $this->model->validateValue($inputValue));
  51. }
  52. /**
  53. * Test for integer validation
  54. */
  55. public function testValidateValueInteger(): void
  56. {
  57. $inputValue = 0;
  58. $expectedResult = ['"Test" is a required value.'];
  59. $result = $this->model->validateValue($inputValue);
  60. self::assertEquals($expectedResult, [(string)$result[0]]);
  61. }
  62. /**
  63. * Test without length validation
  64. */
  65. public function testWithoutLengthValidation(): void
  66. {
  67. $expectedResult = true;
  68. $defaultAttributeData = [
  69. 'store_label' => 'Test',
  70. 'attribute_code' => 'test',
  71. 'is_required' => 1,
  72. 'validate_rules' => ['min_text_length' => 0, 'max_text_length' => 0, 'input_validation' => 0],
  73. ];
  74. $defaultAttributeData['validate_rules']['min_text_length'] = 2;
  75. $this->model->setAttribute($this->createAttribute($defaultAttributeData));
  76. self::assertEquals($expectedResult, $this->model->validateValue('t'));
  77. $defaultAttributeData['validate_rules']['max_text_length'] = 3;
  78. $this->model->setAttribute($this->createAttribute($defaultAttributeData));
  79. self::assertEquals($expectedResult, $this->model->validateValue('test'));
  80. }
  81. /**
  82. * Test of alphanumeric validation.
  83. *
  84. * @param {String} $value - provided value
  85. * @param {Boolean|Array} $expectedResult - validation result
  86. * @return void
  87. * @throws LocalizedException
  88. * @dataProvider alphanumDataProvider
  89. */
  90. public function testAlphanumericValidation($value, $expectedResult): void
  91. {
  92. $defaultAttributeData = [
  93. 'store_label' => 'Test',
  94. 'attribute_code' => 'test',
  95. 'is_required' => 1,
  96. 'validate_rules' => [
  97. 'min_text_length' => 0,
  98. 'max_text_length' => 10,
  99. 'input_validation' => 'alphanumeric'
  100. ],
  101. ];
  102. $this->model->setAttribute($this->createAttribute($defaultAttributeData));
  103. self::assertEquals($expectedResult, $this->model->validateValue($value));
  104. }
  105. /**
  106. * Provides possible input values.
  107. *
  108. * @return array
  109. */
  110. public function alphanumDataProvider(): array
  111. {
  112. return [
  113. ['QazWsx', true],
  114. ['QazWsx123', true],
  115. ['QazWsx 123',
  116. [\Zend_Validate_Alnum::NOT_ALNUM => '"Test" contains non-alphabetic or non-numeric characters.']
  117. ],
  118. ['QazWsx_123',
  119. [\Zend_Validate_Alnum::NOT_ALNUM => '"Test" contains non-alphabetic or non-numeric characters.']
  120. ],
  121. ['QazWsx12345', [
  122. __('"%1" length must be equal or less than %2 characters.', 'Test', 10)]
  123. ],
  124. ];
  125. }
  126. /**
  127. * Test of alphanumeric validation with spaces.
  128. *
  129. * @param {String} $value - provided value
  130. * @param {Boolean|Array} $expectedResult - validation result
  131. * @return void
  132. * @throws LocalizedException
  133. * @dataProvider alphanumWithSpacesDataProvider
  134. */
  135. public function testAlphanumericValidationWithSpaces($value, $expectedResult): void
  136. {
  137. $defaultAttributeData = [
  138. 'store_label' => 'Test',
  139. 'attribute_code' => 'test',
  140. 'is_required' => 1,
  141. 'validate_rules' => [
  142. 'min_text_length' => 0,
  143. 'max_text_length' => 10,
  144. 'input_validation' => 'alphanum-with-spaces'
  145. ],
  146. ];
  147. $this->model->setAttribute($this->createAttribute($defaultAttributeData));
  148. self::assertEquals($expectedResult, $this->model->validateValue($value));
  149. }
  150. /**
  151. * Provides possible input values.
  152. *
  153. * @return array
  154. */
  155. public function alphanumWithSpacesDataProvider(): array
  156. {
  157. return [
  158. ['QazWsx', true],
  159. ['QazWsx123', true],
  160. ['QazWsx 123', true],
  161. ['QazWsx_123',
  162. [\Zend_Validate_Alnum::NOT_ALNUM => '"Test" contains non-alphabetic or non-numeric characters.']
  163. ],
  164. ['QazWsx12345', [
  165. __('"%1" length must be equal or less than %2 characters.', 'Test', 10)]
  166. ],
  167. ];
  168. }
  169. /**
  170. * @param array $attributeData
  171. * @return \Magento\Eav\Model\Attribute
  172. */
  173. protected function createAttribute($attributeData): \Magento\Eav\Model\Entity\Attribute\AbstractAttribute
  174. {
  175. $attributeClass = \Magento\Eav\Model\Attribute::class;
  176. $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  177. $eavTypeFactory = $this->createMock(\Magento\Eav\Model\Entity\TypeFactory::class);
  178. $arguments = $objectManagerHelper->getConstructArguments(
  179. $attributeClass,
  180. ['eavTypeFactory' => $eavTypeFactory, 'data' => $attributeData]
  181. );
  182. /** @var $attribute \Magento\Eav\Model\Entity\Attribute\AbstractAttribute|
  183. * \PHPUnit_Framework_MockObject_MockObject
  184. */
  185. $attribute = $this->getMockBuilder($attributeClass)
  186. ->setMethods(['_init'])
  187. ->setConstructorArgs($arguments)
  188. ->getMock();
  189. return $attribute;
  190. }
  191. }