You are here

public function ContentEntityBaseUnitTest::testRequiredValidation in Drupal 9

Same name and namespace in other branches
  1. 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\Entity

Code

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();
}