Commit 31dcacad authored by catch's avatar catch

Issue #2740983 by VitalyM, alexpott: Configuration system doesn't allow...

Issue #2740983 by VitalyM, alexpott: Configuration system doesn't allow importing a single item from a non-default collection
parent bba2fda3
...@@ -44,6 +44,7 @@ class StorageReplaceDataWrapper implements StorageInterface { ...@@ -44,6 +44,7 @@ class StorageReplaceDataWrapper implements StorageInterface {
public function __construct(StorageInterface $storage, $collection = StorageInterface::DEFAULT_COLLECTION) { public function __construct(StorageInterface $storage, $collection = StorageInterface::DEFAULT_COLLECTION) {
$this->storage = $storage; $this->storage = $storage;
$this->collection = $collection; $this->collection = $collection;
$this->replacementData[$collection] = [];
} }
/** /**
...@@ -104,7 +105,7 @@ public function rename($name, $new_name) { ...@@ -104,7 +105,7 @@ public function rename($name, $new_name) {
$this->replacementData[$this->collection][$new_name] = $this->replacementData[$this->collection][$name]; $this->replacementData[$this->collection][$new_name] = $this->replacementData[$this->collection][$name];
unset($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 = '') { ...@@ -164,8 +165,10 @@ public function deleteAll($prefix = '') {
* {@inheritdoc} * {@inheritdoc}
*/ */
public function createCollection($collection) { public function createCollection($collection) {
$this->collection = $collection; return new static(
return $this->storage->createCollection($collection); $this->storage->createCollection($collection),
$collection
);
} }
/** /**
......
...@@ -20,7 +20,10 @@ class ConfigSingleImportExportTest extends WebTestBase { ...@@ -20,7 +20,10 @@ class ConfigSingleImportExportTest extends WebTestBase {
public static $modules = [ public static $modules = [
'block', 'block',
'config', 'config',
'config_test' 'config_test',
// Adding language module makes it possible to involve non-default
// (language.xx) collections in import/export operations.
'language',
]; ];
protected function setUp() { protected function setUp() {
......
<?php
namespace Drupal\KernelTests\Core\Config\Storage;
use Drupal\config\StorageReplaceDataWrapper;
use Drupal\Core\Config\StorageInterface;
/**
* Tests StorageReplaceDataWrapper operations.
*
* @group config
*/
class StorageReplaceDataWrapperTest extends ConfigStorageTestBase {
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->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) {
$initial_collection_name = $this->storage->getCollectionName();
// Create new storage with given collection and check it is set correctly.
$new_storage = $this->storage->createCollection($collection);
$this->assertSame($collection, $new_storage->getCollectionName());
// Check collection not changed in the current storage instance.
$this->assertSame($initial_collection_name, $this->storage->getCollectionName());
}
/**
* Data provider for testing different collections.
*
* @return array
* Returns an array of collection names.
*/
public function providerCollections() {
return [
[StorageInterface::DEFAULT_COLLECTION],
['foo.bar'],
];
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment