public function ConfigDependencyTest::testDependencyManagement in Drupal 9
Same name and namespace in other branches
- 8 core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php \Drupal\KernelTests\Core\Config\ConfigDependencyTest::testDependencyManagement()
Tests creating dependencies on configuration entities.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Config/ ConfigDependencyTest.php, line 43
Class
- ConfigDependencyTest
- Tests for configuration dependencies.
Namespace
Drupal\KernelTests\Core\ConfigCode
public function testDependencyManagement() {
/** @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */
$config_manager = \Drupal::service('config.manager');
$storage = $this->container
->get('entity_type.manager')
->getStorage('config_test');
// Test dependencies between modules.
$entity1 = $storage
->create([
'id' => 'entity1',
'dependencies' => [
'enforced' => [
'module' => [
'node',
],
],
],
]);
$entity1
->save();
$dependents = $config_manager
->findConfigEntityDependencies('module', [
'node',
]);
$this
->assertTrue(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 has a dependency on the Node module.');
$dependents = $config_manager
->findConfigEntityDependencies('module', [
'config_test',
]);
$this
->assertTrue(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 has a dependency on the config_test module.');
$dependents = $config_manager
->findConfigEntityDependencies('module', [
'views',
]);
$this
->assertFalse(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 does not have a dependency on the Views module.');
// Ensure that the provider of the config entity is not actually written to
// the dependencies array.
$raw_config = $this
->config('config_test.dynamic.entity1');
$root_module_dependencies = $raw_config
->get('dependencies.module');
$this
->assertTrue(empty($root_module_dependencies), 'Node module is not written to the root dependencies array as it is enforced.');
// Create additional entities to test dependencies on config entities.
$entity2 = $storage
->create([
'id' => 'entity2',
'dependencies' => [
'enforced' => [
'config' => [
$entity1
->getConfigDependencyName(),
],
],
],
]);
$entity2
->save();
$entity3 = $storage
->create([
'id' => 'entity3',
'dependencies' => [
'enforced' => [
'config' => [
$entity2
->getConfigDependencyName(),
],
],
],
]);
$entity3
->save();
$entity4 = $storage
->create([
'id' => 'entity4',
'dependencies' => [
'enforced' => [
'config' => [
$entity3
->getConfigDependencyName(),
],
],
],
]);
$entity4
->save();
// Test getting $entity1's dependencies as configuration dependency objects.
$dependents = $config_manager
->findConfigEntityDependencies('config', [
$entity1
->getConfigDependencyName(),
]);
$this
->assertFalse(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 does not have a dependency on itself.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 has a dependency on config_test.dynamic.entity1.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on config_test.dynamic.entity1.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 has a dependency on config_test.dynamic.entity1.');
// Test getting $entity2's dependencies as entities.
$dependents = $config_manager
->findConfigEntityDependenciesAsEntities('config', [
$entity2
->getConfigDependencyName(),
]);
$dependent_ids = $this
->getDependentIds($dependents);
$this
->assertNotContains('config_test:entity1', $dependent_ids, 'config_test.dynamic.entity1 does not have a dependency on config_test.dynamic.entity1.');
$this
->assertNotContains('config_test:entity2', $dependent_ids, 'config_test.dynamic.entity2 does not have a dependency on itself.');
$this
->assertContains('config_test:entity3', $dependent_ids, 'config_test.dynamic.entity3 has a dependency on config_test.dynamic.entity2.');
$this
->assertContains('config_test:entity4', $dependent_ids, 'config_test.dynamic.entity4 has a dependency on config_test.dynamic.entity2.');
// Test getting node module's dependencies as configuration dependency
// objects.
$dependents = $config_manager
->findConfigEntityDependencies('module', [
'node',
]);
$this
->assertTrue(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 has a dependency on the Node module.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 has a dependency on the Node module.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on the Node module.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 has a dependency on the Node module.');
// Test getting node module's dependencies as configuration dependency
// objects after making $entity3 also dependent on node module but $entity1
// no longer depend on node module.
$entity1
->setEnforcedDependencies([])
->save();
$entity3
->setEnforcedDependencies([
'module' => [
'node',
],
'config' => [
$entity2
->getConfigDependencyName(),
],
])
->save();
$dependents = $config_manager
->findConfigEntityDependencies('module', [
'node',
]);
$this
->assertFalse(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 does not have a dependency on the Node module.');
$this
->assertFalse(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 does not have a dependency on the Node module.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on the Node module.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 has a dependency on the Node module.');
// Test dependency on a content entity.
$entity_test = EntityTest::create([
'name' => $this
->randomString(),
'type' => 'entity_test',
]);
$entity_test
->save();
$entity2
->setEnforcedDependencies([
'config' => [
$entity1
->getConfigDependencyName(),
],
'content' => [
$entity_test
->getConfigDependencyName(),
],
])
->save();
$dependents = $config_manager
->findConfigEntityDependencies('content', [
$entity_test
->getConfigDependencyName(),
]);
$this
->assertFalse(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 does not have a dependency on the content entity.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 has a dependency on the content entity.');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on the content entity (via entity2).');
$this
->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 has a dependency on the content entity (via entity3).');
// Create a configuration entity of a different type with the same ID as one
// of the entities already created.
$alt_storage = $this->container
->get('entity_type.manager')
->getStorage('config_query_test');
$alt_storage
->create([
'id' => 'entity1',
'dependencies' => [
'enforced' => [
'config' => [
$entity1
->getConfigDependencyName(),
],
],
],
])
->save();
$alt_storage
->create([
'id' => 'entity2',
'dependencies' => [
'enforced' => [
'module' => [
'views',
],
],
],
])
->save();
$dependents = $config_manager
->findConfigEntityDependenciesAsEntities('config', [
$entity1
->getConfigDependencyName(),
]);
$dependent_ids = $this
->getDependentIds($dependents);
$this
->assertNotContains('config_test:entity1', $dependent_ids, 'config_test.dynamic.entity1 does not have a dependency on itself.');
$this
->assertContains('config_test:entity2', $dependent_ids, 'config_test.dynamic.entity2 has a dependency on config_test.dynamic.entity1.');
$this
->assertContains('config_test:entity3', $dependent_ids, 'config_test.dynamic.entity3 has a dependency on config_test.dynamic.entity1.');
$this
->assertContains('config_test:entity4', $dependent_ids, 'config_test.dynamic.entity4 has a dependency on config_test.dynamic.entity1.');
$this
->assertContains('config_query_test:entity1', $dependent_ids, 'config_query_test.dynamic.entity1 has a dependency on config_test.dynamic.entity1.');
$this
->assertNotContains('config_query_test:entity2', $dependent_ids, 'config_query_test.dynamic.entity2 does not have a dependency on config_test.dynamic.entity1.');
$dependents = $config_manager
->findConfigEntityDependenciesAsEntities('module', [
'node',
'views',
]);
$dependent_ids = $this
->getDependentIds($dependents);
$this
->assertNotContains('config_test:entity1', $dependent_ids, 'config_test.dynamic.entity1 does not have a dependency on Views or Node.');
$this
->assertNotContains('config_test:entity2', $dependent_ids, 'config_test.dynamic.entity2 does not have a dependency on Views or Node.');
$this
->assertContains('config_test:entity3', $dependent_ids, 'config_test.dynamic.entity3 has a dependency on Views or Node.');
$this
->assertContains('config_test:entity4', $dependent_ids, 'config_test.dynamic.entity4 has a dependency on Views or Node.');
$this
->assertNotContains('config_query_test:entity1', $dependent_ids, 'config_test.query.entity1 does not have a dependency on Views or Node.');
$this
->assertContains('config_query_test:entity2', $dependent_ids, 'config_test.query.entity2 has a dependency on Views or Node.');
$dependents = $config_manager
->findConfigEntityDependenciesAsEntities('module', [
'config_test',
]);
$dependent_ids = $this
->getDependentIds($dependents);
$this
->assertContains('config_test:entity1', $dependent_ids, 'config_test.dynamic.entity1 has a dependency on config_test module.');
$this
->assertContains('config_test:entity2', $dependent_ids, 'config_test.dynamic.entity2 has a dependency on config_test module.');
$this
->assertContains('config_test:entity3', $dependent_ids, 'config_test.dynamic.entity3 has a dependency on config_test module.');
$this
->assertContains('config_test:entity4', $dependent_ids, 'config_test.dynamic.entity4 has a dependency on config_test module.');
$this
->assertContains('config_query_test:entity1', $dependent_ids, 'config_test.query.entity1 has a dependency on config_test module.');
$this
->assertContains('config_query_test:entity2', $dependent_ids, 'config_test.query.entity2 has a dependency on config_test module.');
// Test the ability to find missing content dependencies.
$missing_dependencies = $config_manager
->findMissingContentDependencies();
$this
->assertEquals([], $missing_dependencies);
$expected = [
$entity_test
->uuid() => [
'entity_type' => 'entity_test',
'bundle' => $entity_test
->bundle(),
'uuid' => $entity_test
->uuid(),
],
];
// Delete the content entity so that is it now missing.
$entity_test
->delete();
$missing_dependencies = $config_manager
->findMissingContentDependencies();
$this
->assertEquals($expected, $missing_dependencies);
// Add a fake missing dependency to ensure multiple missing dependencies
// work.
$entity1
->setEnforcedDependencies([
'content' => [
$entity_test
->getConfigDependencyName(),
'entity_test:bundle:uuid',
],
])
->save();
$expected['uuid'] = [
'entity_type' => 'entity_test',
'bundle' => 'bundle',
'uuid' => 'uuid',
];
$missing_dependencies = $config_manager
->findMissingContentDependencies();
$this
->assertEquals($expected, $missing_dependencies);
}