public function ContentEntityBaseUnitTest::testRequiredValidation in Drupal 9
Same name and namespace in other branches
- 8 core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php \Drupal\Tests\Core\Entity\ContentEntityBaseUnitTest::testRequiredValidation()
Tests required validation.
@covers ::validate @covers ::isValidationRequired @covers ::setValidationRequired @covers ::save @covers ::preSave
File
- core/tests/ Drupal/ Tests/ Core/ Entity/ ContentEntityBaseUnitTest.php, line 368 
Class
- ContentEntityBaseUnitTest
- @coversDefaultClass \Drupal\Core\Entity\ContentEntityBase @group Entity @group Access
Namespace
Drupal\Tests\Core\EntityCode
public function testRequiredValidation() {
  $validator = $this
    ->createMock(ValidatorInterface::class);
  /** @var \Symfony\Component\Validator\ConstraintViolationList|\PHPUnit\Framework\MockObject\MockObject $empty_violation_list */
  $empty_violation_list = $this
    ->getMockBuilder('\\Symfony\\Component\\Validator\\ConstraintViolationList')
    ->setMethods(NULL)
    ->getMock();
  $validator
    ->expects($this
    ->once())
    ->method('validate')
    ->with($this->entity
    ->getTypedData())
    ->will($this
    ->returnValue($empty_violation_list));
  $this->typedDataManager
    ->expects($this
    ->any())
    ->method('getValidator')
    ->will($this
    ->returnValue($validator));
  /** @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit\Framework\MockObject\MockObject $storage */
  $storage = $this
    ->createMock('\\Drupal\\Core\\Entity\\EntityStorageInterface');
  $storage
    ->expects($this
    ->any())
    ->method('save')
    ->willReturnCallback(function (ContentEntityInterface $entity) use ($storage) {
    $entity
      ->preSave($storage);
  });
  $this->entityTypeManager
    ->expects($this
    ->any())
    ->method('getStorage')
    ->with($this->entityTypeId)
    ->will($this
    ->returnValue($storage));
  // Check that entities can be saved normally when validation is not
  // required.
  $this
    ->assertFalse($this->entity
    ->isValidationRequired());
  $this->entity
    ->save();
  // Make validation required and check that if the entity is validated, it
  // can be saved normally.
  $this->entity
    ->setValidationRequired(TRUE);
  $this
    ->assertTrue($this->entity
    ->isValidationRequired());
  $this->entity
    ->validate();
  $this->entity
    ->save();
  // Check that the "validated" status is reset after saving the entity and
  // that trying to save a non-validated entity when validation is required
  // results in an exception.
  $this
    ->assertTrue($this->entity
    ->isValidationRequired());
  $this
    ->expectException(\LogicException::class);
  $this
    ->expectExceptionMessage('Entity validation was skipped.');
  $this->entity
    ->save();
}