features-8.x-3.11/modules/features_ui/tests/src/Functional/FeaturesBundleUiTest.php
modules/features_ui/tests/src/Functional/FeaturesBundleUiTest.php
<?php namespace Drupal\Tests\features_ui\Functional; use Drupal\features\FeaturesBundleInterface; use Drupal\Tests\BrowserTestBase; /** * Tests configuring bundles. * * @group features_ui */ class FeaturesBundleUiTest extends BrowserTestBase { /** * The variable. * * @var mixed * @todo Remove the disabled strict config schema checking. */ protected $strictConfigSchema = FALSE; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected static $modules = ['block', 'features', 'features_ui']; /** * The features bundle storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $bundleStorage; /** * {@inheritdoc} */ public function setUp(): void { parent::setUp(); $this->bundleStorage = \Drupal::entityTypeManager()->getStorage('features_bundle'); $admin_user = $this->createUser([ 'administer site configuration', 'export configuration', 'administer modules', ]); $this->drupalLogin($admin_user); $this->drupalPlaceBlock('local_actions_block'); } /** * Get the default features bundle. * * @return \Drupal\features\FeaturesBundleInterface * The features bundle. */ protected function defaultBundle() { return $this->bundleStorage->load(FeaturesBundleInterface::DEFAULT_BUNDLE); } /** * Completely remove a features assignment method from the bundle. * * @param string $method_id * The assignment method ID. */ protected function removeAssignment($method_id) { $bundle = $this->defaultBundle(); $assignments = $bundle->get('assignments'); unset($assignments[$method_id]); $bundle->set('assignments', $assignments); $bundle->save(); } /** * Tests configuring an assignment. */ public function testAssignmentConfigure() { // Check initial values. $settings = $this->defaultBundle()->getAssignmentSettings('exclude'); $this->assertTrue(isset($settings['types']['config']['features_bundle']), 'Excluding features_bundle'); $this->assertFalse(isset($settings['types']['config']['system_simple']), 'Not excluding system_simple'); $this->assertFalse(isset($settings['types']['config']['user_role']), 'Not excluding user_role'); $this->assertTrue($settings['curated'], 'Excluding curated items'); $this->assertTrue($settings['module']['namespace'], 'Excluding by namespace'); // Check initial form. $this->drupalGet('admin/config/development/features/bundle/_exclude/default'); $this->assertSession()->checkboxChecked('edit-types-config-features-bundle'); $this->assertSession()->checkboxNotChecked('edit-types-config-system-simple'); $this->assertSession()->checkboxNotChecked('edit-types-config-user-role'); $this->assertSession()->checkboxChecked('edit-curated'); $this->assertSession()->checkboxChecked('edit-module-namespace'); // Configure the form. $this->submitForm([ 'types[config][system_simple]' => TRUE, 'types[config][user_role]' => FALSE, 'curated' => TRUE, 'module[namespace]' => FALSE, ], 'Save settings'); // Check form results. $this->drupalGet('admin/config/development/features/bundle/_exclude/default'); $this->assertSession()->checkboxChecked('edit-types-config-features-bundle'); $this->assertSession()->checkboxChecked('edit-types-config-system-simple'); $this->assertSession()->checkboxNotChecked('edit-types-config-user-role'); $this->assertSession()->checkboxChecked('edit-curated'); $this->assertSession()->checkboxNotChecked('edit-module-namespace'); // Check final values. $settings = $this->defaultBundle()->getAssignmentSettings('exclude'); $this->assertTrue(isset($settings['types']['config']['features_bundle']), 'Saved, excluding features_bundle'); $this->assertTrue(isset($settings['types']['config']['system_simple']), 'Saved, excluding system_simple'); $this->assertFalse(isset($settings['types']['config']['user_role']), 'Saved, not excluding user_role'); $this->assertTrue($settings['curated'], 'Saved, excluding curated items'); $this->assertFalse($settings['module']['namespace'], 'Saved, not excluding by namespace'); } /** * Tests configuring an assignment that didn't exist before. */ public function testNewAssignmentConfigure() { $this->removeAssignment('exclude'); // Is it really removed? $all_settings = $this->defaultBundle()->getAssignmentSettings(); $this->assertFalse(isset($all_settings['exclude']), 'Exclude plugin is unknown'); // Can still get settings. $settings = $this->defaultBundle()->getAssignmentSettings('exclude'); $this->assertFalse($settings['enabled'], 'Disabled exclude plugin'); $this->assertFalse(isset($settings['types']['config']['features_bundle']), 'Not excluding features_bundle'); $this->assertFalse(isset($settings['types']['config']['system_simple']), 'Not excluding system_simple'); $this->assertFalse(isset($settings['types']['config']['user_role']), 'Not excluding user_role'); $this->assertFalse($settings['curated'], 'Not excluding curated items'); $this->assertFalse($settings['module']['namespace'], 'Not excluding by namespace'); // Can we visit the config page with no settings? $this->drupalGet('admin/config/development/features/bundle/_exclude/default'); $this->assertSession()->checkboxNotChecked('edit-types-config-features-bundle'); $this->assertSession()->checkboxNotChecked('edit-types-config-system-simple'); $this->assertSession()->checkboxNotChecked('edit-types-config-user-role'); $this->assertSession()->checkboxNotChecked('edit-curated'); $this->assertSession()->checkboxNotChecked('edit-module-namespace'); // Can we enable the method? $this->drupalGet('admin/config/development/features/bundle'); $this->assertSession()->checkboxNotChecked('edit-enabled-exclude'); $this->submitForm([ 'enabled[exclude]' => TRUE, ], 'Save settings'); $this->assertSession()->checkboxChecked('edit-enabled-exclude'); // Check new settings. $settings = $this->defaultBundle()->getAssignmentSettings('exclude'); $this->assertTrue($settings['enabled'], 'Enabled exclude plugin'); $this->assertFalse(isset($settings['types']['config']['features_bundle']), 'Not excluding features_bundle'); $this->assertFalse(isset($settings['types']['config']['system_simple']), 'Not excluding system_simple'); $this->assertFalse(isset($settings['types']['config']['user_role']), 'Not excluding user_role'); $this->assertFalse($settings['curated'], 'Not excluding curated items'); $this->assertFalse($settings['module']['namespace'], 'Not excluding by namespace'); // Can we run assignment with no settings? $this->drupalGet('admin/config/development/features'); $this->drupalGet('admin/config/development/features/bundle/_exclude/default'); // Can we configure the method? $this->submitForm([ 'types[config][system_simple]' => TRUE, 'types[config][user_role]' => FALSE, 'curated' => TRUE, 'module[namespace]' => FALSE, ], 'Save settings'); // Check form results. $this->drupalGet('admin/config/development/features/bundle/_exclude/default'); $this->assertSession()->checkboxNotChecked('edit-types-config-features-bundle'); $this->assertSession()->checkboxChecked('edit-types-config-system-simple'); $this->assertSession()->checkboxNotChecked('edit-types-config-user-role'); $this->assertSession()->checkboxChecked('edit-curated'); $this->assertSession()->checkboxNotChecked('edit-module-namespace'); // Check final values. $settings = $this->defaultBundle()->getAssignmentSettings('exclude'); $this->assertFalse(isset($settings['types']['config']['features_bundle']), 'Saved, not excluding features_bundle'); $this->assertTrue(isset($settings['types']['config']['system_simple']), 'Saved, excluding system_simple'); $this->assertFalse(isset($settings['types']['config']['user_role']), 'Saved, not excluding user_role'); $this->assertTrue($settings['curated'], 'Saved, excluding curated items'); $this->assertFalse($settings['module']['namespace'], 'Saved, not excluding by namespace'); } }