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 07629a81a56da26a5ff7fa5d5b75170028e6805e..c4b4d1958c6719ef20c8c9b13acdc8c9726f013b 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 fd01476fe0eda0a12e4d1cd78a8309e6578332ea..eab959ee76f0428ceff06296805524f20d64e6c0 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 9a037d7d60be5061455c82006c8f2ba3358aa15e..36e19239c8065cd977ab433d7da8a3fa96b13dce 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 7f2ca7603d6ef7be1c1171e43d035c2e1210b9a7..071b1b0e53e73e078d004bd22aa5642bb871ec4e 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 db02f162645bc533fd14cc4c5c6b78808ad584a0..6b1427b41c1c0204ba5bddb7d2a820e125c6cf68 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 54bbe12c54344a6ce9256b6399d25f295169c358..4b41bc7d52f1508628764e19f7166064b71981f7 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 34fcc90322a5d26ea47a0fa2fac1b913a2e52d22..b0c48469621e623a79e017616dffd361e94bffc1 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 24c2e1da59efc0d8ab85a528abaa60adefcc4676..33f243e879b25b0e656a6de0d1314681e38b2efb 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 afad4b0ddbcf10c553cfc7228fbf68958876533d..93d8be8dd7466c5db285c1f44ab9372898f27304 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 6933265bad836bd8081df5c1439c5789e94d1c37..d30b97be7fd75fa0a9d33f14b61545ca95c90022 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 ba582793de88c2c2cca84cd43fa7fac69a06c148..f44a92dd8b5066565937c8af5336b85a798d2b36 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 62fc9b09098caf5bad59fb8db1127a2c3e714e05..b7fb3fa8ff66bdb94b5851fc9e22b8a209172688 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 1d7b9f10af06ff7a87cb4baa8e0b53fe154c00a8..68b0b084c57365938bd4aed924a084dbbeeda2c7 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 86b0c27b20a12f027cf3acc4e06ab5915a3187e8..e385fe70366f9328f78e43c4b3a3f2de16ad21dd 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 9026e588169f08d90e962a4714eeb9489483fea2..3b9e548ccd6a5dba9b1affff3cb66616cd37ea1f 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 fc3dbe9c734dbd27286b6015d20692081095c420..ae93a089bea49fac3eea5a5d68af27547cd336a6 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 3b2b1633900477845cea95e67a43e548c8a6f07f..78c072d7271fe8e9556cf88fbccd6072af6b17e4 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 cca7a39fc31fc5eeed1c0ba616fc410514ae8ed7..111a584bfefa801caee9d481c15fe305aeac3608 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 e5db23f204055512883dd301d053cc4b02fdb62e..a78c04424949b0b68377fd07dac44b164490a629 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 4d78fee870c9e4ba2c9cc2e1f67638b58b1a396d..88adc8888a30a6a61084516aa21ffe7a87562d4c 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 6f442d5e6a7a74cc795e3543ceb82b67099c5afc..6dcd5031b6d9d8889c1b09d442c2c1b0bcb592c7 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 6a79fc90f47767995996ed679135469acd60ba5a..13aa0361eefc3e882554e3356729934b5e2add27 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 bf2518a5f52949463c92e605bad499c7adbe6eff..c2b13e9377c7311d565a6a27309ce3d74159be47 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 f19dc60fe7d07754e15f0c8d0468ea85460d62ca..1ebd8e6cebe2ea48a7b559a9aeaebfae6e47dbb9 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 c8960369ff2e69ffe7cac81ba3a9c8772a37714e..94a99c4550d45325137229f9827f0f43cab227d1 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 51cb1c93e9d678fcec5b0d2da8d50256010c12db..b06d658a9f69d6b7b7256df78b81366bd7ec7021 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 9ebbadfcd00f3707e2b4ab82cf6ad4dba89c1539..875df55044791e6bf3e21134edfee65054739f30 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 ca12aca5fe56e76323e771816acba523d265fc45..6b1d6598eeeae83a18b4e46c23575c773e2d8db7 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 0000000000000000000000000000000000000000..a9b5d2e5bac4cdb2ecbd8b483260f4c42608618e
--- /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 a5c39580deed6288f8bbf19b46a45411531546a8..5472e66aa89e97d6e136acd6c5278b12d992fce6 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 090acad3d9c56acf9992803b94d3c2e6b56c7c01..298dcc019d9d22f29cc2520bf0b7b433fdea2ffa 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 149b11da10109edb40ec787f0773d84092efffac..1e8bfcdee0027c59c1c7fae5d0c107025601b3d3 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 18d8499de906378faa77aa9a97e963a493af162a..3482ef879fe2f10eb5bbbff68ff225bcab9f7204 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 d6d3232d8d30e3d33668cdfb760ad18c66d2444f..6382be8cae02527d0bd5d5e722eea23adef69b6a 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']);
+  }
+
 }