class EntityAdapterUnitTest

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php \Drupal\Tests\Core\Entity\TypedData\EntityAdapterUnitTest
  2. 8.9.x core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php \Drupal\Tests\Core\Entity\TypedData\EntityAdapterUnitTest
  3. 11.x core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php \Drupal\Tests\Core\Entity\TypedData\EntityAdapterUnitTest

@coversDefaultClass \Drupal\Core\Entity\Plugin\DataType\EntityAdapter
@group Entity @group TypedData

Hierarchy

Expanded class hierarchy of EntityAdapterUnitTest

File

core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php, line 25

Namespace

Drupal\Tests\Core\Entity\TypedData
View source
class EntityAdapterUnitTest extends UnitTestCase {
  
  /**
   * The bundle used for testing.
   *
   * @var string
   */
  protected $bundle;
  
  /**
   * The content entity used for testing.
   */
  protected ContentEntityBaseMockableClass&MockObject $entity;
  
  /**
   * The content entity adapter under test.
   *
   * @var \Drupal\Core\Entity\Plugin\DataType\EntityAdapter
   */
  protected $entityAdapter;
  
  /**
   * The entity type used for testing.
   *
   * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $entityType;
  
  /**
   * The entity type manager used for testing.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $entityTypeManager;
  
  /**
   *
   * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $entityFieldManager;
  
  /**
   * The type ID of the entity under test.
   *
   * @var string
   */
  protected $entityTypeId;
  
  /**
   * The typed data manager used for testing.
   *
   * @var \Drupal\Core\TypedData\TypedDataManager|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $typedDataManager;
  
  /**
   * The field item list returned by the typed data manager.
   *
   * @var \Drupal\Core\Field\FieldItemListInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $fieldItemList;
  
  /**
   * The field type manager used for testing.
   *
   * @var \Drupal\Core\Field\FieldTypePluginManager|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $fieldTypePluginManager;
  
  /**
   * The language manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $languageManager;
  
  /**
   * The UUID generator used for testing.
   *
   * @var \Drupal\Component\Uuid\UuidInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $uuid;
  
  /**
   * The entity ID.
   *
   * @var int
   */
  protected $id;
  
