Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ValidatorTest.php
Go to the documentation of this file.
1 <?php
8 
12 class ValidatorTest extends \PHPUnit\Framework\TestCase
13 {
17  protected $_validator;
18 
22  protected function setUp()
23  {
24  $this->_validator = new \Magento\Framework\Validator();
25  }
26 
30  protected function tearDown()
31  {
32  unset($this->_validator);
33  }
34 
46  public function testIsValid(
47  $value,
48  $validators,
49  $expectedResult,
50  $expectedMessages = [],
51  $breakChainOnFailure = false
52  ) {
53  foreach ($validators as $validator) {
54  $this->_validator->addValidator($validator, $breakChainOnFailure);
55  }
56 
57  $this->assertEquals($expectedResult, $this->_validator->isValid($value));
58  $this->assertEquals($expectedMessages, $this->_validator->getMessages($value));
59  }
60 
66  public function isValidDataProvider()
67  {
68  $result = [];
69  $value = 'test';
70 
71  // Case 1. Validators fails without breaking chain
72  $validatorA = $this->createMock(\Magento\Framework\Validator\ValidatorInterface::class);
73  $validatorA->expects($this->once())->method('isValid')->with($value)->will($this->returnValue(false));
74  $validatorA->expects(
75  $this->once()
76  )->method(
77  'getMessages'
78  )->will(
79  $this->returnValue(['foo' => ['Foo message 1'], 'bar' => ['Foo message 2']])
80  );
81 
82  $validatorB = $this->createMock(\Magento\Framework\Validator\ValidatorInterface::class);
83  $validatorB->expects($this->once())->method('isValid')->with($value)->will($this->returnValue(false));
84  $validatorB->expects(
85  $this->once()
86  )->method(
87  'getMessages'
88  )->will(
89  $this->returnValue(['foo' => ['Bar message 1'], 'bar' => ['Bar message 2']])
90  );
91 
92  $result[] = [
93  $value,
94  [$validatorA, $validatorB],
95  false,
96  ['foo' => ['Foo message 1', 'Bar message 1'], 'bar' => ['Foo message 2', 'Bar message 2']],
97  ];
98 
99  // Case 2. Validators fails with breaking chain
100  $validatorA = $this->createMock(\Magento\Framework\Validator\ValidatorInterface::class);
101  $validatorA->expects($this->once())->method('isValid')->with($value)->will($this->returnValue(false));
102  $validatorA->expects(
103  $this->once()
104  )->method(
105  'getMessages'
106  )->will(
107  $this->returnValue(['field' => 'Error message'])
108  );
109 
110  $validatorB = $this->createMock(\Magento\Framework\Validator\ValidatorInterface::class);
111  $validatorB->expects($this->never())->method('isValid');
112 
113  $result[] = [$value, [$validatorA, $validatorB], false, ['field' => 'Error message'], true];
114 
115  // Case 3. Validators succeed
116  $validatorA = $this->createMock(\Magento\Framework\Validator\ValidatorInterface::class);
117  $validatorA->expects($this->once())->method('isValid')->with($value)->will($this->returnValue(true));
118  $validatorA->expects($this->never())->method('getMessages');
119 
120  $validatorB = $this->createMock(\Magento\Framework\Validator\ValidatorInterface::class);
121  $validatorB->expects($this->once())->method('isValid')->with($value)->will($this->returnValue(true));
122  $validatorB->expects($this->never())->method('getMessages');
123 
124  $result[] = [$value, [$validatorA, $validatorB], true];
125 
126  return $result;
127  }
128 
132  public function testAddValidator()
133  {
134  $fooValidator = new \Magento\Framework\Validator\Test\Unit\Test\IsTrue();
135  $classConstraint = new \Magento\Framework\Validator\Constraint($fooValidator, 'id');
136  $propertyValidator = new \Magento\Framework\Validator\Constraint\Property($classConstraint, 'name', 'id');
137 
139  $translator = $this->getMockBuilder(
140  \Magento\Framework\Translate\AbstractAdapter::class
141  )->getMockForAbstractClass();
142  \Magento\Framework\Validator\AbstractValidator::setDefaultTranslator($translator);
143 
144  $this->_validator->addValidator($classConstraint);
145  $this->_validator->addValidator($propertyValidator);
146  $expected = [
147  ['instance' => $classConstraint, 'breakChainOnFailure' => false],
148  ['instance' => $propertyValidator, 'breakChainOnFailure' => false],
149  ];
150  $this->assertAttributeEquals($expected, '_validators', $this->_validator);
151  $this->assertEquals($translator, $fooValidator->getTranslator(), 'Translator was not set');
152  }
153 
157  public function testSetTranslator()
158  {
159  $fooValidator = new \Magento\Framework\Validator\Test\Unit\Test\IsTrue();
160  $this->_validator->addValidator($fooValidator);
162  $translator = $this->getMockBuilder(
163  \Magento\Framework\Translate\AbstractAdapter::class
164  )->getMockForAbstractClass();
165  $this->_validator->setTranslator($translator);
166  $this->assertEquals($translator, $fooValidator->getTranslator());
167  $this->assertEquals($translator, $this->_validator->getTranslator());
168  }
169 }
testIsValid( $value, $validators, $expectedResult, $expectedMessages=[], $breakChainOnFailure=false)
$value
Definition: gender.phtml:16