diff --git a/core/modules/field/tests/src/Kernel/FieldDefinitionAvailabilityTest.php b/core/modules/field/tests/src/Kernel/FieldDefinitionAvailabilityTest.php new file mode 100644 index 0000000..7222014 --- /dev/null +++ b/core/modules/field/tests/src/Kernel/FieldDefinitionAvailabilityTest.php @@ -0,0 +1,112 @@ +origin === 'core' + && empty($module->info['hidden']) + && $module->status == FALSE + && $module->info['package'] !== 'Testing'); + }); + + $this->enableModules(array_keys($modules)); + + /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_formatter_manager */ + $field_formatter_manager = \Drupal::service('plugin.manager.field.formatter'); + + /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_widget_manager */ + $field_widget_manager = \Drupal::service('plugin.manager.field.widget'); + + /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager */ + $entity_field_manager = \Drupal::service('entity_field.manager'); + + /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */ + $entity_type_manager = \Drupal::service('entity_type.manager'); + + /** @var \Drupal\Core\Field\BaseFieldDefinition[][] $field_definitions */ + $field_definitions = []; + + /** @var \Drupal\Core\Entity\EntityTypeInterface[] $content_entity_types */ + $content_entity_types = array_filter($entity_type_manager->getDefinitions(), function (EntityTypeInterface $entity_type) { + return $entity_type instanceof ContentEntityTypeInterface; + }); + + foreach ($content_entity_types as $entity_type_id => $entity_type_definition) { + $field_definitions[$entity_type_id] = $entity_field_manager->getBaseFieldDefinitions($entity_type_id); + } + + foreach ($field_definitions as $entity_type_id => $definitions) { + foreach ($definitions as $field_id => $field_definition) { + $this->checkDisplayOption($entity_type_id, $field_id, $field_definition, $field_formatter_manager, 'view'); + $this->checkDisplayOption($entity_type_id, $field_id, $field_definition, $field_widget_manager, 'form'); + } + } + } + + /** + * Helper method that tries to load plugin definitions. + * + * @param string $entity_type_id + * Id of entity type. Required by message. + * @param string $field_id + * Id of field. Required by message. + * @param \Drupal\Core\Field\BaseFieldDefinition $field_definition + * Field definition that provide display options. + * @param \Drupal\Component\Plugin\Discovery\DiscoveryInterface $plugin_manager + * Plugin manager that will try to provide plugin definition. + * @param string $display_context + * Defines which display options should be loaded. + */ + protected function checkDisplayOption($entity_type_id, $field_id, BaseFieldDefinition $field_definition, DiscoveryInterface $plugin_manager, $display_context) { + $form_display_options = $field_definition->getDisplayOptions($display_context); + if (!empty($form_display_options) && !empty($form_display_options['type'])) { + try { + $plugin_manager->getDefinition($form_display_options['type']); + } + catch (PluginNotFoundException $e) { + $this->fail(sprintf( + 'PluginNotFoundException here for "%s" field %s display options of "%s" entity type. Original message: %s', + $field_id, + $display_context, + $entity_type_id, + $e->getMessage() + )); + } + } + } + +} diff --git a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php index d53ba49..460c0df 100644 --- a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php +++ b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php @@ -316,7 +316,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->setDefaultValue(0) ->setDisplayOptions('view', [ 'label' => 'hidden', - 'type' => 'integer', + 'type' => 'number_integer', 'weight' => 0, ]) ->setDisplayOptions('form', [