Chris@0: entityTypeId = $this->randomMachineName(); Chris@0: $this->entityType = $this->getMock('\Drupal\Core\Config\Entity\ConfigEntityTypeInterface'); Chris@0: Chris@14: $this->entityManager = new EntityManager(); Chris@14: $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class); Chris@14: $this->entityFieldManager = $this->getMock(EntityFieldManagerInterface::class); Chris@0: Chris@0: $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface'); Chris@0: Chris@0: $this->fieldTypePluginManager = $this->getMock('Drupal\Core\Field\FieldTypePluginManagerInterface'); Chris@0: Chris@0: $container = new ContainerBuilder(); Chris@0: $container->set('entity.manager', $this->entityManager); Chris@14: $container->set('entity_field.manager', $this->entityFieldManager); Chris@14: $container->set('entity_type.manager', $this->entityTypeManager); Chris@0: $container->set('uuid', $this->uuid); Chris@0: $container->set('plugin.manager.field.field_type', $this->fieldTypePluginManager); Chris@14: // Inject the container into entity.manager so it can defer to Chris@14: // entity_type.manager, etc. Chris@14: $this->entityManager->setContainer($container); Chris@0: \Drupal::setContainer($container); Chris@0: Chris@0: // Create a mock FieldStorageConfig object. Chris@0: $this->fieldStorage = $this->getMock('\Drupal\field\FieldStorageConfigInterface'); Chris@0: $this->fieldStorage->expects($this->any()) Chris@0: ->method('getType') Chris@0: ->will($this->returnValue('test_field')); Chris@0: $this->fieldStorage->expects($this->any()) Chris@0: ->method('getName') Chris@0: ->will($this->returnValue('field_test')); Chris@0: $this->fieldStorage->expects($this->any()) Chris@0: ->method('getSettings') Chris@0: ->willReturn([]); Chris@0: // Place the field in the mocked entity manager's field registry. Chris@14: $this->entityFieldManager->expects($this->any()) Chris@0: ->method('getFieldStorageDefinitions') Chris@0: ->with('test_entity_type') Chris@0: ->will($this->returnValue([ Chris@0: $this->fieldStorage->getName() => $this->fieldStorage, Chris@0: ])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::calculateDependencies Chris@0: */ Chris@0: public function testCalculateDependencies() { Chris@0: // Mock the interfaces necessary to create a dependency on a bundle entity. Chris@0: $target_entity_type = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); Chris@0: $target_entity_type->expects($this->any()) Chris@0: ->method('getBundleConfigDependency') Chris@0: ->will($this->returnValue(['type' => 'config', 'name' => 'test.test_entity_type.id'])); Chris@0: Chris@14: $this->entityTypeManager->expects($this->at(0)) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->willReturn($this->entityType); Chris@14: $this->entityTypeManager->expects($this->at(1)) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->willReturn($this->entityType); Chris@14: $this->entityTypeManager->expects($this->at(2)) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->willReturn($this->entityType); Chris@14: $this->entityTypeManager->expects($this->at(3)) Chris@0: ->method('getDefinition') Chris@0: ->with('test_entity_type') Chris@0: ->willReturn($target_entity_type); Chris@0: Chris@0: $this->fieldTypePluginManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->with('test_field') Chris@0: ->willReturn(['provider' => 'test_module', 'config_dependencies' => ['module' => ['test_module2']], 'class' => '\Drupal\Tests\field\Unit\DependencyFieldItem']); Chris@0: Chris@0: $this->fieldStorage->expects($this->once()) Chris@0: ->method('getConfigDependencyName') Chris@0: ->will($this->returnValue('field.storage.test_entity_type.test_field')); Chris@0: Chris@0: $field = new FieldConfig([ Chris@0: 'field_name' => $this->fieldStorage->getName(), Chris@0: 'entity_type' => 'test_entity_type', Chris@0: 'bundle' => 'test_bundle', Chris@0: 'field_type' => 'test_field', Chris@0: ], $this->entityTypeId); Chris@0: $dependencies = $field->calculateDependencies()->getDependencies(); Chris@0: $this->assertContains('field.storage.test_entity_type.test_field', $dependencies['config']); Chris@0: $this->assertContains('test.test_entity_type.id', $dependencies['config']); Chris@0: $this->assertEquals(['test_module', 'test_module2', 'test_module3'], $dependencies['module']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Test that invalid bundles are handled. Chris@0: */ Chris@0: public function testCalculateDependenciesIncorrectBundle() { Chris@0: $storage = $this->getMock('\Drupal\Core\Config\Entity\ConfigEntityStorageInterface'); Chris@0: $storage->expects($this->any()) Chris@0: ->method('load') Chris@0: ->with('test_bundle_not_exists') Chris@0: ->will($this->returnValue(NULL)); Chris@0: Chris@14: $this->entityTypeManager->expects($this->any()) Chris@0: ->method('getStorage') Chris@0: ->with('bundle_entity_type') Chris@0: ->will($this->returnValue($storage)); Chris@0: Chris@0: $target_entity_type = new EntityType([ Chris@0: 'id' => 'test_entity_type', Chris@0: 'bundle_entity_type' => 'bundle_entity_type', Chris@0: ]); Chris@0: Chris@14: $this->entityTypeManager->expects($this->at(0)) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->willReturn($this->entityType); Chris@14: $this->entityTypeManager->expects($this->at(1)) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->willReturn($this->entityType); Chris@14: $this->entityTypeManager->expects($this->at(2)) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->willReturn($this->entityType); Chris@14: $this->entityTypeManager->expects($this->at(3)) Chris@0: ->method('getDefinition') Chris@0: ->with('test_entity_type') Chris@0: ->willReturn($target_entity_type); Chris@0: Chris@0: $this->fieldTypePluginManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->with('test_field') Chris@0: ->willReturn(['provider' => 'test_module', 'config_dependencies' => ['module' => ['test_module2']], 'class' => '\Drupal\Tests\field\Unit\DependencyFieldItem']); Chris@0: Chris@0: $field = new FieldConfig([ Chris@0: 'field_name' => $this->fieldStorage->getName(), Chris@0: 'entity_type' => 'test_entity_type', Chris@0: 'bundle' => 'test_bundle_not_exists', Chris@0: 'field_type' => 'test_field', Chris@0: ], $this->entityTypeId); Chris@0: $this->setExpectedException(\LogicException::class, 'Missing bundle entity, entity type bundle_entity_type, entity id test_bundle_not_exists.'); Chris@0: $field->calculateDependencies(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::onDependencyRemoval Chris@0: */ Chris@0: public function testOnDependencyRemoval() { Chris@0: $this->fieldTypePluginManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->with('test_field') Chris@0: ->willReturn(['class' => '\Drupal\Tests\field\Unit\DependencyFieldItem']); Chris@0: Chris@0: $field = new FieldConfig([ Chris@0: 'field_name' => $this->fieldStorage->getName(), Chris@0: 'entity_type' => 'test_entity_type', Chris@0: 'bundle' => 'test_bundle', Chris@0: 'field_type' => 'test_field', Chris@0: 'dependencies' => [ Chris@0: 'module' => [ Chris@0: 'fruiter', Chris@17: ], Chris@0: ], Chris@0: 'third_party_settings' => [ Chris@0: 'fruiter' => [ Chris@0: 'fruit' => 'apple', Chris@17: ], Chris@17: ], Chris@0: ]); Chris@0: $changed = $field->onDependencyRemoval(['module' => ['fruiter']]); Chris@0: $this->assertTrue($changed); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::toArray Chris@0: */ Chris@0: public function testToArray() { Chris@0: $field = new FieldConfig([ Chris@0: 'field_name' => $this->fieldStorage->getName(), Chris@0: 'entity_type' => 'test_entity_type', Chris@0: 'bundle' => 'test_bundle', Chris@0: 'field_type' => 'test_field', Chris@0: ], $this->entityTypeId); Chris@0: Chris@0: $expected = [ Chris@0: 'id' => 'test_entity_type.test_bundle.field_test', Chris@0: 'uuid' => NULL, Chris@0: 'status' => TRUE, Chris@0: 'langcode' => 'en', Chris@0: 'field_name' => 'field_test', Chris@0: 'entity_type' => 'test_entity_type', Chris@0: 'bundle' => 'test_bundle', Chris@0: 'label' => '', Chris@0: 'description' => '', Chris@0: 'required' => FALSE, Chris@0: 'default_value' => [], Chris@0: 'default_value_callback' => '', Chris@0: 'settings' => [], Chris@0: 'dependencies' => [], Chris@0: 'field_type' => 'test_field', Chris@0: ]; Chris@14: $this->entityTypeManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->will($this->returnValue($this->entityType)); Chris@0: $this->entityType->expects($this->once()) Chris@0: ->method('getKey') Chris@0: ->with('id') Chris@0: ->will($this->returnValue('id')); Chris@17: $this->entityType->expects($this->once()) Chris@17: ->method('getPropertiesToExport') Chris@17: ->with('test_entity_type.test_bundle.field_test') Chris@17: ->will($this->returnValue(array_combine(array_keys($expected), array_keys($expected)))); Chris@0: Chris@0: $export = $field->toArray(); Chris@0: $this->assertEquals($expected, $export); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::getType Chris@0: */ Chris@0: public function testGetType() { Chris@0: // Ensure that FieldConfig::getType() is not delegated to Chris@0: // FieldStorage. Chris@14: $this->entityFieldManager->expects($this->never()) Chris@0: ->method('getFieldStorageDefinitions'); Chris@0: $this->fieldStorage->expects($this->never()) Chris@0: ->method('getType'); Chris@0: Chris@0: $field = new FieldConfig([ Chris@0: 'field_name' => $this->fieldStorage->getName(), Chris@0: 'entity_type' => 'test_entity_type', Chris@0: 'bundle' => 'test_bundle', Chris@0: 'field_type' => 'test_field', Chris@0: ], $this->entityTypeId); Chris@0: Chris@0: $this->assertEquals('test_field', $field->getType()); Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: /** Chris@0: * A test class. Chris@0: * Chris@0: * @see \Drupal\Tests\field\Unit\FieldConfigEntityUnitTest::testCalculateDependencies() Chris@0: */ Chris@0: class DependencyFieldItem { Chris@0: Chris@0: public static function calculateDependencies(FieldDefinitionInterface $definition) { Chris@0: return ['module' => ['test_module3']]; Chris@0: } Chris@0: Chris@0: public static function onDependencyRemoval($field_config, $dependencies) { Chris@0: } Chris@0: Chris@0: }