FeaturesBundleUITest.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace Drupal\features_ui\Tests;
  3. use Drupal\Core\Entity\EntityStorageInterface;
  4. use Drupal\features\FeaturesBundleInterface;
  5. use Drupal\simpletest\WebTestBase;
  6. use Drupal\Core\StringTranslation\StringTranslationTrait;
  7. /**
  8. * Tests configuring bundles.
  9. *
  10. * @group features_ui
  11. */
  12. class FeaturesBundleUITest extends WebTestBase {
  13. use StringTranslationTrait;
  14. /**
  15. * @todo Remove the disabled strict config schema checking.
  16. */
  17. protected $strictConfigSchema = FALSE;
  18. /**
  19. * {@inheritdoc}
  20. */
  21. public static $modules = ['block', 'features', 'features_ui'];
  22. /**
  23. * The features bundle storage.
  24. *
  25. * @var \Drupal\Core\Entity\EntityStorageInterface $bundleStorage
  26. */
  27. protected $bundleStorage;
  28. /**
  29. * {@inheritdoc}
  30. */
  31. public function setUp() {
  32. parent::setUp();
  33. $this->bundleStorage = \Drupal::entityTypeManager()->getStorage('features_bundle');
  34. $admin_user = $this->createUser(['administer site configuration', 'export configuration', 'administer modules']);
  35. $this->drupalLogin($admin_user);
  36. $this->drupalPlaceBlock('local_actions_block');
  37. }
  38. /**
  39. * Get the default features bundle.
  40. *
  41. * @return \Drupal\features\FeaturesBundleInterface
  42. * The features bundle.
  43. */
  44. protected function defaultBundle() {
  45. return $this->bundleStorage->load('default');
  46. }
  47. /**
  48. * Completely remove a features assignment method from the bundle.
  49. *
  50. * @param string $method_id
  51. * The assignment method ID.
  52. */
  53. protected function removeAssignment($method_id) {
  54. $bundle = $this->defaultBundle();
  55. $assignments = $bundle->get('assignments');
  56. unset($assignments[$method_id]);
  57. $bundle->set('assignments', $assignments);
  58. $bundle->save();
  59. }
  60. /**
  61. * Tests configuring an assignment.
  62. */
  63. public function testAssignmentConfigure() {
  64. // Check initial values.
  65. $settings = $this->defaultBundle()->getAssignmentSettings('exclude');
  66. $this->assertTrue(isset($settings['types']['config']['features_bundle']), 'Excluding features_bundle');
  67. $this->assertFalse(isset($settings['types']['config']['system_simple']), 'Not excluding system_simple');
  68. $this->assertFalse(isset($settings['types']['config']['user_role']), 'Not excluding user_role');
  69. $this->assertTrue($settings['curated'], 'Excluding curated items');
  70. $this->assertTrue($settings['module']['namespace'], 'Excluding by namespace');
  71. // Check initial form.
  72. $this->drupalGet('admin/config/development/features/bundle/_exclude/default');
  73. $this->assertFieldChecked('edit-types-config-features-bundle', 'features_bundle is checked');
  74. $this->assertNoFieldChecked('edit-types-config-system-simple', 'system_simple is not checked');
  75. $this->assertNoFieldChecked('edit-types-config-user-role', 'user_role is not checked');
  76. $this->assertFieldChecked('edit-curated', 'curated is checked');
  77. $this->assertFieldChecked('edit-module-namespace', 'namespace is checked');
  78. // Configure the form.
  79. $this->drupalPostForm(NULL, [
  80. 'types[config][system_simple]' => TRUE,
  81. 'types[config][user_role]' => FALSE,
  82. 'curated' => TRUE,
  83. 'module[namespace]' => FALSE,
  84. ], $this->t('Save settings'));
  85. // Check form results.
  86. $this->drupalGet('admin/config/development/features/bundle/_exclude/default');
  87. $this->assertFieldChecked('edit-types-config-features-bundle', 'Saved, features_bundle is checked');
  88. $this->assertFieldChecked('edit-types-config-system-simple', 'Saved, system_simple is checked');
  89. $this->assertNoFieldChecked('edit-types-config-user-role', 'Saved, user_role is not checked');
  90. $this->assertFieldChecked('edit-curated', 'Saved, curated is checked');
  91. $this->assertNoFieldChecked('edit-module-namespace', 'Saved, namespace is not checked');
  92. // Check final values.
  93. $settings = $this->defaultBundle()->getAssignmentSettings('exclude');
  94. $this->assertTrue(isset($settings['types']['config']['features_bundle']), 'Saved, excluding features_bundle');
  95. $this->assertTrue(isset($settings['types']['config']['system_simple']), 'Saved, excluding system_simple');
  96. $this->assertFalse(isset($settings['types']['config']['user_role']), 'Saved, not excluding user_role');
  97. $this->assertTrue($settings['curated'], 'Saved, excluding curated items');
  98. $this->assertFalse($settings['module']['namespace'], 'Saved, not excluding by namespace');
  99. }
  100. /**
  101. * Tests configuring an assignment that didn't exist before.
  102. */
  103. public function testNewAssignmentConfigure() {
  104. $this->removeAssignment('exclude');
  105. // Is it really removed?
  106. $all_settings = $this->defaultBundle()->getAssignmentSettings();
  107. $this->assertFalse(isset($all_settings['exclude']), 'Exclude plugin is unknown');
  108. // Can still get settings.
  109. $settings = $this->defaultBundle()->getAssignmentSettings('exclude');
  110. $this->assertFalse($settings['enabled'], 'Disabled exclude plugin');
  111. $this->assertFalse(isset($settings['types']['config']['features_bundle']), 'Not excluding features_bundle');
  112. $this->assertFalse(isset($settings['types']['config']['system_simple']), 'Not excluding system_simple');
  113. $this->assertFalse(isset($settings['types']['config']['user_role']), 'Not excluding user_role');
  114. $this->assertFalse($settings['curated'], 'Not excluding curated items');
  115. $this->assertFalse($settings['module']['namespace'], 'Not excluding by namespace');
  116. // Can we visit the config page with no settings?
  117. $this->drupalGet('admin/config/development/features/bundle/_exclude/default');
  118. $this->assertNoFieldChecked('edit-types-config-features-bundle', 'features_bundle is not checked');
  119. $this->assertNoFieldChecked('edit-types-config-system-simple', 'system_simple is not checked');
  120. $this->assertNoFieldChecked('edit-types-config-user-role', 'user_role is not checked');
  121. $this->assertNoFieldChecked('edit-curated', 'curated is not checked');
  122. $this->assertNoFieldChecked('edit-module-namespace', 'namespace is not checked');
  123. // Can we enable the method?
  124. $this->drupalGet('admin/config/development/features/bundle');
  125. $this->assertNoFieldChecked('edit-enabled-exclude', 'Exclude disabled');
  126. $this->drupalPostForm(NULL, [
  127. 'enabled[exclude]' => TRUE,
  128. ], $this->t('Save settings'));
  129. $this->assertFieldChecked('edit-enabled-exclude', 'Exclude enabled');
  130. // Check new settings.
  131. $settings = $this->defaultBundle()->getAssignmentSettings('exclude');
  132. $this->assertTrue($settings['enabled'], 'Enabled exclude plugin');
  133. $this->assertFalse(isset($settings['types']['config']['features_bundle']), 'Not excluding features_bundle');
  134. $this->assertFalse(isset($settings['types']['config']['system_simple']), 'Not excluding system_simple');
  135. $this->assertFalse(isset($settings['types']['config']['user_role']), 'Not excluding user_role');
  136. $this->assertFalse($settings['curated'], 'Not excluding curated items');
  137. $this->assertFalse($settings['module']['namespace'], 'Not excluding by namespace');
  138. // Can we run assignment with no settings?
  139. $this->drupalGet('admin/config/development/features');
  140. // Can we configure the method?
  141. $this->drupalPostForm('admin/config/development/features/bundle/_exclude/default', [
  142. 'types[config][system_simple]' => TRUE,
  143. 'types[config][user_role]' => FALSE,
  144. 'curated' => TRUE,
  145. 'module[namespace]' => FALSE,
  146. ], $this->t('Save settings'));
  147. // Check form results.
  148. $this->drupalGet('admin/config/development/features/bundle/_exclude/default');
  149. $this->assertNoFieldChecked('edit-types-config-features-bundle', 'Saved, features_bundle is not checked');
  150. $this->assertFieldChecked('edit-types-config-system-simple', 'Saved, system_simple is checked');
  151. $this->assertNoFieldChecked('edit-types-config-user-role', 'Saved, user_role is not checked');
  152. $this->assertFieldChecked('edit-curated', 'Saved, curated is checked');
  153. $this->assertNoFieldChecked('edit-module-namespace', 'Saved, namespace is not checked');
  154. // Check final values.
  155. $settings = $this->defaultBundle()->getAssignmentSettings('exclude');
  156. $this->assertFalse(isset($settings['types']['config']['features_bundle']), 'Saved, not excluding features_bundle');
  157. $this->assertTrue(isset($settings['types']['config']['system_simple']), 'Saved, excluding system_simple');
  158. $this->assertFalse(isset($settings['types']['config']['user_role']), 'Saved, not excluding user_role');
  159. $this->assertTrue($settings['curated'], 'Saved, excluding curated items');
  160. $this->assertFalse($settings['module']['namespace'], 'Saved, not excluding by namespace');
  161. }
  162. }