EntityResourceValidationTraitTest.php in Drupal 9
File
core/modules/rest/tests/src/Unit/EntityResourceValidationTraitTest.php
View source
<?php
namespace Drupal\Tests\rest\Unit;
use Drupal\Core\Entity\EntityConstraintViolationList;
use Drupal\node\Entity\Node;
use Drupal\rest\Plugin\rest\resource\EntityResourceValidationTrait;
use Drupal\Tests\UnitTestCase;
use Drupal\user\Entity\User;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
use Symfony\Component\Validator\ConstraintViolationInterface;
class EntityResourceValidationTraitTest extends UnitTestCase {
public function testValidate() {
$trait = new EntityResourceValidationTraitTestClass();
$method = new \ReflectionMethod($trait, 'validate');
$method
->setAccessible(TRUE);
$violations = $this
->prophesize(EntityConstraintViolationList::class);
$violations
->filterByFieldAccess()
->shouldBeCalled()
->willReturn([]);
$violations
->count()
->shouldBeCalled()
->willReturn(0);
$entity = $this
->prophesize(Node::class);
$entity
->validate()
->shouldBeCalled()
->willReturn($violations
->reveal());
$method
->invoke($trait, $entity
->reveal());
}
public function testFailedValidate() {
$violation1 = $this
->prophesize(ConstraintViolationInterface::class);
$violation1
->getPropertyPath()
->willReturn('property_path');
$violation1
->getMessage()
->willReturn('message');
$violation2 = $this
->prophesize(ConstraintViolationInterface::class);
$violation2
->getPropertyPath()
->willReturn('property_path');
$violation2
->getMessage()
->willReturn('message');
$entity = $this
->prophesize(User::class);
$violations = $this
->getMockBuilder(EntityConstraintViolationList::class)
->setConstructorArgs([
$entity
->reveal(),
[
$violation1
->reveal(),
$violation2
->reveal(),
],
])
->setMethods([
'filterByFieldAccess',
])
->getMock();
$violations
->expects($this
->once())
->method('filterByFieldAccess')
->will($this
->returnValue([]));
$entity
->validate()
->willReturn($violations);
$trait = new EntityResourceValidationTraitTestClass();
$method = new \ReflectionMethod($trait, 'validate');
$method
->setAccessible(TRUE);
$this
->expectException(UnprocessableEntityHttpException::class);
$method
->invoke($trait, $entity
->reveal());
}
}
class EntityResourceValidationTraitTestClass {
use EntityResourceValidationTrait;
}