function 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 391

Class

ContentEntityBaseUnitTest
@coversDefaultClass \Drupal\Core\Entity\ContentEntityBase[[api-linebreak]] @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->at(0))
    ->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();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.