  /**
   * Field definitions.
   *
   * @var \Drupal\Core\Field\BaseFieldDefinition[]
   */
  protected $fieldDefinitions;
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->id = 1;
    $values = [
      'id' => $this->id,
      'uuid' => '3bb9ee60-bea5-4622-b89b-a63319d10b3a',
      'defaultLangcode' => [
        LanguageInterface::LANGCODE_DEFAULT => 'en',
      ],
    ];
    $this->entityTypeId = $this->randomMachineName();
    $this->bundle = $this->randomMachineName();
    $this->entityType = $this->createMock('\\Drupal\\Core\\Entity\\EntityTypeInterface');
    $this->entityType
      ->expects($this->any())
      ->method('getKeys')
      ->willReturn([
      'id' => 'id',
      'uuid' => 'uuid',
    ]);
    $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class);
    $this->entityTypeManager
      ->expects($this->any())
      ->method('getDefinition')
      ->with($this->entityTypeId)
      ->willReturn($this->entityType);
    $this->uuid = $this->createMock('\\Drupal\\Component\\Uuid\\UuidInterface');
    $this->typedDataManager = $this->createMock(TypedDataManagerInterface::class);
    $this->typedDataManager
      ->expects($this->any())
      ->method('getDefinition')
      ->with('entity')
      ->willReturn([
      'class' => '\\Drupal\\Core\\Entity\\Plugin\\DataType\\EntityAdapter',
    ]);
    $this->typedDataManager
      ->expects($this->any())
      ->method('getDefaultConstraints')
      ->willReturn([]);
    $validation_constraint_manager = $this->getMockBuilder('\\Drupal\\Core\\Validation\\ConstraintManager')
      ->disableOriginalConstructor()
      ->getMock();
    $validation_constraint_manager->expects($this->any())
      ->method('create')
      ->willReturn([]);
    $this->typedDataManager
      ->expects($this->any())
      ->method('getValidationConstraintManager')
      ->willReturn($validation_constraint_manager);
    $not_specified = new Language([
      'id' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
      'locked' => TRUE,
    ]);
    $this->languageManager = $this->createMock('\\Drupal\\Core\\Language\\LanguageManagerInterface');
    $this->languageManager
      ->expects($this->any())
      ->method('getLanguages')
      ->willReturn([
      LanguageInterface::LANGCODE_NOT_SPECIFIED => $not_specified,
    ]);
    $this->languageManager
      ->expects($this->any())
      ->method('getLanguage')
      ->with(LanguageInterface::LANGCODE_NOT_SPECIFIED)
      ->willReturn($not_specified);
    $this->fieldTypePluginManager = $this->getMockBuilder('\\Drupal\\Core\\Field\\FieldTypePluginManager')
      ->disableOriginalConstructor()
      ->getMock();
    $this->fieldTypePluginManager
      ->expects($this->any())
      ->method('getDefaultStorageSettings')
      ->willReturn([]);
    $this->fieldTypePluginManager
      ->expects($this->any())
      ->method('getDefaultFieldSettings')
      ->willReturn([]);
    $this->fieldItemList = $this->createMock('\\Drupal\\Core\\Field\\FieldItemListInterface');
    $this->fieldTypePluginManager
      ->expects($this->any())
      ->method('createFieldItemList')
      ->willReturn($this->fieldItemList);
    $this->entityFieldManager = $this->createMock(EntityFieldManagerInterface::class);
    $container = new ContainerBuilder();
    $container->set('entity_type.manager', $this->entityTypeManager);
    $container->set('entity_field.manager', $this->entityFieldManager);
    $container->set('uuid', $this->uuid);
    $container->set('typed_data_manager', $this->typedDataManager);
    $container->set('language_manager', $this->languageManager);
    $container->set('plugin.manager.field.field_type', $this->fieldTypePluginManager);
    \Drupal::setContainer($container);
    $this->fieldDefinitions = [
      'id' => BaseFieldDefinition::create('integer'),
      'revision_id' => BaseFieldDefinition::create('integer'),
    ];
    $this->entityFieldManager
      ->expects($this->any())
      ->method('getFieldDefinitions')
      ->with($this->entityTypeId, $this->bundle)
      ->willReturn($this->fieldDefinitions);
    $this->entity = $this->getMockBuilder(ContentEntityBaseMockableClass::class)
      ->setConstructorArgs([
      $values,
      $this->entityTypeId,
      $this->bundle,
    ])
      ->onlyMethods([])
      ->getMock();
    $this->entityAdapter = EntityAdapter::createFromEntity($this->entity);
  }
  
  /**
   * @covers ::getConstraints
   */
  public function testGetConstraints() : void {
    $this->assertIsArray($this->entityAdapter
      ->getConstraints());
  }
  
  /**
   * @covers ::getName
   */
  public function testGetName() : void {
    $this->assertNull($this->entityAdapter
      ->getName());
  }
  
  /**
   * @covers ::getRoot
   */
  public function testGetRoot() : void {
    $this->assertSame(spl_object_hash($this->entityAdapter), spl_object_hash($this->entityAdapter
      ->getRoot()));
  }
  
  /**
   * @covers ::getPropertyPath
   */
  public function testGetPropertyPath() : void {
    $this->assertSame('', $this->entityAdapter
      ->getPropertyPath());
  }
  
  /**
   * @covers ::getParent
   */
  public function testGetParent() : void {
    $this->assertNull($this->entityAdapter
      ->getParent());
  }
  
  /**
   * @covers ::setContext
   */
  public function testSetContext() : void {
    $name = $this->randomMachineName();
    $parent = $this->createMock('\\Drupal\\Core\\TypedData\\TraversableTypedDataInterface');
    // Our mocked entity->setContext() returns NULL, so assert that.
    $this->assertNull($this->entityAdapter
      ->setContext($name, $parent));
    $this->assertEquals($name, $this->entityAdapter
      ->getName());
    $this->assertEquals($parent, $this->entityAdapter
      ->getParent());
  }
  
  /**
   * @covers ::getValue
   */
  public function testGetValue() : void {
    $this->assertEquals($this->entity, $this->entityAdapter
      ->getValue());
  }
  
  /**
   * @covers ::getEntity
   */
  public function testGetEntity() : void {
    $this->assertSame($this->entity, $this->entityAdapter
      ->getEntity());
  }
  
  /**
   * @covers ::setValue
   */
  public function testSetValue() : void {
    $this->entityAdapter
      ->setValue(NULL);
    $this->assertNull($this->entityAdapter
      ->getValue());
  }
  
  /**
   * @covers ::get
   */
  public function testGet() : void {
    $this->assertInstanceOf('\\Drupal\\Core\\Field\\FieldItemListInterface', $this->entityAdapter
      ->get('id'));
  }
  
  /**
   * @covers ::get
   */
  public function testGetInvalidField() : void {
    $this->expectException(\InvalidArgumentException::class);
    $this->entityAdapter
      ->get('invalid');
  }
  
  /**
   * @covers ::get
   */
  public function testGetWithoutData() : void {
    $this->entityAdapter
      ->setValue(NULL);
    $this->expectException(MissingDataException::class);
    $this->entityAdapter
      ->get('id');
  }
  
  /**
   * @covers ::set
   */
  public function testSet() : void {
    $id_items = [
      [
        'value' => $this->id + 1,
      ],
    ];
    $this->fieldItemList
      ->expects($this->once())
      ->method('setValue')
      ->with($id_items);
    $this->entityAdapter
      ->set('id', $id_items);
  }
  
  /**
   * @covers ::set
   */
  public function testSetWithoutData() : void {
    $this->entityAdapter
      ->setValue(NULL);
    $id_items = [
      [
        'value' => $this->id + 1,
      ],
    ];
    $this->expectException(MissingDataException::class);
    $this->entityAdapter
      ->set('id', $id_items);
  }
  
  /**
   * @covers ::getProperties
   */
  public function testGetProperties() : void {
    $fields = $this->entityAdapter
      ->getProperties();
    $this->assertInstanceOf('Drupal\\Core\\Field\\FieldItemListInterface', $fields['id']);
    $this->assertInstanceOf('Drupal\\Core\\Field\\FieldItemListInterface', $fields['revision_id']);
  }
  
  /**
   * @covers ::toArray
   */
  public function testToArray() : void {
    $array = $this->entityAdapter
      ->toArray();
    // Mock field objects return NULL values, so test keys only.
    $this->assertArrayHasKey('id', $array);
    $this->assertArrayHasKey('revision_id', $array);
    $this->assertCount(2, $array);
  }
  
  /**
   * @covers ::toArray
   */
  public function testToArrayWithoutData() : void {
    $this->entityAdapter
      ->setValue(NULL);
    $this->expectException(MissingDataException::class);
    $this->entityAdapter
      ->toArray();
  }
  
  /**
   * @covers ::isEmpty
   */
  public function testIsEmpty() : void {
    $this->assertFalse($this->entityAdapter
      ->isEmpty());
    $this->entityAdapter
      ->setValue(NULL);
    $this->assertTrue($this->entityAdapter
      ->isEmpty());
  }
  
  /**
   * @covers ::onChange
   */
  public function testOnChange() : void {
    $entity = $this->createMock('\\Drupal\\Core\\Entity\\ContentEntityInterface');
    $entity->expects($this->once())
      ->method('onChange')
      ->with('foo')
      ->willReturn(NULL);
    $this->entityAdapter
      ->setValue($entity);
    $this->entityAdapter
      ->onChange('foo');
  }
  
  /**
   * @covers ::getDataDefinition
   */
  public function testGetDataDefinition() : void {
    $definition = $this->entityAdapter
      ->getDataDefinition();
    $this->assertInstanceOf('\\Drupal\\Core\\Entity\\TypedData\\EntityDataDefinitionInterface', $definition);
    $this->assertEquals($definition->getEntityTypeId(), $this->entityTypeId);
    $this->assertEquals($definition->getBundles(), [
      $this->bundle,
    ]);
  }
  
  /**
   * @covers ::getString
   */
  public function testGetString() : void {
    $entity = $this->createMock('\\Drupal\\Core\\Entity\\ContentEntityInterface');
    $entity->expects($this->once())
      ->method('label')
      ->willReturn('foo');
    $this->entityAdapter
      ->setValue($entity);
    $this->assertEquals('foo', $this->entityAdapter
      ->getString());
    $this->entityAdapter
      ->setValue(NULL);
    $this->assertEquals('', $this->entityAdapter
      ->getString());
  }
  
  /**
   * @covers ::applyDefaultValue
   */
  public function testApplyDefaultValue() : void {
    // For each field on the entity the mock method has to be invoked once.
    $this->fieldItemList
      ->expects($this->exactly(2))
      ->method('applyDefaultValue');
    $this->entityAdapter
      ->applyDefaultValue();
  }
  
  /**
   * @covers ::getIterator
   */
  public function testGetIterator() : void {
    // Content entity test.
    $iterator = $this->entityAdapter
      ->getIterator();
    $fields = iterator_to_array($iterator);
    $this->assertArrayHasKey('id', $fields);
    $this->assertArrayHasKey('revision_id', $fields);
    $this->assertCount(2, $fields);
    $this->entityAdapter
      ->setValue(NULL);
    $this->assertEquals(new \ArrayIterator([]), $this->entityAdapter
      ->getIterator());
  }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title Overrides
