From 3263c8cbabada8bf53957a2be772ea4d5f717fb2 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Wed, 19 Jun 2019 16:21:24 +0100
Subject: [PATCH] Issue #3059545 by alexpott, Lendude, tstoeckler, Mile23,
 neclimdul, vijaycs85, Morbus Iff: Improve
 \Drupal\KernelTests\Config\DefaultConfigTest to install all optional
 configuration

---
 .../optional/views.view.block_content.yml     |  6 ++-
 .../config/optional/views.view.comment.yml    | 16 ++++++
 .../optional/views.view.comments_recent.yml   |  4 ++
 .../optional/views.view.moderated_content.yml | 20 ++++++--
 .../config/optional/views.view.watchdog.yml   |  4 +-
 .../file/config/optional/views.view.files.yml |  6 +--
 .../optional/tour.tour.language-add.yml       |  4 +-
 .../optional/tour.tour.language-edit.yml      |  4 +-
 .../config/optional/tour.tour.language.yml    |  4 +-
 .../config/optional/views.view.media.yml      |  2 +
 .../config/optional/views.view.frontpage.yml  |  6 +++
 .../config/optional/views.view.glossary.yml   |  6 +--
 .../optional/views.view.taxonomy_term.yml     |  4 ++
 .../src/Functional/DemoUmamiProfileTest.php   |  1 +
 .../ConfigAfterInstallerTestBase.php          |  1 +
 .../KernelTests/Config/DefaultConfigTest.php  | 50 +++++++++++--------
 16 files changed, 102 insertions(+), 36 deletions(-)

diff --git a/core/modules/block_content/config/optional/views.view.block_content.yml b/core/modules/block_content/config/optional/views.view.block_content.yml
index cc4ec3a2bdba..7161758f8c66 100644
--- a/core/modules/block_content/config/optional/views.view.block_content.yml
+++ b/core/modules/block_content/config/optional/views.view.block_content.yml
@@ -458,6 +458,8 @@ display:
             multiple: false
             remember_roles:
               authenticated: authenticated
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -510,7 +512,7 @@ display:
         - url
         - url.query_args
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
   page_1:
     display_plugin: page
@@ -535,5 +537,5 @@ display:
         - url
         - url.query_args
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
diff --git a/core/modules/comment/config/optional/views.view.comment.yml b/core/modules/comment/config/optional/views.view.comment.yml
index 4dbfb660227f..4d8bc52d6281 100644
--- a/core/modules/comment/config/optional/views.view.comment.yml
+++ b/core/modules/comment/config/optional/views.view.comment.yml
@@ -650,6 +650,8 @@ display:
             multiple: false
             remember_roles:
               authenticated: authenticated
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -690,6 +692,8 @@ display:
               authenticated: authenticated
               anonymous: '0'
               administrator: '0'
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -730,6 +734,8 @@ display:
               authenticated: authenticated
               anonymous: '0'
               administrator: '0'
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -772,6 +778,8 @@ display:
               anonymous: '0'
               administrator: '0'
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -923,6 +931,8 @@ display:
             multiple: false
             remember_roles:
               authenticated: authenticated
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -963,6 +973,8 @@ display:
               authenticated: authenticated
               anonymous: '0'
               administrator: '0'
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -1003,6 +1015,8 @@ display:
               authenticated: authenticated
               anonymous: '0'
               administrator: '0'
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -1045,6 +1059,8 @@ display:
               anonymous: '0'
               administrator: '0'
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
diff --git a/core/modules/comment/config/optional/views.view.comments_recent.yml b/core/modules/comment/config/optional/views.view.comments_recent.yml
index 28613e696384..b46458547117 100644
--- a/core/modules/comment/config/optional/views.view.comments_recent.yml
+++ b/core/modules/comment/config/optional/views.view.comments_recent.yml
@@ -176,6 +176,8 @@ display:
           plugin_id: boolean
           expose:
             operator: ''
+            operator_limit_selection: false
+            operator_list: {  }
           group: 1
           entity_type: comment
           entity_field: status
@@ -188,6 +190,8 @@ display:
           plugin_id: boolean
           expose:
             operator: ''
+            operator_limit_selection: false
+            operator_list: {  }
           group: 1
           entity_type: node
           entity_field: status
