Verified Commit 4cb10842 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3362457 by Wim Leers, NickDickinsonWilde: Fix all...

Issue #3362457 by Wim Leers, NickDickinsonWilde: Fix all PluginExistsConstraint constraint violations in tests
parent 7bb67dde
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -67,9 +67,6 @@ public function checkConfigSchema(TypedConfigManagerInterface $typed_config, $co
      // @todo Remove this in https://www.drupal.org/project/drupal/issues/3362456
      "Module '.*' is not installed.",
      "Theme '.*' is not installed.",
      // @see \Drupal\Core\Plugin\Plugin\Validation\Constraint\PluginExistsConstraint::$unknownPluginMessage
      // @todo Remove this in https://www.drupal.org/project/drupal/issues/3362457
      "The '.*' plugin does not exist.",
    ];
    $filtered_violations = array_filter(
      iterator_to_array($violations),
+7 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
namespace Drupal\Core\Plugin\Plugin\Validation\Constraint;

use Drupal\Component\Plugin\Factory\DefaultFactory;
use Drupal\Component\Plugin\FallbackPluginManagerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

@@ -20,6 +21,12 @@ public function validate(mixed $plugin_id, Constraint $constraint) {
    assert($constraint instanceof PluginExistsConstraint);

    $definition = $constraint->pluginManager->getDefinition($plugin_id, FALSE);
    // Some plugin managers provide fallbacks.
    if ($constraint->pluginManager instanceof FallbackPluginManagerInterface) {
      $fallback_plugin_id = $constraint->pluginManager->getFallbackPluginId($plugin_id);
      $definition = $constraint->pluginManager->getDefinition($fallback_plugin_id, FALSE);
    }

    if (empty($definition)) {
      $this->context->addViolation($constraint->unknownPluginMessage, [
        '@plugin_id' => $plugin_id,
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ public function testBigPipeThemeHookSuggestions() {
    $entity = $this->controller->create([
      'id' => 'test_block1',
      'theme' => 'stark',
      'plugin' => 'test_html',
      'plugin' => 'system_powered_by_block',
    ]);
    $entity->save();

+10 −1
Original line number Diff line number Diff line
@@ -35,8 +35,17 @@ protected function setUp(): void {
   * Tests validating a block with an unknown plugin ID.
   */
  public function testInvalidPluginId(): void {
    $this->entity->set('plugin', 'block_content:d7c9d8ba-663f-41b4-8756-86bc55c44653');
    // Block config entities with invalid block plugin IDs automatically fall
    // back to the `broken` block plugin.
    // @see https://www.drupal.org/node/2249303
    // @see \Drupal\Core\Block\BlockManager::getFallbackPluginId()
    // @see \Drupal\Core\Block\Plugin\Block\Broken
    $this->assertValidationErrors([]);

    $this->entity->set('plugin', 'non_existent');
    $this->assertValidationErrors(['plugin' => "The 'non_existent' plugin does not exist."]);
    // @todo Expect error for this in https://www.drupal.org/project/drupal/issues/3377709
    $this->assertValidationErrors([]);
  }

  /**
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ class NewDefaultThemeBlocksTest extends KernelTestBase {
  protected static $modules = [
    'block',
    'system',
    'user',
  ];

  /**