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 }
|