function ContentEntityBaseUnitTest::testRequiredValidation

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php \Drupal\Tests\Core\Entity\ContentEntityBaseUnitTest::testRequiredValidation()
  2. 10 core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php \Drupal\Tests\Core\Entity\ContentEntityBaseUnitTest::testRequiredValidation()
  3. 11.x 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 391

Class

ContentEntityBaseUnitTest
@coversDefaultClass <a href="/api/drupal/core%21lib%21Drupal%21Core%21Entity%21ContentEntityBase.php/class/ContentEntityBase/8.9.x" title="Implements Entity Field API specific enhancements to the Entity class." class="local">\Drupal\Core\Entity\ContentEntityBase</a> @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.