From fa75661e206692e3419d8c96b7fda8b700b92951 Mon Sep 17 00:00:00 2001
From: omkar podey <58183-omkar.podey@users.noreply.drupalcode.org>
Date: Mon, 10 Apr 2023 12:45:31 +0000
Subject: [PATCH] Issue #3352731 by omkar.podey: Remove need for
 VersionPolicyValidator to know about specific core packages

---
 package_manager/src/InstalledPackagesList.php          | 10 +++++++++-
 .../tests/src/Unit/InstalledPackagesListTest.php       |  8 ++++++++
 src/Validator/VersionPolicyValidator.php               |  4 +---
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/package_manager/src/InstalledPackagesList.php b/package_manager/src/InstalledPackagesList.php
index abd7628cf9..499c73120f 100644
--- a/package_manager/src/InstalledPackagesList.php
+++ b/package_manager/src/InstalledPackagesList.php
@@ -156,10 +156,14 @@ final class InstalledPackagesList extends \ArrayObject {
    *
    * Packages returned by ::getCorePackageList() are considered core packages.
    *
+   * @param bool $include_dev
+   *   (optional) Whether to include core packages intended for development.
+   *   Defaults to TRUE.
+   *
    * @return static
    *   A list of the installed core packages.
    */
-  public function getCorePackages(): static {
+  public function getCorePackages(bool $include_dev = TRUE): static {
     $core_packages = array_intersect_key(
       $this->getArrayCopy(),
       array_flip(static::getCorePackageList())
@@ -170,6 +174,10 @@ final class InstalledPackagesList extends \ArrayObject {
     if (array_key_exists('drupal/core-recommended', $core_packages)) {
       unset($core_packages['drupal/core']);
     }
+    if (!$include_dev) {
+      unset($core_packages['drupal/core-dev']);
+      unset($core_packages['drupal/core-dev-pinned']);
+    }
     return new static($core_packages);
   }
 
diff --git a/package_manager/tests/src/Unit/InstalledPackagesListTest.php b/package_manager/tests/src/Unit/InstalledPackagesListTest.php
index 247bb0f065..3bd49e8ec5 100644
--- a/package_manager/tests/src/Unit/InstalledPackagesListTest.php
+++ b/package_manager/tests/src/Unit/InstalledPackagesListTest.php
@@ -139,6 +139,14 @@ class InstalledPackagesListTest extends UnitTestCase {
     $list = new InstalledPackagesList($data);
     $this->assertArrayNotHasKey('drupal/not-core', $list->getCorePackages());
 
+    // Tests that we don't get core packages intended for development when
+    // include_dev is set to FALSE.
+    $core_packages_no_dev = $list->getCorePackages(FALSE);
+    $this->assertArrayNotHasKey('drupal/core-dev', $core_packages_no_dev);
+    $this->assertArrayNotHasKey('drupal/core-dev-pinned', $core_packages_no_dev);
+    // We still get other packages as intended.
+    $this->assertArrayHasKey('drupal/core', $core_packages_no_dev);
+
     // If drupal/core-recommended is in the list, it should supersede
     // drupal/core.
     $this->assertArrayHasKey('drupal/core', $list->getCorePackages());
diff --git a/src/Validator/VersionPolicyValidator.php b/src/Validator/VersionPolicyValidator.php
index bbba0577f7..197c8ea7be 100644
--- a/src/Validator/VersionPolicyValidator.php
+++ b/src/Validator/VersionPolicyValidator.php
@@ -277,10 +277,8 @@ final class VersionPolicyValidator implements EventSubscriberInterface {
     $project_root = $this->pathLocator->getProjectRoot();
 
     $core_packages = $this->composerInspector->getInstalledPackagesList($project_root)
-      ->getCorePackages()
+      ->getCorePackages(FALSE)
       ->getArrayCopy();
-    unset($core_packages['drupal/core-dev']);
-    unset($core_packages['drupal/core-dev-pinned']);
 
     return key($core_packages) ?? FALSE;
   }
-- 
GitLab