diff --git a/core/modules/config/src/StorageReplaceDataWrapper.php b/core/modules/config/src/StorageReplaceDataWrapper.php index 58b3b49..91c3a7c 100644 --- a/core/modules/config/src/StorageReplaceDataWrapper.php +++ b/core/modules/config/src/StorageReplaceDataWrapper.php @@ -44,6 +44,7 @@ class StorageReplaceDataWrapper implements StorageInterface { public function __construct(StorageInterface $storage, $collection = StorageInterface::DEFAULT_COLLECTION) { $this->storage = $storage; $this->collection = $collection; + $this->replacementData[$collection] = []; } /** @@ -104,7 +105,7 @@ public function rename($name, $new_name) { $this->replacementData[$this->collection][$new_name] = $this->replacementData[$this->collection][$name]; unset($this->replacementData[$this->collection][$name]); } - return $this->rename($name, $new_name); + return $this->storage->rename($name, $new_name); } /** @@ -164,8 +165,10 @@ public function deleteAll($prefix = '') { * {@inheritdoc} */ public function createCollection($collection) { - $this->collection = $collection; - return $this->storage->createCollection($collection); + return new static( + $this->storage->createCollection($collection), + $collection + ); } /** diff --git a/core/modules/config/src/Tests/ConfigSingleImportExportTest.php b/core/modules/config/src/Tests/ConfigSingleImportExportTest.php index a5b8386..d7f9c7f 100644 --- a/core/modules/config/src/Tests/ConfigSingleImportExportTest.php +++ b/core/modules/config/src/Tests/ConfigSingleImportExportTest.php @@ -20,7 +20,8 @@ class ConfigSingleImportExportTest extends WebTestBase { public static $modules = [ 'block', 'config', - 'config_test' + 'config_test', + 'language', ]; protected function setUp() { diff --git a/core/tests/Drupal/KernelTests/Core/Config/Storage/StorageReplaceDataWrapperTest.php b/core/tests/Drupal/KernelTests/Core/Config/Storage/StorageReplaceDataWrapperTest.php new file mode 100644 index 0000000..389f505 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Config/Storage/StorageReplaceDataWrapperTest.php @@ -0,0 +1,95 @@ +storage = new StorageReplaceDataWrapper($this->container->get('config.storage')); + // ::listAll() verifications require other configuration data to exist. + $this->storage->write('system.performance', array()); + $this->storage->replaceData('system.performance', array('foo' => 'bar')); + } + + /** + * {@inheritdoc} + */ + protected function read($name) { + return $this->storage->read($name); + } + + /** + * {@inheritdoc} + */ + protected function insert($name, $data) { + $this->storage->write($name, $data); + } + + /** + * {@inheritdoc} + */ + protected function update($name, $data) { + $this->storage->write($name, $data); + } + + /** + * {@inheritdoc} + */ + protected function delete($name) { + $this->storage->delete($name); + } + + /** + * {@inheritdoc} + */ + public function testInvalidStorage() { + // No-op as this test does not make sense. + } + + /** + * Tests if new collections created correctly. + * + * @param string $collection + * The collection name. + * + * @dataProvider providerCollections + */ + public function testCreateCollection($collection) { + $expected_collection = $this->storage->getCollectionName(); + + // Create new storage with given and check collection set correctly. + $new_storage = $this->storage->createCollection($collection); + $new_collection = $new_storage->getCollectionName(); + $this->assertSame($collection, $new_collection); + + // Check collection not changed in the current storage instance. + $actual_collection = $this->storage->getCollectionName(); + $this->assertSame($expected_collection, $actual_collection); + } + + /** + * Data provider for testing different collections. + * + * @return array + * Returns an array of collection names. + */ + public function providerCollections() { + return [ + [StorageInterface::DEFAULT_COLLECTION], + ['foo.bar'], + ]; + } + +}