From b41e210666b8c8589d9b43dd3e4dc2d3083e551a Mon Sep 17 00:00:00 2001
From: phenaproxima <phenaproxima@205645.no-reply.drupal.org>
Date: Thu, 11 Aug 2022 20:52:21 +0000
Subject: [PATCH] Issue #3303174 by phenaproxima: Stage should inject the path
 factory properly

---
 automatic_updates.services.yml                        |  2 ++
 .../automatic_updates_extensions.services.yml         |  1 +
 .../AutomaticUpdatesExtensionsKernelTestBase.php      |  7 +++++--
 .../tests/src/Kernel/ExtensionUpdaterTest.php         | 10 +---------
 package_manager/src/Stage.php                         |  7 +++++--
 .../tests/src/Kernel/PackageManagerKernelTestBase.php | 11 ++---------
 6 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml
index fc751fa92e..6eb57aa7a3 100644
--- a/automatic_updates.services.yml
+++ b/automatic_updates.services.yml
@@ -26,6 +26,7 @@ services:
       - '@event_dispatcher'
       - '@tempstore.shared'
       - '@datetime.time'
+      - '@PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface'
   automatic_updates.cron_updater:
     class: Drupal\automatic_updates\CronUpdater
     arguments:
@@ -43,6 +44,7 @@ services:
       - '@event_dispatcher'
       - '@tempstore.shared'
       - '@datetime.time'
+      - '@PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface'
   automatic_updates.staged_projects_validator:
     class: Drupal\automatic_updates\Validator\StagedProjectsValidator
     arguments:
diff --git a/automatic_updates_extensions/automatic_updates_extensions.services.yml b/automatic_updates_extensions/automatic_updates_extensions.services.yml
index 17f0095f3e..d2c2a1305b 100644
--- a/automatic_updates_extensions/automatic_updates_extensions.services.yml
+++ b/automatic_updates_extensions/automatic_updates_extensions.services.yml
@@ -11,6 +11,7 @@ services:
       - '@event_dispatcher'
       - '@tempstore.shared'
       - '@datetime.time'
+      - '@PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface'
   automatic_updates_extensions.validator.packages_installed_with_composer:
     class: Drupal\automatic_updates_extensions\Validator\PackagesInstalledWithComposerValidator
     arguments:
diff --git a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
index 01467ce09a..d14d2af1e9 100644
--- a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
+++ b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
@@ -7,6 +7,7 @@ use Drupal\automatic_updates_extensions\ExtensionUpdater;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\package_manager\Exception\StageValidationException;
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
+use Drupal\Tests\package_manager\Kernel\TestPathFactory;
 use Drupal\Tests\package_manager\Kernel\TestStageTrait;
 use GuzzleHttp\Client;
 use GuzzleHttp\Handler\MockHandler;
@@ -74,7 +75,8 @@ abstract class AutomaticUpdatesExtensionsKernelTestBase extends AutomaticUpdates
       $this->container->get('file_system'),
       $this->container->get('event_dispatcher'),
       $this->container->get('tempstore.shared'),
-      $this->container->get('datetime.time')
+      $this->container->get('datetime.time'),
+      new TestPathFactory()
     );
   }
 
@@ -163,7 +165,8 @@ abstract class AutomaticUpdatesExtensionsKernelTestBase extends AutomaticUpdates
       $this->container->get('file_system'),
       $this->container->get('event_dispatcher'),
       $this->container->get('tempstore.shared'),
-      $this->container->get('datetime.time')
+      $this->container->get('datetime.time'),
+      new TestPathFactory()
     );
   }
 
diff --git a/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php b/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
index 6b34a1258f..61f0845de0 100644
--- a/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
+++ b/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\automatic_updates_extensions\Kernel;
 
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
-use Drupal\Tests\package_manager\Kernel\TestPathFactory;
 use Drupal\Tests\user\Traits\UserCreationTrait;
 
 /**
@@ -49,14 +48,7 @@ class ExtensionUpdaterTest extends AutomaticUpdatesKernelTestBase {
 
     $this->createVirtualProject(__DIR__ . '/../../fixtures/fake-site');
 
-    /** @var \Drupal\automatic_updates_extensions\ExtensionUpdater $updater */
-    $updater = $this->container->get('automatic_updates_extensions.updater');
-    // @todo Remove this hack in https://www.drupal.org/i/3303174.
-    $property = new \ReflectionProperty($updater, 'pathFactory');
-    $property->setAccessible(TRUE);
-    $property->setValue($updater, new TestPathFactory());
-
-    $id = $updater->begin([
+    $id = $this->container->get('automatic_updates_extensions.updater')->begin([
       'my_module' => '9.8.1',
       // Use a legacy version number to ensure they are converted to semantic
       // version numbers which will work with the drupal.org Composer facade.
diff --git a/package_manager/src/Stage.php b/package_manager/src/Stage.php
index fa6e9ec412..f7d000b311 100644
--- a/package_manager/src/Stage.php
+++ b/package_manager/src/Stage.php
@@ -28,6 +28,7 @@ use PhpTuf\ComposerStager\Domain\Core\Stager\StagerInterface;
 use PhpTuf\ComposerStager\Domain\Exception\InvalidArgumentException;
 use PhpTuf\ComposerStager\Domain\Exception\PreconditionException;
 use PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactory;
+use PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface;
 use PhpTuf\ComposerStager\Infrastructure\Value\PathList\PathList;
 use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
 
@@ -190,8 +191,10 @@ class Stage {
    *   The shared tempstore factory.
    * @param \Drupal\Component\Datetime\TimeInterface $time
    *   The time service.
+   * @param \PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface $path_factory
+   *   (optional) The path factory service.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, PathLocator $path_locator, BeginnerInterface $beginner, StagerInterface $stager, CommitterInterface $committer, FileSystemInterface $file_system, EventDispatcherInterface $event_dispatcher, SharedTempStoreFactory $shared_tempstore, TimeInterface $time) {
+  public function __construct(ConfigFactoryInterface $config_factory, PathLocator $path_locator, BeginnerInterface $beginner, StagerInterface $stager, CommitterInterface $committer, FileSystemInterface $file_system, EventDispatcherInterface $event_dispatcher, SharedTempStoreFactory $shared_tempstore, TimeInterface $time, PathFactoryInterface $path_factory = NULL) {
     $this->configFactory = $config_factory;
     $this->pathLocator = $path_locator;
     $this->beginner = $beginner;
@@ -201,7 +204,7 @@ class Stage {
     $this->eventDispatcher = $event_dispatcher;
     $this->time = $time;
     $this->tempStore = $shared_tempstore->get('package_manager_stage');
-    $this->pathFactory = new PathFactory();
+    $this->pathFactory = $path_factory ?: new PathFactory();
   }
 
   /**
diff --git a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
index 232150a8e1..61e54d7658 100644
--- a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
+++ b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
@@ -97,7 +97,8 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
       $this->container->get('file_system'),
       $this->container->get('event_dispatcher'),
       $this->container->get('tempstore.shared'),
-      $this->container->get('datetime.time')
+      $this->container->get('datetime.time'),
+      new TestPathFactory()
     );
   }
 
@@ -234,14 +235,6 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
  */
 trait TestStageTrait {
 
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(...$arguments) {
-    parent::__construct(...$arguments);
-    $this->pathFactory = new TestPathFactory();
-  }
-
   /**
    * {@inheritdoc}
    */
-- 
GitLab