diff --git a/core/modules/content_moderation/config/optional/views.view.moderated_content.yml b/core/modules/content_moderation/config/optional/views.view.moderated_content.yml
index 32d65af6f2b2..a1dc53c92067 100644
--- a/core/modules/content_moderation/config/optional/views.view.moderated_content.yml
+++ b/core/modules/content_moderation/config/optional/views.view.moderated_content.yml
@@ -1,8 +1,10 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - content_moderation
   module:
-    - content_moderation
     - node
     - user
 id: moderated_content
@@ -524,6 +526,8 @@ display:
             multiple: false
             remember_roles:
               authenticated: authenticated
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -563,6 +567,8 @@ display:
               authenticated: authenticated
               anonymous: '0'
               administrator: '0'
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -604,6 +610,8 @@ display:
               anonymous: '0'
               administrator: '0'
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -647,6 +655,8 @@ display:
               anonymous: '0'
               administrator: '0'
             reduce: true
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -687,6 +697,8 @@ display:
               anonymous: '0'
               administrator: '0'
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -727,6 +739,8 @@ display:
             remember_roles:
               authenticated: authenticated
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -787,7 +801,7 @@ display:
         groups:
           1: AND
     cache_metadata:
-      max-age: 0
+      max-age: -1
       contexts:
         - 'languages:language_content'
         - 'languages:language_interface'
@@ -806,7 +820,7 @@ display:
       path: admin/content/moderated
       display_description: ''
     cache_metadata:
-      max-age: 0
+      max-age: -1
       contexts:
         - 'languages:language_content'
         - 'languages:language_interface'
diff --git a/core/modules/dblog/config/optional/views.view.watchdog.yml b/core/modules/dblog/config/optional/views.view.watchdog.yml
index 5781250e0dbb..78a6d034f88c 100644
--- a/core/modules/dblog/config/optional/views.view.watchdog.yml
+++ b/core/modules/dblog/config/optional/views.view.watchdog.yml
@@ -684,7 +684,7 @@ display:
           1: AND
       css_class: admin-dblog
     cache_metadata:
-      max-age: 0
+      max-age: -1
       contexts:
         - 'languages:language_content'
         - 'languages:language_interface'
@@ -701,7 +701,7 @@ display:
       display_extenders: {  }
       path: admin/reports/dblog
     cache_metadata:
-      max-age: 0
+      max-age: -1
       contexts:
         - 'languages:language_content'
         - 'languages:language_interface'
diff --git a/core/modules/file/config/optional/views.view.files.yml b/core/modules/file/config/optional/views.view.files.yml
index 74ad00c31ada..9be3d376576e 100644
--- a/core/modules/file/config/optional/views.view.files.yml
+++ b/core/modules/file/config/optional/views.view.files.yml
@@ -729,7 +729,7 @@ display:
         - url
         - url.query_args
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
   page_1:
     display_plugin: page
@@ -766,7 +766,7 @@ display:
         - url
         - url.query_args
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
   page_2:
     display_plugin: page
@@ -1123,5 +1123,5 @@ display:
         - url
         - url.query_args
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
diff --git a/core/modules/language/config/optional/tour.tour.language-add.yml b/core/modules/language/config/optional/tour.tour.language-add.yml
index 9f428b46d543..5d5c373097e8 100644
--- a/core/modules/language/config/optional/tour.tour.language-add.yml
+++ b/core/modules/language/config/optional/tour.tour.language-add.yml
@@ -1,6 +1,8 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  module:
+    - language
 id: language-add
 label: 'Adding languages'
 module: language
diff --git a/core/modules/language/config/optional/tour.tour.language-edit.yml b/core/modules/language/config/optional/tour.tour.language-edit.yml
index 454fef1b939c..8e63cdb8f2bd 100644
--- a/core/modules/language/config/optional/tour.tour.language-edit.yml
+++ b/core/modules/language/config/optional/tour.tour.language-edit.yml
@@ -1,6 +1,8 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  module:
+    - language
 id: language-edit
 label: 'Editing languages'
 module: language
