From 767b981019c42402036fec6b78fef1c1c502558a Mon Sep 17 00:00:00 2001
From: Matroskeen <matroskeen@3426249.no-reply.drupal.org>
Date: Sat, 9 Apr 2022 17:00:49 +0000
Subject: [PATCH] Issue #2822737 by Matroskeen, mpriscella, cruno:
 Configuration is not cleaned on uninstall process of example modules (Migrate
 Example, Migrate Example (Advanced), Migrate JSON Example)

---
 .../install/comment.type.node_comments.yml    |  5 +-
 .../field.storage.node.field_comments.yml     |  3 ++
 ....node.field_migrate_example_beer_style.yml |  3 ++
 ...age.node.field_migrate_example_country.yml |  3 ++
 ...orage.node.field_migrate_example_image.yml |  3 ++
 ...ge.user.field_migrate_example_favbeers.yml |  3 ++
 ...rage.user.field_migrate_example_gender.yml |  3 ++
 .../node.type.migrate_example_beer.yml        |  4 ++
 ...vocabulary.migrate_example_beer_styles.yml |  5 +-
 .../tests/src/Kernel/MigrateExampleTest.php   | 18 +++++++
 ....type.migrate_example_advanced_comment.yml |  5 +-
 ...e.node.field_migrate_example_adv_image.yml |  3 ++
 ...ge.node.field_migrate_example_comments.yml |  3 ++
 ....node.field_migrate_example_top_vintag.yml |  3 ++
 ...e.node.field_migrate_example_wine_best.yml |  3 ++
 ....node.field_migrate_example_wine_ratin.yml |  3 ++
 ....node.field_migrate_example_wine_regio.yml |  3 ++
 ...ge.node.field_migrate_example_wine_var.yml |  3 ++
 ...taxonomy_term.field_variety_attributes.yml |  3 ++
 .../node.type.migrate_example_producer.yml    |  5 +-
 .../node.type.migrate_example_wine.yml        |  5 +-
 ...urce.migrate_example_advanced_position.yml |  4 ++
 ...migrate_example_advanced_variety_items.yml |  4 ++
 ....migrate_example_advanced_variety_list.yml |  4 ++
 ...rate_example_advanced_variety_multiple.yml |  4 ++
 ...abulary.migrate_example_wine_best_with.yml |  5 +-
 ...ocabulary.migrate_example_wine_regions.yml |  5 +-
 ...abulary.migrate_example_wine_varieties.yml |  5 +-
 .../Functional/MigrateExampleAdvancedTest.php | 48 +++++++++++++++++++
 .../field.storage.node.field_description.yml  |  3 ++
 .../field.storage.node.field_price.yml        |  3 ++
 .../optional/field.storage.node.field_upc.yml |  3 ++
 .../config/optional/node.type.product.yml     |  3 ++
 .../src/Kernel/MigrateJsonExampleTest.php     | 19 ++++++++
 34 files changed, 191 insertions(+), 8 deletions(-)
 create mode 100644 migrate_example_advanced/tests/src/Functional/MigrateExampleAdvancedTest.php

diff --git a/migrate_example/migrate_example_setup/config/install/comment.type.node_comments.yml b/migrate_example/migrate_example_setup/config/install/comment.type.node_comments.yml
index 07629a81..c4b4d195 100644
--- a/migrate_example/migrate_example_setup/config/install/comment.type.node_comments.yml
+++ b/migrate_example/migrate_example_setup/config/install/comment.type.node_comments.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
 id: node_comments
 label: 'Node comments'
 target_entity_type_id: node
diff --git a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_comments.yml b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_comments.yml
index fd01476f..eab959ee 100644
--- a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_comments.yml
+++ b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_comments.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
   module:
     - comment
     - node
diff --git a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_beer_style.yml b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_beer_style.yml
index 9a037d7d..36e19239 100644
--- a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_beer_style.yml
+++ b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_beer_style.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
   module:
     - node
     - taxonomy
diff --git a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_country.yml b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_country.yml
index 7f2ca760..071b1b0e 100644
--- a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_country.yml
+++ b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_country.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
   module:
     - node
 id: node.field_migrate_example_country
diff --git a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_image.yml b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_image.yml
index db02f162..6b1427b4 100644
--- a/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_image.yml
+++ b/migrate_example/migrate_example_setup/config/install/field.storage.node.field_migrate_example_image.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
   module:
     - file
     - image
