Mercurial > hg > isophonics-drupal-site
comparison core/modules/field/tests/src/Kernel/FieldDataCountTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\field\Kernel; | |
4 | |
5 use Drupal\Core\Entity\Sql\SqlContentEntityStorage; | |
6 use Drupal\entity_test\Entity\EntityTest; | |
7 use Drupal\field\Entity\FieldConfig; | |
8 use Drupal\field\Entity\FieldStorageConfig; | |
9 | |
10 /** | |
11 * Tests counting field data records and the hasData() method on | |
12 * FieldStorageConfig entity. | |
13 * | |
14 * @group field | |
15 * @see \Drupal\Core\Entity\FieldableEntityStorageInterface::countFieldData() | |
16 * @see \Drupal\field\Entity\FieldStorageConfig::hasData() | |
17 */ | |
18 class FieldDataCountTest extends FieldKernelTestBase { | |
19 | |
20 /** | |
21 * @var \Drupal\Core\Entity\DynamicallyFieldableEntityStorageInterface | |
22 */ | |
23 protected $storage; | |
24 | |
25 /** | |
26 * @var \Drupal\Core\Entity\DynamicallyFieldableEntityStorageInterface | |
27 */ | |
28 protected $storageRev; | |
29 | |
30 /** | |
31 * @var \Drupal\Core\Entity\DynamicallyFieldableEntityStorageInterface | |
32 */ | |
33 protected $storageUser; | |
34 | |
35 /** | |
36 * {@inheritdoc} | |
37 */ | |
38 protected function setUp() { | |
39 parent::setUp(); | |
40 $this->installEntitySchema('entity_test_rev'); | |
41 $this->storage = \Drupal::entityManager()->getStorage('entity_test'); | |
42 $this->storageRev = \Drupal::entityManager()->getStorage('entity_test_rev'); | |
43 $this->storageUser = \Drupal::entityManager()->getStorage('user'); | |
44 } | |
45 | |
46 /** | |
47 * Tests entityCount() and hadData() methods. | |
48 */ | |
49 public function testEntityCountAndHasData() { | |
50 // Create a field with a cardinality of 2 to show that we are counting | |
51 // entities and not rows in a table. | |
52 /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */ | |
53 $field_storage = FieldStorageConfig::create([ | |
54 'field_name' => 'field_int', | |
55 'entity_type' => 'entity_test', | |
56 'type' => 'integer', | |
57 'cardinality' => 2, | |
58 ]); | |
59 $field_storage->save(); | |
60 FieldConfig::create([ | |
61 'field_storage' => $field_storage, | |
62 'bundle' => 'entity_test', | |
63 ])->save(); | |
64 | |
65 $this->assertIdentical($field_storage->hasdata(), FALSE, 'There are no entities with field data.'); | |
66 $this->assertIdentical($this->storage->countFieldData($field_storage), 0, 'There are 0 entities with field data.'); | |
67 | |
68 // Create 1 entity without the field. | |
69 $entity = EntityTest::create(); | |
70 $entity->name->value = $this->randomMachineName(); | |
71 $entity->save(); | |
72 | |
73 $this->assertIdentical($field_storage->hasdata(), FALSE, 'There are no entities with field data.'); | |
74 $this->assertIdentical($this->storage->countFieldData($field_storage), 0, 'There are 0 entities with field data.'); | |
75 | |
76 // Create 12 entities to ensure that the purging works as expected. | |
77 for ($i = 0; $i < 12; $i++) { | |
78 $entity = EntityTest::create(); | |
79 $entity->field_int[] = mt_rand(1, 99); | |
80 $entity->field_int[] = mt_rand(1, 99); | |
81 $entity->name[] = $this->randomMachineName(); | |
82 $entity->save(); | |
83 } | |
84 | |
85 $storage = \Drupal::entityManager()->getStorage('entity_test'); | |
86 if ($storage instanceof SqlContentEntityStorage) { | |
87 // Count the actual number of rows in the field table. | |
88 $table_mapping = $storage->getTableMapping(); | |
89 $field_table_name = $table_mapping->getDedicatedDataTableName($field_storage); | |
90 $result = db_select($field_table_name, 't') | |
91 ->fields('t') | |
92 ->countQuery() | |
93 ->execute() | |
94 ->fetchField(); | |
95 $this->assertEqual($result, 24, 'The field table has 24 rows.'); | |
96 } | |
97 | |
98 $this->assertIdentical($field_storage->hasdata(), TRUE, 'There are entities with field data.'); | |
99 $this->assertEqual($this->storage->countFieldData($field_storage), 12, 'There are 12 entities with field data.'); | |
100 | |
101 // Ensure the methods work on deleted fields. | |
102 $field_storage->delete(); | |
103 $this->assertIdentical($field_storage->hasdata(), TRUE, 'There are entities with deleted field data.'); | |
104 $this->assertEqual($this->storage->countFieldData($field_storage), 12, 'There are 12 entities with deleted field data.'); | |
105 | |
106 field_purge_batch(6); | |
107 $this->assertIdentical($field_storage->hasdata(), TRUE, 'There are entities with deleted field data.'); | |
108 $this->assertEqual($this->storage->countFieldData($field_storage), 6, 'There are 6 entities with deleted field data.'); | |
109 | |
110 $entity_type = 'entity_test_rev'; | |
111 $this->createFieldWithStorage('_2', $entity_type); | |
112 | |
113 $entity_init = $this->container->get('entity_type.manager') | |
114 ->getStorage($entity_type) | |
115 ->create(['type' => $entity_type]); | |
116 $cardinality = $this->fieldTestData->field_storage_2->getCardinality(); | |
117 | |
118 $this->assertIdentical($this->fieldTestData->field_storage_2->hasData(), FALSE, 'There are no entities with field data.'); | |
119 $this->assertIdentical($this->storageRev->countFieldData($this->fieldTestData->field_storage_2), 0, 'There are 0 entities with field data.'); | |
120 | |
121 // Create 1 entity with the field. | |
122 $entity = clone($entity_init); | |
123 $values = $this->_generateTestFieldValues($this->fieldTestData->field_storage_2->getCardinality()); | |
124 $entity->{$this->fieldTestData->field_name_2} = $values; | |
125 $entity->setNewRevision(); | |
126 $entity->save(); | |
127 $first_revision = $entity->getRevisionId(); | |
128 | |
129 $this->assertIdentical($this->fieldTestData->field_storage_2->hasData(), TRUE, 'There are entities with field data.'); | |
130 $this->assertIdentical($this->storageRev->countFieldData($this->fieldTestData->field_storage_2), 1, 'There is 1 entity with field data.'); | |
131 | |
132 $entity->{$this->fieldTestData->field_name_2} = []; | |
133 $entity->setNewRevision(); | |
134 $entity->save(); | |
135 | |
136 $this->assertIdentical($this->fieldTestData->field_storage_2->hasData(), TRUE, 'There are entities with field data.'); | |
137 | |
138 $storage = $this->container->get('entity.manager')->getStorage($entity_type); | |
139 $entity = $storage->loadRevision($first_revision); | |
140 $this->assertEqual(count($entity->{$this->fieldTestData->field_name_2}), $cardinality, format_string('Revision %revision_id: expected number of values.', ['%revision_id' => $first_revision])); | |
141 } | |
142 | |
143 /** | |
144 * Verify that we can count a table that contains an entry with index 0. | |
145 */ | |
146 public function testCountWithIndex0() { | |
147 // Create a field that will require dedicated storage. | |
148 /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */ | |
149 $field_storage = FieldStorageConfig::create([ | |
150 'field_name' => 'field_int', | |
151 'entity_type' => 'user', | |
152 'type' => 'integer', | |
153 'cardinality' => 2, | |
154 ]); | |
155 $field_storage->save(); | |
156 FieldConfig::create([ | |
157 'field_storage' => $field_storage, | |
158 'bundle' => 'user', | |
159 ])->save(); | |
160 | |
161 // Create an entry for the anonymous user, who has user ID 0. | |
162 $user = $this->storageUser | |
163 ->create([ | |
164 'uid' => 0, | |
165 'name' => 'anonymous', | |
166 'mail' => NULL, | |
167 'status' => FALSE, | |
168 'field_int' => 42, | |
169 ]); | |
170 $user->save(); | |
171 | |
172 // Test shared table storage. | |
173 $storage = $user->getFieldDefinition('name')->getFieldStorageDefinition(); | |
174 $this->assertIdentical(TRUE, $this->storageUser->countFieldData($storage, TRUE)); | |
175 | |
176 // Test dedicated table storage. | |
177 $storage = $user->getFieldDefinition('field_int')->getFieldStorageDefinition(); | |
178 $this->assertIdentical(TRUE, $this->storageUser->countFieldData($storage, TRUE)); | |
179 } | |
180 | |
181 } |