diff --git a/core/modules/language/config/optional/tour.tour.language.yml b/core/modules/language/config/optional/tour.tour.language.yml
index 7ab79d303c43..2d310cbf4fe6 100644
--- a/core/modules/language/config/optional/tour.tour.language.yml
+++ b/core/modules/language/config/optional/tour.tour.language.yml
@@ -1,6 +1,8 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  module:
+    - language
 id: language
 label: Language
 module: language
diff --git a/core/modules/media/config/optional/views.view.media.yml b/core/modules/media/config/optional/views.view.media.yml
index d8ae38618449..bae4791bb77f 100644
--- a/core/modules/media/config/optional/views.view.media.yml
+++ b/core/modules/media/config/optional/views.view.media.yml
@@ -1,6 +1,8 @@
 langcode: en
 status: true
 dependencies:
+  config:
+    - image.style.thumbnail
   module:
     - image
     - media
diff --git a/core/modules/node/config/optional/views.view.frontpage.yml b/core/modules/node/config/optional/views.view.frontpage.yml
index 49d6f95459d0..8a0adf2604a6 100644
--- a/core/modules/node/config/optional/views.view.frontpage.yml
+++ b/core/modules/node/config/optional/views.view.frontpage.yml
@@ -85,6 +85,8 @@ display:
               authenticated: authenticated
             required: false
             use_operator: false
+            operator_limit_selection: false
+            operator_list: {  }
           exposed: false
           field: promote
           group: 1
@@ -112,6 +114,8 @@ display:
         status:
           expose:
             operator: ''
+            operator_limit_selection: false
+            operator_list: {  }
           field: status
           group: 1
           id: status
@@ -145,6 +149,8 @@ display:
             remember_roles:
               authenticated: authenticated
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
diff --git a/core/modules/node/config/optional/views.view.glossary.yml b/core/modules/node/config/optional/views.view.glossary.yml
index 6ad92fc243a6..2c95017f812a 100644
--- a/core/modules/node/config/optional/views.view.glossary.yml
+++ b/core/modules/node/config/optional/views.view.glossary.yml
@@ -359,7 +359,7 @@ display:
         - url.query_args
         - 'user.node_grants:view'
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
   attachment_1:
     id: attachment_1
@@ -427,7 +427,7 @@ display:
         - url.query_args
         - 'user.node_grants:view'
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
   page_1:
     id: page_1
@@ -454,5 +454,5 @@ display:
         - url.query_args
         - 'user.node_grants:view'
         - user.permissions
-      max-age: 0
+      max-age: -1
       tags: {  }
diff --git a/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml b/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml
index 95b54a8a5524..6907c2124b0e 100644
--- a/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml
+++ b/core/modules/taxonomy/config/optional/views.view.taxonomy_term.yml
@@ -159,6 +159,8 @@ display:
             remember_roles:
               authenticated: authenticated
             reduce: false
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
@@ -197,6 +199,8 @@ display:
             multiple: false
             remember_roles:
               authenticated: authenticated
+            operator_limit_selection: false
+            operator_list: {  }
           is_grouped: false
           group_info:
             label: ''
diff --git a/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php b/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php
index df76829fadd7..12d913312425 100644
--- a/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php
+++ b/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php
@@ -83,6 +83,7 @@ protected function assertDefaultConfig(StorageInterface $default_config_storage,
           // FunctionalTestSetupTrait::installParameters().
           'system.site' => ['uuid:', 'name:', 'mail:'],
         ]);