diff --git a/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_favbeers.yml b/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_favbeers.yml
index 54bbe12c..4b41bc7d 100644
--- a/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_favbeers.yml
+++ b/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_favbeers.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
   module:
     - node
     - user
diff --git a/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_gender.yml b/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_gender.yml
index 34fcc903..b0c48469 100644
--- a/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_gender.yml
+++ b/migrate_example/migrate_example_setup/config/install/field.storage.user.field_migrate_example_gender.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
   module:
     - user
 id: user.field_migrate_example_gender
diff --git a/migrate_example/migrate_example_setup/config/install/node.type.migrate_example_beer.yml b/migrate_example/migrate_example_setup/config/install/node.type.migrate_example_beer.yml
index 24c2e1da..33f243e8 100644
--- a/migrate_example/migrate_example_setup/config/install/node.type.migrate_example_beer.yml
+++ b/migrate_example/migrate_example_setup/config/install/node.type.migrate_example_beer.yml
@@ -1,5 +1,9 @@
 langcode: en
 status: true
+dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
 name: Beer
 type: migrate_example_beer
 description: 'Beer is what we drink.'
diff --git a/migrate_example/migrate_example_setup/config/install/taxonomy.vocabulary.migrate_example_beer_styles.yml b/migrate_example/migrate_example_setup/config/install/taxonomy.vocabulary.migrate_example_beer_styles.yml
index afad4b0d..93d8be8d 100644
--- a/migrate_example/migrate_example_setup/config/install/taxonomy.vocabulary.migrate_example_beer_styles.yml
+++ b/migrate_example/migrate_example_setup/config/install/taxonomy.vocabulary.migrate_example_beer_styles.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_setup
 name: 'Migrate Example Beer Styles'
 vid: migrate_example_beer_styles
 description: 'Use tags to group beers on similar topics into categories.'
diff --git a/migrate_example/tests/src/Kernel/MigrateExampleTest.php b/migrate_example/tests/src/Kernel/MigrateExampleTest.php
index 6933265b..d30b97be 100755
--- a/migrate_example/tests/src/Kernel/MigrateExampleTest.php
+++ b/migrate_example/tests/src/Kernel/MigrateExampleTest.php
@@ -4,6 +4,7 @@ declare(strict_types = 1);
 
 namespace Drupal\Tests\migrate_example\Kernel;
 
