ValidatorTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Customer\Test\Unit\Model\Metadata;
  7. use Magento\Customer\Model\Data\AttributeMetadata;
  8. use Magento\Customer\Model\Metadata\Validator;
  9. class ValidatorTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /** @var Validator */
  12. protected $validator;
  13. /** @var string */
  14. protected $entityType;
  15. /** @var \Magento\Customer\Model\Metadata\ElementFactory | \PHPUnit_Framework_MockObject_MockObject */
  16. protected $attrDataFactoryMock;
  17. protected function setUp()
  18. {
  19. $this->attrDataFactoryMock = $this->getMockBuilder(
  20. \Magento\Customer\Model\Metadata\ElementFactory::class
  21. )->disableOriginalConstructor()->getMock();
  22. $this->validator = new \Magento\Customer\Model\Metadata\Validator($this->attrDataFactoryMock);
  23. }
  24. public function testValidateDataWithNoDataModel()
  25. {
  26. $attribute = $this->getMockBuilder(
  27. \Magento\Customer\Api\Data\AttributeMetadataInterface::class
  28. )->disableOriginalConstructor()->getMock();
  29. $this->attrDataFactoryMock->expects($this->never())->method('create');
  30. $this->assertTrue($this->validator->validateData([], [$attribute], 'ENTITY_TYPE'));
  31. }
  32. /**
  33. * @param bool $isValid
  34. * @dataProvider trueFalseDataProvider
  35. */
  36. public function testValidateData($isValid)
  37. {
  38. $attribute = $this->getMockAttribute();
  39. $this->mockDataModel($isValid, $attribute);
  40. $this->assertEquals($isValid, $this->validator->validateData([], [$attribute], 'ENTITY_TYPE'));
  41. }
  42. public function testIsValidWithNoModel()
  43. {
  44. $attribute = $this->getMockBuilder(
  45. \Magento\Customer\Api\Data\AttributeMetadataInterface::class
  46. )->disableOriginalConstructor()->getMock();
  47. $this->attrDataFactoryMock->expects($this->never())->method('create');
  48. $this->validator->setAttributes([$attribute]);
  49. $this->validator->setEntityType('ENTITY_TYPE');
  50. $this->validator->setData(['something']);
  51. $this->assertTrue($this->validator->isValid(['entity']));
  52. $this->validator->setData([]);
  53. $this->assertTrue($this->validator->isValid(new \Magento\Framework\DataObject([])));
  54. }
  55. /**
  56. * @param bool $isValid
  57. * @dataProvider trueFalseDataProvider
  58. */
  59. public function testIsValid($isValid)
  60. {
  61. $data = ['something'];
  62. $attribute = $this->getMockAttribute();
  63. $this->mockDataModel($isValid, $attribute);
  64. $this->validator->setAttributes([$attribute]);
  65. $this->validator->setEntityType('ENTITY_TYPE');
  66. $this->validator->setData($data);
  67. $this->assertEquals($isValid, $this->validator->isValid(['ENTITY']));
  68. $this->validator->setData([]);
  69. $this->assertEquals($isValid, $this->validator->isValid(new \Magento\Framework\DataObject($data)));
  70. }
  71. /**
  72. * @return array
  73. */
  74. public function trueFalseDataProvider()
  75. {
  76. return [[true], [false]];
  77. }
  78. /**
  79. * @return \PHPUnit_Framework_MockObject_MockObject | AttributeMetadata
  80. */
  81. protected function getMockAttribute()
  82. {
  83. $attribute = $this->getMockBuilder(
  84. \Magento\Customer\Model\Data\AttributeMetadata::class
  85. )->disableOriginalConstructor()->setMethods(
  86. ['__wakeup', 'getAttributeCode', 'getDataModel']
  87. )->getMock();
  88. $attribute->expects($this->any())->method('getAttributeCode')->will($this->returnValue('ATTR_CODE'));
  89. $attribute->expects($this->any())->method('getDataModel')->will($this->returnValue('DATA_MODEL'));
  90. return $attribute;
  91. }
  92. /**
  93. * @param bool $isValid
  94. * @param AttributeMetadata $attribute
  95. * @return void
  96. */
  97. protected function mockDataModel($isValid, AttributeMetadata $attribute)
  98. {
  99. $dataModel = $this->getMockBuilder(
  100. \Magento\Customer\Model\Metadata\Form\Text::class
  101. )->disableOriginalConstructor()->getMock();
  102. $dataModel->expects($this->any())->method('validateValue')->will($this->returnValue($isValid));
  103. $this->attrDataFactoryMock->expects(
  104. $this->any()
  105. )->method(
  106. 'create'
  107. )->with(
  108. $this->equalTo($attribute),
  109. $this->equalTo(null),
  110. $this->equalTo('ENTITY_TYPE')
  111. )->will(
  112. $this->returnValue($dataModel)
  113. );
  114. }
  115. }