+        $this->pass("$config_name has no differences");
       }
       else {
         $this->fail("$config_name has not been installed");
diff --git a/core/tests/Drupal/FunctionalTests/Installer/ConfigAfterInstallerTestBase.php b/core/tests/Drupal/FunctionalTests/Installer/ConfigAfterInstallerTestBase.php
index 98bcb05aed9d..32b290603039 100644
--- a/core/tests/Drupal/FunctionalTests/Installer/ConfigAfterInstallerTestBase.php
+++ b/core/tests/Drupal/FunctionalTests/Installer/ConfigAfterInstallerTestBase.php
@@ -34,6 +34,7 @@ protected function assertInstalledConfig(array $skipped_config) {
       $result = $config_manager->diff($profile_config_storage, $active_config_storage, $config_name);
       try {
         $this->assertConfigDiff($result, $config_name, $skipped_config);
+        $this->pass("$config_name has no differences");
       }
       catch (\Exception $e) {
         $this->fail($e->getMessage());
diff --git a/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php b/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
index ffa6239442e8..91bec84427c0 100644
--- a/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
+++ b/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\KernelTests\Config;
 
+use Drupal\Core\Config\Entity\ConfigEntityDependency;
 use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Config\InstallStorage;
 use Drupal\Core\Config\StorageInterface;
@@ -52,42 +53,42 @@ class DefaultConfigTest extends KernelTestBase {
   public function testModuleConfig($module) {
     // System and user are required in order to be able to install some of the
     // other modules. Therefore they are put into static::$modules, which though
-    // doesn't install config files, so import those config files explicitly.
-    switch ($module) {
-      case 'system':
-      case 'user':
-        $this->installConfig([$module]);
-        break;
-    }
+    // doesn't install config files, so import those config files explicitly. Do
+    // this for all tests in case optional configuration depends on it.
+    $this->installConfig(['system', 'user']);
 
     $module_path = drupal_get_path('module', $module) . '/';
 
     /** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */
     $module_installer = $this->container->get('module_installer');
 
+    $module_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_INSTALL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
+    $optional_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_OPTIONAL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
+
+    if (empty($optional_config_storage->listAll()) && empty($module_config_storage->listAll())) {
+      $this->markTestSkipped("$module has no configuration to test");
+    }
+
     // Work out any additional modules and themes that need installing to create
     // an optional config.
-    $optional_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_OPTIONAL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
     $modules_to_install = [$module];
     $themes_to_install = [];
     foreach ($optional_config_storage->listAll() as $config_name) {
       $data = $optional_config_storage->read($config_name);
-      if (isset($data['dependencies']['module'])) {
-        $modules_to_install = array_merge($modules_to_install, $data['dependencies']['module']);
-      }
-      if (isset($data['dependencies']['theme'])) {
-        $themes_to_install = array_merge($themes_to_install, $data['dependencies']['theme']);
-      }
+      $dependency = new ConfigEntityDependency($config_name, $data);
+      $modules_to_install = array_merge($modules_to_install, $dependency->getDependencies('module'));
+      $themes_to_install = array_merge($themes_to_install, $dependency->getDependencies('theme'));
     }
-    $module_installer->install(array_unique($modules_to_install));
-    $this->container->get('theme_installer')->install($themes_to_install);
+    // Remove core because that cannot be installed.
+    $modules_to_install = array_diff(array_unique($modules_to_install), ['core']);
+    $module_installer->install($modules_to_install);
+    $this->container->get('theme_installer')->install(array_unique($themes_to_install));
 
     // Test configuration in the module's config/install directory.
-    $module_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_INSTALL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
-    $this->doTestsOnConfigStorage($module_config_storage);
+    $this->doTestsOnConfigStorage($module_config_storage, $module);
 
     // Test configuration in the module's config/optional directory.
-    $this->doTestsOnConfigStorage($optional_config_storage);
+    $this->doTestsOnConfigStorage($optional_config_storage, $module);
   }
 
   /**
@@ -96,7 +97,7 @@ public function testModuleConfig($module) {
    * @param \Drupal\Core\Config\StorageInterface $default_config_storage
    *   The default config storage to test.
    */
-  protected function doTestsOnConfigStorage(StorageInterface $default_config_storage) {
+  protected function doTestsOnConfigStorage(StorageInterface $default_config_storage, $module) {
     /** @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */
     $config_manager = $this->container->get('config.manager');
 
@@ -118,6 +119,15 @@ protected function doTestsOnConfigStorage(StorageInterface $default_config_stora
         }
         $result = $config_manager->diff($default_config_storage, $active_config_storage, $config_name);
         $this->assertConfigDiff($result, $config_name, static::$skippedConfig);
+        // The method call above will throw an exception if the configuration is
+        // different.
+        $this->pass("$config_name has no differences");
+      }
+      else {
+        $info = $this->container->get('extension.list.module')->getExtensionInfo($module);
+        if (!isset($info['package']) || $info['package'] !== 'Core (Experimental)') {
+          $this->fail("$config_name provided by $module does not exist after installing all dependencies");
+        }
       }
     }
   }
-- 
GitLab