+use Drupal\node\Entity\NodeType;
 use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
 
 /**
@@ -40,6 +41,7 @@ final class MigrateExampleTest extends MigrateDrupalTestBase {
     $this->installSchema('system', ['sequences']);
     $this->installSchema('comment', ['comment_entity_statistics']);
     $this->installSchema('node', ['node_access']);
+    $this->installSchema('user', ['users_data']);
 
     // Install the module via installer to trigger hook_install.
     \Drupal::service('module_installer')->install(['migrate_example_setup']);
@@ -71,4 +73,20 @@ final class MigrateExampleTest extends MigrateDrupalTestBase {
     $this->assertCount(5, $comments);
   }
 
+  /**
+   * Tests whether the module can be uninstalled and installed again.
+   *
+   * Also, checks whether the example configs are removed after uninstall.
+   */
+  public function testModuleCleanup(): void {
+    $test_node_type = 'migrate_example_beer';
+    // Prove that test content type existed before the uninstall process.
+    $this->assertInstanceOf(NodeType::class, NodeType::load($test_node_type));
+    \Drupal::service('module_installer')->uninstall(['migrate_example_setup']);
+    // Make sure the test content type was removed.
+    $this->assertNull(NodeType::load($test_node_type));
+    // Check whether the module can be installed again.
+    \Drupal::service('module_installer')->install(['migrate_example_setup']);
+  }
+
 }
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/comment.type.migrate_example_advanced_comment.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/comment.type.migrate_example_advanced_comment.yml
index ba582793..f44a92dd 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/comment.type.migrate_example_advanced_comment.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/comment.type.migrate_example_advanced_comment.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 id: migrate_example_advanced_comment
 label: 'Node comments'
 target_entity_type_id: node
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_adv_image.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_adv_image.yml
index 62fc9b09..b7fb3fa8 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_adv_image.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_adv_image.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - file
     - image
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_comments.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_comments.yml
index 1d7b9f10..68b0b084 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_comments.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_comments.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - comment
     - node
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_top_vintag.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_top_vintag.yml
index 86b0c27b..e385fe70 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_top_vintag.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_top_vintag.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - node
 id: node.field_migrate_example_top_vintag
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_best.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_best.yml
index 9026e588..3b9e548c 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_best.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_best.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - node
     - taxonomy
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_ratin.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_ratin.yml
index fc3dbe9c..ae93a089 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_ratin.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_ratin.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - node
 id: node.field_migrate_example_wine_ratin
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_regio.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_regio.yml
index 3b2b1633..78c072d7 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_regio.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_regio.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - node
     - taxonomy
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_var.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_var.yml
index cca7a39f..111a584b 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_var.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.node.field_migrate_example_wine_var.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - node
     - taxonomy
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml
index e5db23f2..a78c0442 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
   module:
     - taxonomy
 id: taxonomy_term.field_variety_attributes
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_producer.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_producer.yml
index 4d78fee8..88adc888 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_producer.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_producer.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 name: 'Wine Producer'
 type: migrate_example_producer
 description: 'Wineries, vineyards, and large producers.'
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_wine.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_wine.yml
index 6f442d5e..6dcd5031 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_wine.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/node.type.migrate_example_wine.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 name: Wine
 type: migrate_example_wine
 description: 'Wine is what we drink.'
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_position.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_position.yml
index 6a79fc90..13aa0361 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_position.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_position.yml
@@ -1,3 +1,7 @@
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 id: migrate_example_advanced_position
 plugin_id: 'migrate_example_advanced_position'
 granularity: method
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_items.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_items.yml
index bf2518a5..c2b13e93 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_items.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_items.yml
@@ -1,3 +1,7 @@
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 id: migrate_example_advanced_variety_items
 plugin_id: 'migrate_example_advanced_variety_items'
 granularity: method
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_list.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_list.yml
index f19dc60f..1ebd8e6c 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_list.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_list.yml
@@ -1,3 +1,7 @@
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 id: migrate_example_advanced_variety_list
 plugin_id: 'migrate_example_advanced_variety_list'
 granularity: method
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_multiple.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_multiple.yml
index c8960369..94a99c45 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_multiple.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/rest.resource.migrate_example_advanced_variety_multiple.yml
@@ -1,3 +1,7 @@
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 id: migrate_example_advanced_variety_multiple
 plugin_id: 'migrate_example_advanced_variety_multiple'
 granularity: method
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_best_with.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_best_with.yml
index 51cb1c93..b06d658a 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_best_with.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_best_with.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 name: 'Migrate Example Wine Best With'
 vid: migrate_example_wine_best_with
 description: 'Foods the wine goes best with'
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_regions.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_regions.yml
index 9ebbadfc..875df550 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_regions.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_regions.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 name: 'Migrate Example Wine Regions'
 vid: migrate_example_wine_regions
 description: 'Wine regions'
diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_varieties.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_varieties.yml
index ca12aca5..6b1d6598 100644
--- a/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_varieties.yml
+++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/taxonomy.vocabulary.migrate_example_wine_varieties.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
-dependencies: {  }
+dependencies:
+  enforced:
+    module:
+      - migrate_example_advanced_setup
 name: 'Migrate Example Wine Varieties'
 vid: migrate_example_wine_varieties
 description: 'Wine varieties'
diff --git a/migrate_example_advanced/tests/src/Functional/MigrateExampleAdvancedTest.php b/migrate_example_advanced/tests/src/Functional/MigrateExampleAdvancedTest.php
new file mode 100644
index 00000000..a9b5d2e5
--- /dev/null
+++ b/migrate_example_advanced/tests/src/Functional/MigrateExampleAdvancedTest.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Drupal\Tests\migrate_example_advanced\Functional;
+
+use Drupal\node\Entity\NodeType;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests migrate_example_advanced migrations.
+ *
+ * @group migrate_plus
+ */
+class MigrateExampleAdvancedTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'node',
+    'taxonomy',
+    'path',
+    'migrate_plus',
+    'migrate_example_advanced',
+    'migrate_example_advanced_setup',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * Tests whether the module can be uninstalled and installed again.
+   *
+   * Also, checks whether the example configs are removed after uninstall.
+   */
+  public function testModuleCleanup(): void {
+    $test_node_type = 'migrate_example_producer';
+    // Prove that test content type existed before the uninstall process.
+    $this->assertInstanceOf(NodeType::class, NodeType::load($test_node_type));
+    \Drupal::service('module_installer')->uninstall(['migrate_example_advanced_setup']);
+    // Make sure the test content type was removed.
+    $this->assertNull(NodeType::load($test_node_type));
+    // Check whether test configuration files were removed.
+    \Drupal::service('module_installer')->install(['migrate_example_advanced_setup']);
+  }
+
+}
diff --git a/migrate_json_example/config/optional/field.storage.node.field_description.yml b/migrate_json_example/config/optional/field.storage.node.field_description.yml
index a5c39580..5472e66a 100644
--- a/migrate_json_example/config/optional/field.storage.node.field_description.yml
+++ b/migrate_json_example/config/optional/field.storage.node.field_description.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_json_example
   module:
     - node
 id: node.field_description
