From af28878ae9784bf8e8384a0315bedec63060206b Mon Sep 17 00:00:00 2001
From: Roderik Muit <roderik.muit@drunomics.com>
Date: Tue, 21 Jan 2025 12:21:01 +0100
Subject: [PATCH 1/2] Replace config read-write code with better equivalent; no
 functional changes.

---
 .../CustomElementsRenderMarkupTest.php        | 36 +++++++++----------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/tests/src/Functional/CustomElementsRenderMarkupTest.php b/tests/src/Functional/CustomElementsRenderMarkupTest.php
index b2815cf..898925d 100644
--- a/tests/src/Functional/CustomElementsRenderMarkupTest.php
+++ b/tests/src/Functional/CustomElementsRenderMarkupTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\custom_elements\Functional;
 
+use Drupal\Core\Config\FileStorage;
 use Drupal\Tests\BrowserTestBase;
 use Drupal\custom_elements\CustomElement;
 use Drupal\custom_elements\CustomElementGeneratorTrait;
@@ -9,7 +10,6 @@ use Drupal\file\Entity\File;
 use Drupal\media\Entity\Media;
 use Drupal\node\Entity\Node;
 use Drupal\paragraphs\Entity\Paragraph;
-use Symfony\Component\Yaml\Parser;
 
 /**
  * Test rendering custom elements into markup.
@@ -126,28 +126,24 @@ class CustomElementsRenderMarkupTest extends BrowserTestBase {
   private function importPartialThunderConfig(array $exclude_bundles) {
     $config_dir = dirname(dirname(dirname(__DIR__)))
       . '/modules/custom_elements_thunder/config/install';
-    // Avoid warnings when opendir does not have the permissions to open a
-    // directory.
-    if ($handle = opendir($config_dir)) {
-      while (FALSE !== ($filename = readdir($handle))) {
-        if (str_ends_with($filename, '.yml') && !array_filter(
+    $source = new FileStorage($config_dir);
+    // Get config names that do not contain any of $exclude_bundles.
+    $config_names = array_filter(
+      $source->listAll(),
+      function ($config_name) use ($exclude_bundles) {
+        // Return boolean indicating config name contains any of $exclude.
+        return !array_filter(
           $exclude_bundles,
-          function ($bundle) use ($filename) {
-            return str_contains($filename, $bundle);
+          function ($bundle) use ($config_name) {
+            return str_contains($config_name, $bundle);
           }
-        )) {
-          $config_name = substr($filename, 0, strlen($filename) - 4);
-          $data = file_get_contents("$config_dir/$filename");
-          $parser = new Parser();
-          $data = $parser->parse($data);
-          $config = \Drupal::configFactory()->getEditable($config_name);
-          foreach ($data as $data_key => $value) {
-            $config->set($data_key, $value);
-          }
-          $config->save();
-        }
+        );
       }
-      closedir($handle);
+    );
+
+    foreach ($config_names as $config_name) {
+      \Drupal::service('config.storage')->write($config_name,
+        $source->read($config_name));
     }
   }
 
-- 
GitLab


From dd3bff75fd6eb11241fb5bae5f51017a9f4d62df Mon Sep 17 00:00:00 2001
From: Roderik Muit <roderik.muit@drunomics.com>
Date: Tue, 21 Jan 2025 12:27:20 +0100
Subject: [PATCH 2/2] Fix PHP warning in Core query class by creating config
 entity through Entity API (not plain config read/write)

---
 .../Functional/CustomElementsRenderMarkupTest.php   | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/tests/src/Functional/CustomElementsRenderMarkupTest.php b/tests/src/Functional/CustomElementsRenderMarkupTest.php
index 898925d..2f5e6ab 100644
--- a/tests/src/Functional/CustomElementsRenderMarkupTest.php
+++ b/tests/src/Functional/CustomElementsRenderMarkupTest.php
@@ -142,8 +142,17 @@ class CustomElementsRenderMarkupTest extends BrowserTestBase {
     );
 
     foreach ($config_names as $config_name) {
-      \Drupal::service('config.storage')->write($config_name,
-        $source->read($config_name));
+      // Use the entity API to create config entities.
+      $entity_type_id = \Drupal::service('config.manager')->getEntityTypeIdByName($config_name);
+      if ($entity_type_id) {
+        \Drupal::entityTypeManager()
+          ->getStorage($entity_type_id)
+          ->create($source->read($config_name))
+          ->save();
+      }
+      else {
+        \Drupal::service('config.storage')->write($config_name, $source->read($config_name));
+      }
     }
   }
 
-- 
GitLab