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. 10 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 21

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.
     *
     * @var \Drupal\Core\Entity\ContentEntityBase|\PHPUnit\Framework\MockObject\MockObject
     */
    protected $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() {
        $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')
            ->will($this->returnValue([
            'id' => 'id',
            'uuid' => 'uuid',
        ]));
        $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class);
        $this->entityTypeManager
            ->expects($this->any())
            ->method('getDefinition')
            ->with($this->entityTypeId)
            ->will($this->returnValue($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')
            ->will($this->returnValue([
            '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')
            ->will($this->returnValue([
            LanguageInterface::LANGCODE_NOT_SPECIFIED => $not_specified,
        ]));
        $this->languageManager
            ->expects($this->any())
            ->method('getLanguage')
            ->with(LanguageInterface::LANGCODE_NOT_SPECIFIED)
            ->will($this->returnValue($not_specified));
        $this->fieldTypePluginManager = $this->getMockBuilder('\\Drupal\\Core\\Field\\FieldTypePluginManager')
            ->disableOriginalConstructor()
            ->getMock();
        $this->fieldTypePluginManager
            ->expects($this->any())
            ->method('getDefaultStorageSettings')
            ->will($this->returnValue([]));
        $this->fieldTypePluginManager
            ->expects($this->any())
            ->method('getDefaultFieldSettings')
            ->will($this->returnValue([]));
        $this->fieldItemList = $this->createMock('\\Drupal\\Core\\Field\\FieldItemListInterface');
        $this->fieldTypePluginManager
            ->expects($this->any())
            ->method('createFieldItemList')
            ->willReturn($this->fieldItemList);
        $this->entityFieldManager = $this->getMockForAbstractClass(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)
            ->will($this->returnValue($this->fieldDefinitions));
        $this->entity = $this->getMockForAbstractClass('\\Drupal\\Core\\Entity\\ContentEntityBase', [
            $values,
            $this->entityTypeId,
            $this->bundle,
        ]);
        $this->entityAdapter = EntityAdapter::createFromEntity($this->entity);
    }
    
    /**
     * @covers ::getConstraints
     */
    public function testGetConstraints() {
        $this->assertIsArray($this->entityAdapter
            ->getConstraints());
    }
    
    /**
     * @covers ::getName
     */
    public function testGetName() {
        $this->assertNull($this->entityAdapter
            ->getName());
    }
    
    /**
     * @covers ::getRoot
     */
    public function testGetRoot() {
        $this->assertSame(spl_object_hash($this->entityAdapter), spl_object_hash($this->entityAdapter
            ->getRoot()));
    }
    
    /**
     * @covers ::getPropertyPath
     */
    public function testGetPropertyPath() {
        $this->assertSame('', $this->entityAdapter
            ->getPropertyPath());
    }
    
    /**
     * @covers ::getParent
     */
    public function testGetParent() {
        $this->assertNull($this->entityAdapter
            ->getParent());
    }
    
    /**
     * @covers ::setContext
     */
    public function testSetContext() {
        $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() {
        $this->assertEquals($this->entity, $this->entityAdapter
            ->getValue());
    }
    
    /**
     * @covers ::getEntity
     */
    public function testGetEntity() {
        $this->assertSame($this->entity, $this->entityAdapter
            ->getEntity());
    }
    
    /**
     * @covers ::setValue
     */
    public function testSetValue() {
        $this->entityAdapter
            ->setValue(NULL);
        $this->assertNull($this->entityAdapter
            ->getValue());
    }
    
    /**
     * @covers ::get
     */
    public function testGet() {
        $this->assertInstanceOf('\\Drupal\\Core\\Field\\FieldItemListInterface', $this->entityAdapter
            ->get('id'));
    }
    
    /**
     * @covers ::get
     */
    public function testGetInvalidField() {
        $this->expectException(\InvalidArgumentException::class);
        $this->entityAdapter
            ->get('invalid');
    }
    
    /**
     * @covers ::get
     */
    public function testGetWithoutData() {
        $this->entityAdapter
            ->setValue(NULL);
        $this->expectException(MissingDataException::class);
        $this->entityAdapter
            ->get('id');
    }
    
    /**
     * @covers ::set
     */
    public function testSet() {
        $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() {
        $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() {
        $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() {
        $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() {
        $this->entityAdapter
            ->setValue(NULL);
        $this->expectException(MissingDataException::class);
        $this->entityAdapter
            ->toArray();
    }
    
    /**
     * @covers ::isEmpty
     */
    public function testIsEmpty() {
        $this->assertFalse($this->entityAdapter
            ->isEmpty());
        $this->entityAdapter
            ->setValue(NULL);
        $this->assertTrue($this->entityAdapter
            ->isEmpty());
    }
    
    /**
     * @covers ::onChange
     */
    public function testOnChange() {
        $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() {
        $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() {
        $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() {
        // 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() {
        // 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
EntityAdapterUnitTest::testGet public function @covers ::get
EntityAdapterUnitTest::testGetConstraints public function @covers ::getConstraints
EntityAdapterUnitTest::testGetDataDefinition public function @covers ::getDataDefinition
EntityAdapterUnitTest::testGetEntity public function @covers ::getEntity
EntityAdapterUnitTest::testGetInvalidField public function @covers ::get
EntityAdapterUnitTest::testGetIterator public function @covers ::getIterator
EntityAdapterUnitTest::testGetName public function @covers ::getName
EntityAdapterUnitTest::testGetParent public function @covers ::getParent
EntityAdapterUnitTest::testGetProperties public function @covers ::getProperties
EntityAdapterUnitTest::testGetPropertyPath public function @covers ::getPropertyPath
EntityAdapterUnitTest::testGetRoot public function @covers ::getRoot
EntityAdapterUnitTest::testGetString public function @covers ::getString
EntityAdapterUnitTest::testGetValue public function @covers ::getValue
EntityAdapterUnitTest::testGetWithoutData public function @covers ::get
EntityAdapterUnitTest::testIsEmpty public function @covers ::isEmpty
EntityAdapterUnitTest::testOnChange public function @covers ::onChange
EntityAdapterUnitTest::testSet public function @covers ::set
EntityAdapterUnitTest::testSetContext public function @covers ::setContext
EntityAdapterUnitTest::testSetValue public function @covers ::setValue
EntityAdapterUnitTest::testSetWithoutData public function @covers ::set
EntityAdapterUnitTest::testToArray public function @covers ::toArray
EntityAdapterUnitTest::testToArrayWithoutData public function @covers ::toArray
PhpunitCompatibilityTrait::getMock Deprecated public function Returns a mock object for the specified class using the available method.
PhpunitCompatibilityTrait::setExpectedException Deprecated public function Compatibility layer for PHPUnit 6 to support PHPUnit 4 code.
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::assertArrayEquals protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getBlockMockWithMachineName Deprecated protected function Mocks a block with a block plugin. 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::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.

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