diff --git a/migrate_json_example/config/optional/field.storage.node.field_price.yml b/migrate_json_example/config/optional/field.storage.node.field_price.yml
index 090acad3..298dcc01 100644
--- a/migrate_json_example/config/optional/field.storage.node.field_price.yml
+++ b/migrate_json_example/config/optional/field.storage.node.field_price.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_json_example
   module:
     - node
 id: node.field_price
diff --git a/migrate_json_example/config/optional/field.storage.node.field_upc.yml b/migrate_json_example/config/optional/field.storage.node.field_upc.yml
index 149b11da..1e8bfcde 100644
--- a/migrate_json_example/config/optional/field.storage.node.field_upc.yml
+++ b/migrate_json_example/config/optional/field.storage.node.field_upc.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_json_example
   module:
     - node
 id: node.field_upc
diff --git a/migrate_json_example/config/optional/node.type.product.yml b/migrate_json_example/config/optional/node.type.product.yml
index 18d8499d..3482ef87 100644
--- a/migrate_json_example/config/optional/node.type.product.yml
+++ b/migrate_json_example/config/optional/node.type.product.yml
@@ -1,6 +1,9 @@
 langcode: en
 status: true
 dependencies:
+  enforced:
+    module:
+      - migrate_json_example
   module:
     - menu_ui
 third_party_settings:
diff --git a/migrate_json_example/tests/src/Kernel/MigrateJsonExampleTest.php b/migrate_json_example/tests/src/Kernel/MigrateJsonExampleTest.php
index d6d3232d..6382be8c 100755
--- a/migrate_json_example/tests/src/Kernel/MigrateJsonExampleTest.php
+++ b/migrate_json_example/tests/src/Kernel/MigrateJsonExampleTest.php
@@ -4,6 +4,7 @@ declare(strict_types = 1);
 
 namespace Drupal\Tests\migrate_json_example\Kernel;
 
+use Drupal\node\Entity\NodeType;
 use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
 
 /**
@@ -20,6 +21,7 @@ final class MigrateJsonExampleTest extends MigrateDrupalTestBase {
     'node',
     'file',
     'text',
+    'menu_ui',
     'migrate_plus',
   ];
 
@@ -32,6 +34,7 @@ final class MigrateJsonExampleTest extends MigrateDrupalTestBase {
     $this->installConfig(['node']);
     $this->installEntitySchema('file');
     $this->installSchema('file', ['file_usage']);
+    $this->installSchema('user', ['users_data']);
 
     // Install the module via installer to trigger hook_install.
     \Drupal::service('module_installer')->install(['migrate_json_example']);
@@ -49,4 +52,20 @@ final class MigrateJsonExampleTest extends MigrateDrupalTestBase {
     $this->assertCount(2, $node_storage->loadMultiple());
   }
 
+  /**
+   * Tests whether the module can be uninstalled and installed again.
+   *
+   * Also, checks whether the example configs are removed after uninstall.
+   */
+  public function testModuleCleanup(): void {
+    $test_node_type = 'product';
+    // Prove that test content type existed before the uninstall process.
+    $this->assertInstanceOf(NodeType::class, NodeType::load($test_node_type));
+    \Drupal::service('module_installer')->uninstall(['migrate_json_example']);
+    // Make sure the test content type was removed.
+    $this->assertNull(NodeType::load($test_node_type));
+    // Check whether test configuration files were removed.
+    \Drupal::service('module_installer')->install(['migrate_json_example']);
+  }
+
 }
-- 
GitLab