EntityAdapterUnitTest::$bundle protected property The bundle used for testing.
EntityAdapterUnitTest::$entity protected property The content entity used for testing.
EntityAdapterUnitTest::$entityAdapter protected property The content entity adapter under test.
EntityAdapterUnitTest::$entityFieldManager protected property
EntityAdapterUnitTest::$entityType protected property The entity type used for testing.
EntityAdapterUnitTest::$entityTypeId protected property The type ID of the entity under test.
EntityAdapterUnitTest::$entityTypeManager protected property The entity type manager used for testing.
EntityAdapterUnitTest::$fieldDefinitions protected property Field definitions.
EntityAdapterUnitTest::$fieldItemList protected property The field item list returned by the typed data manager.
EntityAdapterUnitTest::$fieldTypePluginManager protected property The field type manager used for testing.
EntityAdapterUnitTest::$id protected property The entity ID.
EntityAdapterUnitTest::$languageManager protected property The language manager.
EntityAdapterUnitTest::$typedDataManager protected property The typed data manager used for testing.
EntityAdapterUnitTest::$uuid protected property The UUID generator used for testing.
EntityAdapterUnitTest::setUp protected function Overrides UnitTestCase::setUp
EntityAdapterUnitTest::testApplyDefaultValue public function @covers ::applyDefaultValue[[api-linebreak]]
EntityAdapterUnitTest::testGet public function @covers ::get[[api-linebreak]]
EntityAdapterUnitTest::testGetConstraints public function @covers ::getConstraints[[api-linebreak]]
EntityAdapterUnitTest::testGetDataDefinition public function @covers ::getDataDefinition[[api-linebreak]]
EntityAdapterUnitTest::testGetEntity public function @covers ::getEntity[[api-linebreak]]
EntityAdapterUnitTest::testGetInvalidField public function @covers ::get[[api-linebreak]]
EntityAdapterUnitTest::testGetIterator public function @covers ::getIterator[[api-linebreak]]
EntityAdapterUnitTest::testGetName public function @covers ::getName[[api-linebreak]]
EntityAdapterUnitTest::testGetParent public function @covers ::getParent[[api-linebreak]]
EntityAdapterUnitTest::testGetProperties public function @covers ::getProperties[[api-linebreak]]
EntityAdapterUnitTest::testGetPropertyPath public function @covers ::getPropertyPath[[api-linebreak]]
EntityAdapterUnitTest::testGetRoot public function @covers ::getRoot[[api-linebreak]]
EntityAdapterUnitTest::testGetString public function @covers ::getString[[api-linebreak]]
EntityAdapterUnitTest::testGetValue public function @covers ::getValue[[api-linebreak]]
EntityAdapterUnitTest::testGetWithoutData public function @covers ::get[[api-linebreak]]
EntityAdapterUnitTest::testIsEmpty public function @covers ::isEmpty[[api-linebreak]]
EntityAdapterUnitTest::testOnChange public function @covers ::onChange[[api-linebreak]]
EntityAdapterUnitTest::testSet public function @covers ::set[[api-linebreak]]
EntityAdapterUnitTest::testSetContext public function @covers ::setContext[[api-linebreak]]
EntityAdapterUnitTest::testSetValue public function @covers ::setValue[[api-linebreak]]
EntityAdapterUnitTest::testSetWithoutData public function @covers ::set[[api-linebreak]]
EntityAdapterUnitTest::testToArray public function @covers ::toArray[[api-linebreak]]
EntityAdapterUnitTest::testToArrayWithoutData public function @covers ::toArray[[api-linebreak]]
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
RandomGeneratorTrait::getRandomGenerator protected function Gets the random generator for the utility methods.
RandomGeneratorTrait::randomMachineName protected function Generates a unique random string containing letters and numbers.
RandomGeneratorTrait::randomObject public function Generates a random PHP object.
RandomGeneratorTrait::randomString public function Generates a pseudo-random string of ASCII characters of codes 32 to 126.
RandomGeneratorTrait::randomStringValidate Deprecated public function Callback for random string validation.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::setUpBeforeClass public static function
UnitTestCase::__get public function

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