Security update for Core, with self-updated composer
[yaffs-website] / web / core / tests / Drupal / Tests / Core / DependencyInjection / Compiler / TaggedHandlersPassTest.php
index 7e7381f92d3a15dc9ba595c70cd5fc4d103a49f3..5fe2b4478c956af5c735796420eb0df5a4f7cf5c 100644 (file)
@@ -60,6 +60,25 @@ class TaggedHandlersPassTest extends UnitTestCase {
     $handler_pass->process($container);
   }
 
+  /**
+   * Tests a required consumer with no handlers.
+   *
+   * @covers ::process
+   * @covers ::processServiceIdCollectorPass
+   */
+  public function testIdCollectorProcessRequiredHandlers() {
+    $this->setExpectedException(LogicException::class, "At least one service tagged with 'consumer_id' is required.");
+    $container = $this->buildContainer();
+    $container
+      ->register('consumer_id', __NAMESPACE__ . '\ValidConsumer')
+      ->addTag('service_id_collector', [
+        'required' => TRUE,
+      ]);
+
+    $handler_pass = new TaggedHandlersPass();
+    $handler_pass->process($container);
+  }
+
   /**
    * Tests consumer with missing interface in non-production environment.
    *
@@ -104,6 +123,32 @@ class TaggedHandlersPassTest extends UnitTestCase {
     $this->assertCount(2, $method_calls);
   }
 
+  /**
+   * Tests one consumer and two handlers with service ID collection.
+   *
+   * @covers ::process
+   */
+  public function testserviceIdProcess() {
+    $container = $this->buildContainer();
+    $container
+      ->register('consumer_id', __NAMESPACE__ . '\ValidConsumer')
+      ->addTag('service_id_collector');
+
+    $container
+      ->register('handler1', __NAMESPACE__ . '\ValidHandler')
+      ->addTag('consumer_id');
+    $container
+      ->register('handler2', __NAMESPACE__ . '\ValidHandler')
+      ->addTag('consumer_id');
+
+    $handler_pass = new TaggedHandlersPass();
+    $handler_pass->process($container);
+
+    $arguments = $container->getDefinition('consumer_id')->getArguments();
+    $this->assertCount(1, $arguments);
+    $this->assertCount(2, $arguments[0]);
+  }
+
   /**
    * Tests handler priority sorting.
    *
@@ -135,6 +180,39 @@ class TaggedHandlersPassTest extends UnitTestCase {
     $this->assertEquals(0, $method_calls[1][1][1]);
   }
 
+  /**
+   * Tests handler priority sorting for service ID collection.
+   *
+   * @covers ::process
+   */
+  public function testserviceIdProcessPriority() {
+    $container = $this->buildContainer();
+    $container
+      ->register('consumer_id', __NAMESPACE__ . '\ValidConsumer')
+      ->addTag('service_id_collector');
+
+    $container
+      ->register('handler1', __NAMESPACE__ . '\ValidHandler')
+      ->addTag('consumer_id');
+    $container
+      ->register('handler2', __NAMESPACE__ . '\ValidHandler')
+      ->addTag('consumer_id', [
+        'priority' => 20,
+      ]);
+    $container
+      ->register('handler3', __NAMESPACE__ . '\ValidHandler')
+      ->addTag('consumer_id', [
+        'priority' => 10,
+      ]);
+
+    $handler_pass = new TaggedHandlersPass();
+    $handler_pass->process($container);
+
+    $arguments = $container->getDefinition('consumer_id')->getArguments();
+    $this->assertCount(1, $arguments);
+    $this->assertSame(['handler2', 'handler3', 'handler1'], $arguments[0]);
+  }
+
   /**
    * Tests consumer method without priority parameter.
    *