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 {
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
);
}
/**
......
......@@ -20,7 +20,10 @@ class ConfigSingleImportExportTest extends WebTestBase {
public static $modules = [
'block',
'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() {
......
<?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