class FieldDefinitionListenerTest in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/tests/Drupal/Tests/Core/Field/FieldDefinitionListenerTest.php \Drupal\Tests\Core\Field\FieldDefinitionListenerTest
@coversDefaultClass \Drupal\Core\Field\FieldDefinitionListener @group Field
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \Drupal\Tests\PHPUnit_Framework_TestCase
- class \Drupal\Tests\Core\Field\FieldDefinitionListenerTest
Expanded class hierarchy of FieldDefinitionListenerTest
File
- core/
tests/ Drupal/ Tests/ Core/ Field/ FieldDefinitionListenerTest.php, line 28 - Contains \Drupal\Tests\Core\Field\FieldDefinitionListenerTest.
Namespace
Drupal\Tests\Core\FieldView source
class FieldDefinitionListenerTest extends UnitTestCase {
/**
* The key-value factory.
*
* @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface|\Prophecy\Prophecy\ProphecyInterface
*/
protected $keyValueFactory;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface|\Prophecy\Prophecy\ProphecyInterface
*/
protected $entityTypeManager;
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface|\Prophecy\Prophecy\ProphecyInterface
*/
protected $entityFieldManager;
/**
* The cache backend.
*
* @var \Drupal\Core\Cache\CacheBackendInterface|\Prophecy\Prophecy\ProphecyInterface
*/
protected $cacheBackend;
/**
* The field definition listener under test.
*
* @var \Drupal\Core\Field\FieldDefinitionListener
*/
protected $fieldDefinitionListener;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->keyValueFactory = $this
->prophesize(KeyValueFactoryInterface::class);
$this->entityTypeManager = $this
->prophesize(EntityTypeManagerInterface::class);
$this->entityFieldManager = $this
->prophesize(EntityFieldManagerInterface::class);
$this->cacheBackend = $this
->prophesize(CacheBackendInterface::class);
$this->fieldDefinitionListener = new FieldDefinitionListener($this->entityTypeManager
->reveal(), $this->entityFieldManager
->reveal(), $this->keyValueFactory
->reveal(), $this->cacheBackend
->reveal());
}
/**
* Sets up the entity manager to be tested.
*
* @param \Drupal\Core\Entity\EntityTypeInterface[]|\Prophecy\Prophecy\ProphecyInterface[] $definitions
* (optional) An array of entity type definitions.
*/
protected function setUpEntityManager($definitions = array()) {
$class = $this
->getMockClass(EntityInterface::class);
foreach ($definitions as $key => $entity_type) {
// \Drupal\Core\Entity\EntityTypeInterface::getLinkTemplates() is called
// by \Drupal\Core\Entity\EntityManager::processDefinition() so it must
// always be mocked.
$entity_type
->getLinkTemplates()
->willReturn([]);
// Give the entity type a legitimate class to return.
$entity_type
->getClass()
->willReturn($class);
$definitions[$key] = $entity_type
->reveal();
}
$this->entityTypeManager
->getDefinition(Argument::cetera())
->will(function ($args) use ($definitions) {
$entity_type_id = $args[0];
$exception_on_invalid = $args[1];
if (isset($definitions[$entity_type_id])) {
return $definitions[$entity_type_id];
}
elseif (!$exception_on_invalid) {
return NULL;
}
else {
throw new PluginNotFoundException($entity_type_id);
}
});
$this->entityTypeManager
->getDefinitions()
->willReturn($definitions);
}
/**
* @covers ::onFieldDefinitionCreate
*/
public function testOnFieldDefinitionCreateNewField() {
$field_definition = $this
->prophesize(FieldDefinitionInterface::class);
$field_definition
->getTargetEntityTypeId()
->willReturn('test_entity_type');
$field_definition
->getTargetBundle()
->willReturn('test_bundle');
$field_definition
->getName()
->willReturn('test_field');
$field_definition
->getType()
->willReturn('test_type');
$storage = $this
->prophesize(DynamicallyFieldableEntityStorageInterface::class);
$storage
->onFieldDefinitionCreate($field_definition
->reveal())
->shouldBeCalledTimes(1);
$this->entityTypeManager
->getStorage('test_entity_type')
->willReturn($storage
->reveal());
$entity = $this
->prophesize(EntityTypeInterface::class);
$this
->setUpEntityManager([
'test_entity_type' => $entity,
]);
// Set up the stored bundle field map.
$key_value_store = $this
->prophesize(KeyValueStoreInterface::class);
$this->keyValueFactory
->get('entity.definitions.bundle_field_map')
->willReturn($key_value_store
->reveal());
$key_value_store
->get('test_entity_type')
->willReturn([]);
$key_value_store
->set('test_entity_type', [
'test_field' => [
'type' => 'test_type',
'bundles' => [
'test_bundle' => 'test_bundle',
],
],
])
->shouldBeCalled();
$this->fieldDefinitionListener
->onFieldDefinitionCreate($field_definition
->reveal());
}
/**
* @covers ::onFieldDefinitionCreate
*/
public function testOnFieldDefinitionCreateExistingField() {
$field_definition = $this
->prophesize(FieldDefinitionInterface::class);
$field_definition
->getTargetEntityTypeId()
->willReturn('test_entity_type');
$field_definition
->getTargetBundle()
->willReturn('test_bundle');
$field_definition
->getName()
->willReturn('test_field');
$storage = $this
->prophesize(DynamicallyFieldableEntityStorageInterface::class);
$storage
->onFieldDefinitionCreate($field_definition
->reveal())
->shouldBeCalledTimes(1);
$this->entityTypeManager
->getStorage('test_entity_type')
->willReturn($storage
->reveal());
$entity = $this
->prophesize(EntityTypeInterface::class);
$this
->setUpEntityManager([
'test_entity_type' => $entity,
]);
// Set up the stored bundle field map.
$key_value_store = $this
->prophesize(KeyValueStoreInterface::class);
$this->keyValueFactory
->get('entity.definitions.bundle_field_map')
->willReturn($key_value_store
->reveal());
$key_value_store
->get('test_entity_type')
->willReturn([
'test_field' => [
'type' => 'test_type',
'bundles' => [
'existing_bundle' => 'existing_bundle',
],
],
]);
$key_value_store
->set('test_entity_type', [
'test_field' => [
'type' => 'test_type',
'bundles' => [
'existing_bundle' => 'existing_bundle',
'test_bundle' => 'test_bundle',
],
],
])
->shouldBeCalled();
$this->fieldDefinitionListener
->onFieldDefinitionCreate($field_definition
->reveal());
}
/**
* @covers ::onFieldDefinitionUpdate
*/
public function testOnFieldDefinitionUpdate() {
$field_definition = $this
->prophesize(FieldDefinitionInterface::class);
$field_definition
->getTargetEntityTypeId()
->willReturn('test_entity_type');
$storage = $this
->prophesize(DynamicallyFieldableEntityStorageInterface::class);
$storage
->onFieldDefinitionUpdate($field_definition
->reveal(), $field_definition
->reveal())
->shouldBeCalledTimes(1);
$this->entityTypeManager
->getStorage('test_entity_type')
->willReturn($storage
->reveal());
$entity = $this
->prophesize(EntityTypeInterface::class);
$this
->setUpEntityManager([
'test_entity_type' => $entity,
]);
$this->fieldDefinitionListener
->onFieldDefinitionUpdate($field_definition
->reveal(), $field_definition
->reveal());
}
/**
* @covers ::onFieldDefinitionDelete
*/
public function testOnFieldDefinitionDeleteMultipleBundles() {
$field_definition = $this
->prophesize(FieldDefinitionInterface::class);
$field_definition
->getTargetEntityTypeId()
->willReturn('test_entity_type');
$field_definition
->getTargetBundle()
->willReturn('test_bundle');
$field_definition
->getName()
->willReturn('test_field');
$storage = $this
->prophesize(DynamicallyFieldableEntityStorageInterface::class);
$storage
->onFieldDefinitionDelete($field_definition
->reveal())
->shouldBeCalledTimes(1);
$this->entityTypeManager
->getStorage('test_entity_type')
->willReturn($storage
->reveal());
$entity = $this
->prophesize(EntityTypeInterface::class);
$this
->setUpEntityManager([
'test_entity_type' => $entity,
]);
// Set up the stored bundle field map.
$key_value_store = $this
->prophesize(KeyValueStoreInterface::class);
$this->keyValueFactory
->get('entity.definitions.bundle_field_map')
->willReturn($key_value_store
->reveal());
$key_value_store
->get('test_entity_type')
->willReturn([
'test_field' => [
'type' => 'test_type',
'bundles' => [
'test_bundle' => 'test_bundle',
],
],
'second_field' => [
'type' => 'test_type',
'bundles' => [
'test_bundle' => 'test_bundle',
],
],
]);
$key_value_store
->set('test_entity_type', [
'second_field' => [
'type' => 'test_type',
'bundles' => [
'test_bundle' => 'test_bundle',
],
],
])
->shouldBeCalled();
$this->fieldDefinitionListener
->onFieldDefinitionDelete($field_definition
->reveal());
}
/**
* @covers ::onFieldDefinitionDelete
*/
public function testOnFieldDefinitionDeleteSingleBundles() {
$field_definition = $this
->prophesize(FieldDefinitionInterface::class);
$field_definition
->getTargetEntityTypeId()
->willReturn('test_entity_type');
$field_definition
->getTargetBundle()
->willReturn('test_bundle');
$field_definition
->getName()
->willReturn('test_field');
$storage = $this
->prophesize(DynamicallyFieldableEntityStorageInterface::class);
$storage
->onFieldDefinitionDelete($field_definition
->reveal())
->shouldBeCalledTimes(1);
$this->entityTypeManager
->getStorage('test_entity_type')
->willReturn($storage
->reveal());
$entity = $this
->prophesize(EntityTypeInterface::class);
$this
->setUpEntityManager([
'test_entity_type' => $entity,
]);
// Set up the stored bundle field map.
$key_value_store = $this
->prophesize(KeyValueStoreInterface::class);
$this->keyValueFactory
->get('entity.definitions.bundle_field_map')
->willReturn($key_value_store
->reveal());
$key_value_store
->get('test_entity_type')
->willReturn([
'test_field' => [
'type' => 'test_type',
'bundles' => [
'test_bundle' => 'test_bundle',
'second_bundle' => 'second_bundle',
],
],
]);
$key_value_store
->set('test_entity_type', [
'test_field' => [
'type' => 'test_type',
'bundles' => [
'second_bundle' => 'second_bundle',
],
],
])
->shouldBeCalled();
$this->fieldDefinitionListener
->onFieldDefinitionDelete($field_definition
->reveal());
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
FieldDefinitionListenerTest:: |
protected | property | The cache backend. | |
FieldDefinitionListenerTest:: |
protected | property | The entity field manager. | |
FieldDefinitionListenerTest:: |
protected | property | The entity type manager. | |
FieldDefinitionListenerTest:: |
protected | property | The field definition listener under test. | |
FieldDefinitionListenerTest:: |
protected | property | The key-value factory. | |
FieldDefinitionListenerTest:: |
protected | function |
Overrides UnitTestCase:: |
|
FieldDefinitionListenerTest:: |
protected | function | Sets up the entity manager to be tested. | |
FieldDefinitionListenerTest:: |
public | function | @covers ::onFieldDefinitionCreate | |
FieldDefinitionListenerTest:: |
public | function | @covers ::onFieldDefinitionCreate | |
FieldDefinitionListenerTest:: |
public | function | @covers ::onFieldDefinitionDelete | |
FieldDefinitionListenerTest:: |
public | function | @covers ::onFieldDefinitionDelete | |
FieldDefinitionListenerTest:: |
public | function | @covers ::onFieldDefinitionUpdate | |
UnitTestCase:: |
protected | property | The random generator. | |
UnitTestCase:: |
protected | property | The app root. | |
UnitTestCase:: |
protected | function | Asserts if two arrays are equal by sorting them first. | |
UnitTestCase:: |
protected | function | Mocks a block with a block plugin. | |
UnitTestCase:: |
protected | function | Returns a stub class resolver. | |
UnitTestCase:: |
public | function | Returns a stub config factory that behaves according to the passed in array. | |
UnitTestCase:: |
public | function | Returns a stub config storage that returns the supplied configuration. | |
UnitTestCase:: |
protected | function | Sets up a container with a cache tags invalidator. | |
UnitTestCase:: |
protected | function | Gets the random generator for the utility methods. | |
UnitTestCase:: |
public | function | Returns a stub translation manager that just returns the passed string. | |
UnitTestCase:: |
public | function | Generates a unique random string containing letters and numbers. |