Skip to content
Snippets Groups Projects
Verified Commit 5a571f6f authored by quietone's avatar quietone
Browse files

Issue #2820411 by Akhil Babu, smustgrave, larowlan, joachim, quietone: Improve...

Issue #2820411 by Akhil Babu, smustgrave, larowlan, joachim, quietone: Improve the exception message when an entity handler class does not exist
parent c2958323
No related branches found
No related tags found
26 merge requests!8528Issue #3456871 by Tim Bozeman: Support NULL services,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #88663 canceled
Pipeline: drupal

#88666

    ......@@ -253,7 +253,11 @@ public function getHandler($entity_type_id, $handler_type) {
    $definition = $this->getDefinition($entity_type_id);
    $class = $definition->getHandlerClass($handler_type);
    if (!$class) {
    throw new InvalidPluginDefinitionException($entity_type_id, sprintf('The "%s" entity type did not specify a %s handler.', $entity_type_id, $handler_type));
    $handlers = $definition->getHandlerClasses();
    if (!isset($handlers[$handler_type])) {
    throw new InvalidPluginDefinitionException($entity_type_id, sprintf('The "%s" entity type did not specify a %s handler.', $entity_type_id, $handler_type));
    }
    throw new InvalidPluginDefinitionException($entity_type_id, sprintf('The %s handler of the "%s" entity type specifies a non-existent class "%s".', $handler_type, $entity_type_id, $handlers[$handler_type]));
    }
    $this->handlers[$handler_type][$entity_type_id] = $this->createHandlerInstance($class, $definition);
    }
    ......
    ......@@ -280,17 +280,49 @@ public function testGetHandler() {
    $this->assertInstanceOf(TranslationInterface::class, $apple_controller->stringTranslation);
    }
    /**
    * Provides test data for testGetHandlerMissingHandler().
    *
    * @return array
    * Test data.
    */
    public function provideMissingHandlerData() : array {
    return [
    'missing_handler' => [
    'test_entity_type',
    'storage',
    '',
    'The "test_entity_type" entity type did not specify a storage handler.',
    ],
    'missing_handler_class' => [
    'test_entity_type',
    'storage',
    'Non_Existing_Class',
    'The storage handler of the "test_entity_type" entity type specifies a non-existent class "Non_Existing_Class".',
    ],
    ];
    }
    /**
    * Tests the getHandler() method when no controller is defined.
    *
    * @covers ::getHandler
    *
    * @dataProvider provideMissingHandlerData
    */
    public function testGetHandlerMissingHandler() {
    public function testGetHandlerMissingHandler(string $entity_type, string $handler_name, string $handler_class, $exception_message) : void {
    $entity = $this->prophesize(EntityTypeInterface::class);
    $entity->getHandlerClass('storage')->willReturn('');
    $this->setUpEntityTypeDefinitions(['test_entity_type' => $entity]);
    $entity->getHandlerClass($handler_name)->willReturn(NULL);
    if (!$handler_class) {
    $entity->getHandlerClasses()->willReturn([]);
    }
    else {
    $entity->getHandlerClasses()->willReturn([$handler_name => $handler_class]);
    }
    $this->setUpEntityTypeDefinitions([$entity_type => $entity]);
    $this->expectException(InvalidPluginDefinitionException::class);
    $this->entityTypeManager->getHandler('test_entity_type', 'storage');
    $this->expectExceptionMessage($exception_message);
    $this->entityTypeManager->getHandler($entity_type, $handler_name);
    }
    /**
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment