From 58c9abd35a170ce421e07e6954d3c865dc15a337 Mon Sep 17 00:00:00 2001
From: Kunal Sachdev <57170-kunal.sachdev@users.noreply.drupalcode.org>
Date: Wed, 26 Apr 2023 13:37:45 +0000
Subject: [PATCH] Issue #3354594 by kunal.sachdev: Merge
 ComposerSettingsValidator into ComposerValidator

---
 package_manager/package_manager.services.yml  |  4 -
 .../Validator/ComposerSettingsValidator.php   | 91 -------------------
 .../src/Validator/ComposerValidator.php       | 38 +++++++-
 ...atorTest.php => ComposerValidatorTest.php} |  4 +-
 4 files changed, 39 insertions(+), 98 deletions(-)
 delete mode 100644 package_manager/src/Validator/ComposerSettingsValidator.php
 rename package_manager/tests/src/Kernel/{ComposerSettingsValidatorTest.php => ComposerValidatorTest.php} (96%)

diff --git a/package_manager/package_manager.services.yml b/package_manager/package_manager.services.yml
index 28b08b69ba..f7ef38a037 100644
--- a/package_manager/package_manager.services.yml
+++ b/package_manager/package_manager.services.yml
@@ -92,10 +92,6 @@ services:
     tags:
       - { name: event_subscriber }
   Drupal\package_manager\Validator\WritableFileSystemValidator: '@package_manager.validator.file_system'
-  package_manager.validator.composer_settings:
-    class: Drupal\package_manager\Validator\ComposerSettingsValidator
-    tags:
-      - { name: event_subscriber }
   package_manger.validator.composer_minimum_stability:
     class: Drupal\package_manager\Validator\ComposerMinimumStabilityValidator
     tags:
diff --git a/package_manager/src/Validator/ComposerSettingsValidator.php b/package_manager/src/Validator/ComposerSettingsValidator.php
deleted file mode 100644
index 69ac533acb..0000000000
--- a/package_manager/src/Validator/ComposerSettingsValidator.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-declare(strict_types = 1);
-
-namespace Drupal\package_manager\Validator;
-
-use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\package_manager\ComposerInspector;
-use Drupal\package_manager\Event\PreApplyEvent;
-use Drupal\package_manager\Event\PreCreateEvent;
-use Drupal\package_manager\Event\PreOperationStageEvent;
-use Drupal\package_manager\Event\StatusCheckEvent;
-use Drupal\package_manager\PathLocator;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-/**
- * Validates certain Composer settings.
- *
- * @internal
- *   This is an internal part of Package Manager and may be changed or removed
- *   at any time without warning. External code should not interact with this
- *   class.
- */
-final class ComposerSettingsValidator implements EventSubscriberInterface {
-
-  use StringTranslationTrait;
-
-  /**
-   * Constructs a ComposerSettingsValidator object.
-   *
-   * @param \Drupal\package_manager\ComposerInspector $inspector
-   *   The Composer inspector service.
-   * @param \Drupal\package_manager\PathLocator $pathLocator
-   *   The path locator service.
-   */
-  public function __construct(protected ComposerInspector $inspector, protected PathLocator $pathLocator) {
-  }
-
-  /**
-   * Validates Composer settings.
-   */
-  public function validate(PreOperationStageEvent $event): void {
-    $dir = $event instanceof PreApplyEvent
-      ? $event->stage->getStageDirectory()
-      : $this->pathLocator->getProjectRoot();
-
-    $settings = [];
-    foreach (['disable-tls', 'secure-http'] as $key) {
-      try {
-        $settings[$key] = ComposerInspector::toBoolean($this->inspector->getConfig($key, $dir) ?: '0');
-      }
-      catch (\Throwable $throwable) {
-        $event->addErrorFromThrowable($throwable, $this->t('Unable to determine Composer <code>@key</code> setting.', [
-          '@key' => $key,
-        ]));
-        return;
-      }
-    }
-
-    // If disable-tls is enabled, it overrides secure-http and sets its value to
-    // FALSE, even if secure-http is set to TRUE explicitly.
-    $messages = [];
-    if ($settings['disable-tls'] === TRUE) {
-      $messages[] = $this->t('TLS must be enabled for HTTPS Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [
-        ':url' => 'https://getcomposer.org/doc/06-config.md#disable-tls',
-      ]);
-      $messages[] = $this->t('You should also check the value of <code>secure-http</code> and make sure that it is set to <code>true</code> or not set at all.');
-    }
-    elseif ($settings['secure-http'] !== TRUE) {
-      $messages[] = $this->t('HTTPS must be enabled for Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [
-        ':url' => 'https://getcomposer.org/doc/06-config.md#secure-http',
-      ]);
-    }
-
-    if ($messages) {
-      $event->addError($messages, $this->t("Composer settings don't satisfy Package Manager's requirements."));
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents(): array {
-    return [
-      PreCreateEvent::class => 'validate',
-      PreApplyEvent::class => 'validate',
-      StatusCheckEvent::class => 'validate',
-    ];
-  }
-
-}
diff --git a/package_manager/src/Validator/ComposerValidator.php b/package_manager/src/Validator/ComposerValidator.php
index 784513f780..dd9772aed4 100644
--- a/package_manager/src/Validator/ComposerValidator.php
+++ b/package_manager/src/Validator/ComposerValidator.php
@@ -7,6 +7,7 @@ namespace Drupal\package_manager\Validator;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Url;
 use Drupal\package_manager\ComposerInspector;
+use Drupal\package_manager\Event\PreApplyEvent;
 use Drupal\package_manager\Event\PreOperationStageEvent;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\package_manager\PathLocator;
@@ -45,8 +46,12 @@ class ComposerValidator implements EventSubscriberInterface {
    * Validates that the Composer executable is the correct version.
    */
   public function validate(PreOperationStageEvent $event): void {
+    $messages = [];
+    $dir = $event instanceof PreApplyEvent
+      ? $event->stage->getStageDirectory()
+      : $this->pathLocator->getProjectRoot();
     try {
-      $this->composerInspector->validate($this->pathLocator->getProjectRoot());
+      $this->composerInspector->validate($dir);
     }
     catch (\Throwable $e) {
       if ($this->moduleHandler->moduleExists('help')) {
@@ -63,7 +68,38 @@ class ComposerValidator implements EventSubscriberInterface {
       else {
         $event->addErrorFromThrowable($e);
       }
+      return;
+    }
+
+    $settings = [];
+    foreach (['disable-tls', 'secure-http'] as $key) {
+      try {
+        $settings[$key] = ComposerInspector::toBoolean($this->composerInspector->getConfig($key, $dir) ?: '0');
+      }
+      catch (\Throwable $e) {
+        $event->addErrorFromThrowable($e, $this->t('Unable to determine Composer <code>@key</code> setting.', [
+          '@key' => $key,
+        ]));
+        return;
+      }
+    }
+
+    // If disable-tls is enabled, it overrides secure-http and sets its value to
+    // FALSE, even if secure-http is set to TRUE explicitly.
+    if ($settings['disable-tls'] === TRUE) {
+      $messages[] = $this->t('TLS must be enabled for HTTPS Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [
+        ':url' => 'https://getcomposer.org/doc/06-config.md#disable-tls',
+      ]);
+      $messages[] = $this->t('You should also check the value of <code>secure-http</code> and make sure that it is set to <code>true</code> or not set at all.');
+    }
+    elseif ($settings['secure-http'] !== TRUE) {
+      $messages[] = $this->t('HTTPS must be enabled for Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [
+        ':url' => 'https://getcomposer.org/doc/06-config.md#secure-http',
+      ]);
+    }
 
+    if ($messages) {
+      $event->addError($messages, $this->t("Composer settings don't satisfy Package Manager's requirements."));
     }
   }
 
diff --git a/package_manager/tests/src/Kernel/ComposerSettingsValidatorTest.php b/package_manager/tests/src/Kernel/ComposerValidatorTest.php
similarity index 96%
rename from package_manager/tests/src/Kernel/ComposerSettingsValidatorTest.php
rename to package_manager/tests/src/Kernel/ComposerValidatorTest.php
index fefe092eff..f008de987f 100644
--- a/package_manager/tests/src/Kernel/ComposerSettingsValidatorTest.php
+++ b/package_manager/tests/src/Kernel/ComposerValidatorTest.php
@@ -10,11 +10,11 @@ use Drupal\package_manager\Event\PreCreateEvent;
 use Drupal\package_manager\ValidationResult;
 
 /**
- * @covers \Drupal\package_manager\Validator\ComposerSettingsValidator
+ * @covers \Drupal\package_manager\Validator\ComposerValidator
  * @group package_manager
  * @internal
  */
-class ComposerSettingsValidatorTest extends PackageManagerKernelTestBase {
+class ComposerValidatorTest extends PackageManagerKernelTestBase {
 
   /**
    * Data provider for testComposerSettingsValidation().
-- 
GitLab