public function ConfigCRUDTest::testCRUD in Drupal 8
Same name and namespace in other branches
- 9 core/tests/Drupal/KernelTests/Core/Config/ConfigCRUDTest.php \Drupal\KernelTests\Core\Config\ConfigCRUDTest::testCRUD()
Tests CRUD operations.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Config/ ConfigCRUDTest.php, line 41
Class
- ConfigCRUDTest
- Tests CRUD operations on configuration objects.
Namespace
Drupal\KernelTests\Core\ConfigCode
public function testCRUD() {
$event_dispatcher = $this->container
->get('event_dispatcher');
$typed_config_manager = $this->container
->get('config.typed');
$storage = $this->container
->get('config.storage');
$collection_storage = $storage
->createCollection('test_collection');
$config_factory = $this->container
->get('config.factory');
$name = 'config_test.crud';
// Create a new configuration object in the default collection.
$config = $this
->config($name);
$this
->assertIdentical($config
->isNew(), TRUE);
$config
->set('value', 'initial');
$config
->save();
$this
->assertIdentical($config
->isNew(), FALSE);
// Verify the active configuration contains the saved value.
$actual_data = $storage
->read($name);
$this
->assertIdentical($actual_data, [
'value' => 'initial',
]);
// Verify the config factory contains the saved value.
$actual_data = $config_factory
->get($name)
->getRawData();
$this
->assertIdentical($actual_data, [
'value' => 'initial',
]);
// Create another instance of the config object using a custom collection.
$collection_config = new Config($name, $collection_storage, $event_dispatcher, $typed_config_manager);
$collection_config
->set('value', 'overridden');
$collection_config
->save();
// Verify that the config factory still returns the right value, from the
// config instance in the default collection.
$actual_data = $config_factory
->get($name)
->getRawData();
$this
->assertIdentical($actual_data, [
'value' => 'initial',
]);
// Update the configuration object instance.
$config
->set('value', 'instance-update');
$config
->save();
$this
->assertIdentical($config
->isNew(), FALSE);
// Verify the active configuration contains the updated value.
$actual_data = $storage
->read($name);
$this
->assertIdentical($actual_data, [
'value' => 'instance-update',
]);
// Verify a call to $this->config() immediately returns the updated value.
$new_config = $this
->config($name);
$this
->assertIdentical($new_config
->get(), $config
->get());
$this
->assertIdentical($config
->isNew(), FALSE);
// Pollute the config factory static cache.
$config_factory
->getEditable($name);
// Delete the config object that uses a custom collection. This should not
// affect the instance returned by the config factory which depends on the
// default collection storage.
$collection_config
->delete();
$actual_config = $config_factory
->get($name);
$this
->assertIdentical($actual_config
->isNew(), FALSE);
$this
->assertIdentical($actual_config
->getRawData(), [
'value' => 'instance-update',
]);
// Delete the configuration object.
$config
->delete();
// Verify the configuration object is empty.
$this
->assertIdentical($config
->get(), []);
$this
->assertIdentical($config
->isNew(), TRUE);
// Verify that all copies of the configuration has been removed from the
// static cache.
$this
->assertIdentical($config_factory
->getEditable($name)
->isNew(), TRUE);
// Verify the active configuration contains no value.
$actual_data = $storage
->read($name);
$this
->assertIdentical($actual_data, FALSE);
// Verify $this->config() returns no data.
$new_config = $this
->config($name);
$this
->assertIdentical($new_config
->get(), $config
->get());
$this
->assertIdentical($config
->isNew(), TRUE);
// Re-create the configuration object.
$config
->set('value', 're-created');
$config
->save();
$this
->assertIdentical($config
->isNew(), FALSE);
// Verify the active configuration contains the updated value.
$actual_data = $storage
->read($name);
$this
->assertIdentical($actual_data, [
'value' => 're-created',
]);
// Verify a call to $this->config() immediately returns the updated value.
$new_config = $this
->config($name);
$this
->assertIdentical($new_config
->get(), $config
->get());
$this
->assertIdentical($config
->isNew(), FALSE);
// Rename the configuration object.
$new_name = 'config_test.crud_rename';
$this->container
->get('config.factory')
->rename($name, $new_name);
$renamed_config = $this
->config($new_name);
$this
->assertIdentical($renamed_config
->get(), $config
->get());
$this
->assertIdentical($renamed_config
->isNew(), FALSE);
// Ensure that the old configuration object is removed from both the cache
// and the configuration storage.
$config = $this
->config($name);
$this
->assertIdentical($config
->get(), []);
$this
->assertIdentical($config
->isNew(), TRUE);
// Test renaming when config.factory does not have the object in its static
// cache.
$name = 'config_test.crud_rename';
// Pollute the non-overrides static cache.
$config_factory
->getEditable($name);
// Pollute the overrides static cache.
$config = $config_factory
->get($name);
// Rename and ensure that happened properly.
$new_name = 'config_test.crud_rename_no_cache';
$config_factory
->rename($name, $new_name);
$renamed_config = $config_factory
->get($new_name);
$this
->assertIdentical($renamed_config
->get(), $config
->get());
$this
->assertIdentical($renamed_config
->isNew(), FALSE);
// Ensure the overrides static cache has been cleared.
$this
->assertIdentical($config_factory
->get($name)
->isNew(), TRUE);
// Ensure the non-overrides static cache has been cleared.
$this
->assertIdentical($config_factory
->getEditable($name)
->isNew(), TRUE);
// Merge data into the configuration object.
$new_config = $this
->config($new_name);
$expected_values = [
'value' => 'herp',
'404' => 'derp',
];
$new_config
->merge($expected_values);
$new_config
->save();
$this
->assertIdentical($new_config
->get('value'), $expected_values['value']);
$this
->assertIdentical($new_config
->get('404'), $expected_values['404']);
// Test that getMultiple() does not return new config objects that were
// previously accessed with get()
$new_config = $config_factory
->get('non_existing_key');
$this
->assertTrue($new_config
->isNew());
$this
->assertCount(0, $config_factory
->loadMultiple([
'non_existing_key',
]), 'loadMultiple() does not return new objects');
}