features-8.x-3.11/tests/src/Kernel/FeaturesManagerKernelTest.php
tests/src/Kernel/FeaturesManagerKernelTest.php
<?php namespace Drupal\Tests\features\Kernel; use Drupal\KernelTests\KernelTestBase; use Drupal\features\ConfigurationItem; use Drupal\features\Package; /** * The Feature Manager Kernel Test. * * @group features */ class FeaturesManagerKernelTest extends KernelTestBase { /** * {@inheritdoc} */ protected static $modules = ['system', 'config', 'features']; protected $strictConfigSchema = FALSE; /** * The Feature Manager Interface. * * @var \Drupal\features\FeaturesManagerInterface */ protected $featuresManager; /** * The Config Factory. * * @var \Drupal\Core\Config\ConfigFactory */ protected $configFactory; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->installConfig('features'); $this->installConfig('system'); $this->featuresManager = $this->container->get('features.manager'); $this->configFactory = $this->container->get('config.factory'); } /** * @covers \Drupal\features\FeaturesManager::createConfiguration */ public function testCreateConfiguration() { $config_name = 'system_simple.testcreate'; $config = [ 'string_value' => 'example', 'array_value' => [ 'item1' => 'value1', 'item2' => 'value2', ], ]; $this->featuresManager->createConfiguration([$config_name => $config]); $config_item = $this->configFactory->get($config_name); $this->assertEquals($config['string_value'], $config_item->get('string_value'), 'Test config string saved'); $this->assertEquals($config['array_value'], $config_item->get('array_value'), 'Test config array saved'); } /** * @covers \Drupal\features\FeaturesManager::import */ public function testImport() { $packages = [ 'package' => new Package('package', [ 'configOrig' => ['system_simple.example' => 'system_simple.example'], 'dependencies' => [], 'bundle' => '', ]), 'package2' => new Package('package2', [ 'configOrig' => ['system_simple.example2' => 'system_simple.example2'], 'dependencies' => [], 'bundle' => '', ]), 'package3' => new Package('package3', [ 'configOrig' => ['system_simple.example3' => 'system_simple.example3'], 'dependencies' => [], 'bundle' => '', ]), ]; $this->featuresManager->setPackages($packages); // Create all three configuration items. $config_item = new ConfigurationItem('system_simple.example', ['value' => 'example'], ['package' => 'package']); $config_item2 = new ConfigurationItem('system_simple.example2', ['value' => 'example2'], ['package' => 'package2']); $config_item3 = new ConfigurationItem('system_simple.example3', ['value' => 'example3'], ['package' => 'package3']); // Only save example and example3 as currently active config (so example2 will be new). $this->featuresManager->setConfigCollection(['system_simple.example' => $config_item, 'system_simple.example3' => $config_item3]); // Only import example and example2, so example3 is unchanged. $result = $this->featuresManager->import(['package', 'package2']); $this->assertEquals(['system_simple.example'], array_keys($result['package']['updated']), 'Expected config updated'); $this->assertEquals(['system_simple.example2'], array_keys($result['package2']['new']), 'Expected config created'); // Test if config was actually saved to the Factory. // Cannot test for example2 because we didn't save the original config data // and Package2 isn't a real module so config can't be loaded from module. $example = $this->configFactory->get('system_simple.example')->get('value'); $this->assertEquals('example', $example, 'Example config saved'); } }