public function FeaturesAssignTest::testAssignExclude in Features 8.3
Same name and namespace in other branches
- 8.4 tests/src/Kernel/FeaturesAssignTest.php \Drupal\Tests\features\Kernel\FeaturesAssignTest::testAssignExclude()
@covers Drupal\features\Plugin\FeaturesAssignment\FeaturesAssignmentExclude
File
- tests/
src/ Kernel/ FeaturesAssignTest.php, line 318
Class
- FeaturesAssignTest
- The Feature Assign test.
Namespace
Drupal\Tests\features\KernelCode
public function testAssignExclude() {
$method_id = 'exclude';
// Enable the method.
$this
->enableAssignmentMethod($method_id);
// Also enable Packages and Core plugins.
$this
->enableAssignmentMethod('packages', FALSE);
$this
->enableAssignmentMethod('core', FALSE);
// Apply the bundle.
$this->bundle = $this->assigner
->loadBundle('test_mybundle');
$this->assigner
->applyAssignmentMethod('packages');
$packages = $this->featuresManager
->getPackages();
$this
->assertNotEmpty($packages[self::TEST_INSTALLED_PACKAGE], 'Expected package not created.');
// 1. When Required is set to True, config should stay with the module
// First, test with "Required" set to True.
$packages[self::TEST_INSTALLED_PACKAGE]
->setRequired(TRUE);
$this->featuresManager
->setPackages($packages);
$this->assigner
->applyAssignmentMethod('exclude');
$this->assigner
->applyAssignmentMethod('core');
$this->assigner
->applyAssignmentMethod('existing');
$packages = $this->featuresManager
->getPackages();
$expected_config_items = [
'core.date_format.long',
];
$this
->assertEquals($expected_config_items, $packages[self::TEST_INSTALLED_PACKAGE]
->getConfig(), 'Expected configuration items not present in existing test_core package.');
// 2. When Required is set to False, config still stays with module
// Because the module is installed.
$this
->reset();
$this->bundle = $this->assigner
->loadBundle('test_mybundle');
$this->assigner
->applyAssignmentMethod('packages');
$packages = $this->featuresManager
->getPackages();
$this
->assertNotEmpty($packages[self::TEST_INSTALLED_PACKAGE], 'Expected test_mybundle_core package not created.');
// Set "Required" set to False.
$packages[self::TEST_INSTALLED_PACKAGE]
->setRequired(FALSE);
$this->featuresManager
->setPackages($packages);
$this->assigner
->applyAssignmentMethod('exclude');
$this->assigner
->applyAssignmentMethod('core');
$this->assigner
->applyAssignmentMethod('existing');
$packages = $this->featuresManager
->getPackages();
$this
->assertFalse(array_key_exists('core', $packages), 'Core package should not be created.');
$expected_config_items = [
'core.date_format.long',
];
$this
->assertEquals($expected_config_items, $packages[self::TEST_INSTALLED_PACKAGE]
->getConfig(), 'Expected configuration items not present in existing test_core package.');
// 3. When Required is set to False and module is NOT installed,
// Config stays with module if it doesn't match the current namespace
$this
->reset();
// Load a bundle different from TEST_UNINSTALLED_PACKAGE.
$this->bundle = $this->assigner
->loadBundle('test_mybundle');
$this->assigner
->applyAssignmentMethod('packages');
$packages = $this->featuresManager
->getPackages();
$this
->assertNotEmpty($packages[self::TEST_UNINSTALLED_PACKAGE], 'Expected test_feature package not created.');
$this
->assertNotEmpty($packages[self::TEST_INSTALLED_PACKAGE], 'Expected test_mybundle_core package not created.');
// Mark package as uninstalled, set "Required" set to False.
$packages[self::TEST_UNINSTALLED_PACKAGE]
->setRequired(FALSE);
$this->featuresManager
->setPackages($packages);
$this->assigner
->applyAssignmentMethod('exclude');
$this->assigner
->applyAssignmentMethod('core');
$this->assigner
->applyAssignmentMethod('existing');
$packages = $this->featuresManager
->getPackages();
$this
->assertFalse(array_key_exists('core', $packages), 'Core package should not be created.');
$expected_config_items = [
'core.date_format.short',
'system.cron',
];
$this
->assertEquals($expected_config_items, $packages[self::TEST_UNINSTALLED_PACKAGE]
->getConfig(), 'Expected configuration items not present in existing test_feature package.');
// 4. When Required is set to False and module is NOT installed,
// Config is reassigned within modules that match the namespace.
$this
->reset();
// Load the bundle used in TEST_UNINSTALLED_PACKAGE.
$this->bundle = $this->assigner
->loadBundle('test');
if (empty($this->bundle) || $this->bundle
->isDefault()) {
// Since we uninstalled the test_feature, we probably need to create
// an empty "test" bundle.
$this->bundle = $this->assigner
->createBundleFromDefault('test');
}
$this->assigner
->applyAssignmentMethod('packages');
$packages = $this->featuresManager
->getPackages();
$this
->assertNotEmpty($packages[self::TEST_UNINSTALLED_PACKAGE], 'Expected test_feature package not created.');
// Set "Required" set to False.
$packages[self::TEST_UNINSTALLED_PACKAGE]
->setRequired(FALSE);
$this->featuresManager
->setPackages($packages);
$this->assigner
->applyAssignmentMethod('exclude');
$this->assigner
->applyAssignmentMethod('core');
$this->assigner
->applyAssignmentMethod('existing');
$packages = $this->featuresManager
->getPackages();
$this
->assertNotEmpty($packages['core'], 'Expected Core package not created.');
// Ensure "core" package is not confused with "test_core" module
// Since we are in a bundle.
$this
->assertEmpty($packages['core']
->getExtension(), 'Autogenerated core package should not have an extension');
// Core config should be reassigned from TEST_UNINSTALLED_PACKAGE into Core.
$expected_config_items = [
'system.cron',
];
$this
->assertEquals($expected_config_items, $packages[self::TEST_UNINSTALLED_PACKAGE]
->getConfig(), 'Expected configuration items not present in existing test_feature package.');
$expected_config_items = [
'core.date_format.short',
];
$this
->assertEquals($expected_config_items, $packages['core']
->getConfig(), 'Expected configuration items not present in core package.');
}