annotate core/modules/config/tests/src/Functional/ConfigDependencyWebTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\config\Functional;
Chris@0 4
Chris@0 5 use Drupal\Core\Config\Entity\ConfigEntityStorage;
Chris@0 6 use Drupal\Tests\BrowserTestBase;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests configuration entities.
Chris@0 10 *
Chris@0 11 * @group config
Chris@0 12 */
Chris@0 13 class ConfigDependencyWebTest extends BrowserTestBase {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * The maximum length for the entity storage used in this test.
Chris@0 17 */
Chris@0 18 const MAX_ID_LENGTH = ConfigEntityStorage::MAX_ID_LENGTH;
Chris@0 19
Chris@0 20 /**
Chris@0 21 * Modules to enable.
Chris@0 22 *
Chris@0 23 * @var array
Chris@0 24 */
Chris@0 25 public static $modules = ['config_test'];
Chris@0 26
Chris@0 27 /**
Chris@0 28 * Tests ConfigDependencyDeleteFormTrait.
Chris@0 29 *
Chris@0 30 * @see \Drupal\Core\Config\Entity\ConfigDependencyDeleteFormTrait
Chris@0 31 */
Chris@0 32 public function testConfigDependencyDeleteFormTrait() {
Chris@0 33 $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
Chris@0 34
Chris@0 35 /** @var \Drupal\Core\Config\Entity\ConfigEntityStorage $storage */
Chris@0 36 $storage = $this->container->get('entity.manager')->getStorage('config_test');
Chris@0 37 // Entity1 will be deleted by the test.
Chris@0 38 $entity1 = $storage->create(
Chris@0 39 [
Chris@0 40 'id' => 'entity1',
Chris@0 41 'label' => 'Entity One',
Chris@0 42 ]
Chris@0 43 );
Chris@0 44 $entity1->save();
Chris@0 45
Chris@0 46 // Entity2 has a dependency on Entity1 but it can be fixed because
Chris@0 47 // \Drupal\config_test\Entity::onDependencyRemoval() will remove the
Chris@0 48 // dependency before config entities are deleted.
Chris@0 49 $entity2 = $storage->create(
Chris@0 50 [
Chris@0 51 'id' => 'entity2',
Chris@0 52 'dependencies' => [
Chris@0 53 'enforced' => [
Chris@0 54 'config' => [$entity1->getConfigDependencyName()],
Chris@0 55 ],
Chris@0 56 ],
Chris@0 57 ]
Chris@0 58 );
Chris@0 59 $entity2->save();
Chris@0 60
Chris@18 61 $this->drupalGet($entity2->toUrl('delete-form'));
Chris@0 62 $this->assertNoText(t('Configuration updates'), 'No configuration updates found.');
Chris@0 63 $this->assertNoText(t('Configuration deletions'), 'No configuration deletes found.');
Chris@18 64 $this->drupalGet($entity1->toUrl('delete-form'));
Chris@0 65 $this->assertNoText(t('Configuration updates'), 'No configuration updates found.');
Chris@0 66 $this->assertText(t('Configuration deletions'), 'Configuration deletions found.');
Chris@0 67 $this->assertText($entity2->id(), 'Entity2 id found');
Chris@18 68 $this->drupalPostForm($entity1->toUrl('delete-form'), [], 'Delete');
Chris@0 69 $storage->resetCache();
Chris@0 70 $this->assertFalse($storage->loadMultiple([$entity1->id(), $entity2->id()]), 'Test entities deleted');
Chris@0 71
Chris@0 72 // Set a more complicated test where dependencies will be fixed.
Chris@0 73 // Entity1 will be deleted by the test.
Chris@0 74 $entity1 = $storage->create(
Chris@0 75 [
Chris@0 76 'id' => 'entity1',
Chris@0 77 ]
Chris@0 78 );
Chris@0 79 $entity1->save();
Chris@0 80 \Drupal::state()->set('config_test.fix_dependencies', [$entity1->getConfigDependencyName()]);
Chris@0 81
Chris@0 82 // Entity2 has a dependency on Entity1 but it can be fixed because
Chris@0 83 // \Drupal\config_test\Entity::onDependencyRemoval() will remove the
Chris@0 84 // dependency before config entities are deleted.
Chris@0 85 $entity2 = $storage->create(
Chris@0 86 [
Chris@0 87 'id' => 'entity2',
Chris@0 88 'label' => 'Entity Two',
Chris@0 89 'dependencies' => [
Chris@0 90 'enforced' => [
Chris@0 91 'config' => [$entity1->getConfigDependencyName()],
Chris@0 92 ],
Chris@0 93 ],
Chris@0 94 ]
Chris@0 95 );
Chris@0 96 $entity2->save();
Chris@0 97
Chris@0 98 // Entity3 will be unchanged because it is dependent on Entity2 which can
Chris@0 99 // be fixed.
Chris@0 100 $entity3 = $storage->create(
Chris@0 101 [
Chris@0 102 'id' => 'entity3',
Chris@0 103 'dependencies' => [
Chris@0 104 'enforced' => [
Chris@0 105 'config' => [$entity2->getConfigDependencyName()],
Chris@0 106 ],
Chris@0 107 ],
Chris@0 108 ]
Chris@0 109 );
Chris@0 110 $entity3->save();
Chris@0 111
Chris@18 112 $this->drupalGet($entity1->toUrl('delete-form'));
Chris@0 113 $this->assertText(t('Configuration updates'), 'Configuration updates found.');
Chris@0 114 $this->assertNoText(t('Configuration deletions'), 'No configuration deletions found.');
Chris@0 115 $this->assertNoText($entity2->id(), 'Entity2 id not found');
Chris@0 116 $this->assertText($entity2->label(), 'Entity2 label not found');
Chris@0 117 $this->assertNoText($entity3->id(), 'Entity3 id not found');
Chris@18 118 $this->drupalPostForm($entity1->toUrl('delete-form'), [], 'Delete');
Chris@0 119 $storage->resetCache();
Chris@0 120 $this->assertFalse($storage->load('entity1'), 'Test entity 1 deleted');
Chris@0 121 $entity2 = $storage->load('entity2');
Chris@0 122 $this->assertTrue($entity2, 'Entity 2 not deleted');
Chris@0 123 $this->assertEqual($entity2->calculateDependencies()->getDependencies()['config'], [], 'Entity 2 dependencies updated to remove dependency on Entity1.');
Chris@0 124 $entity3 = $storage->load('entity3');
Chris@0 125 $this->assertTrue($entity3, 'Entity 3 not deleted');
Chris@0 126 $this->assertEqual($entity3->calculateDependencies()->getDependencies()['config'], [$entity2->getConfigDependencyName()], 'Entity 3 still depends on Entity 2.');
Chris@0 127
Chris@0 128 }
Chris@0 129
Chris@0 130 }