public function FieldSqlStorageTest::testFieldLoad in Drupal 9
Same name and namespace in other branches
- 8 core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php \Drupal\KernelTests\Core\Entity\FieldSqlStorageTest::testFieldLoad()
- 10 core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php \Drupal\KernelTests\Core\Entity\FieldSqlStorageTest::testFieldLoad()
Tests field loading works correctly by inserting directly in the tables.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Entity/ FieldSqlStorageTest.php, line 105
Class
- FieldSqlStorageTest
- Tests Field SQL Storage .
Namespace
Drupal\KernelTests\Core\EntityCode
public function testFieldLoad() {
$entity_type = $bundle = 'entity_test_rev';
$storage = $this->container
->get('entity_type.manager')
->getStorage($entity_type);
$columns = [
'bundle',
'deleted',
'entity_id',
'revision_id',
'delta',
'langcode',
$this->tableMapping
->getFieldColumnName($this->fieldStorage, 'value'),
];
// Create an entity with four revisions.
$revision_ids = [];
$entity = $this->container
->get('entity_type.manager')
->getStorage($entity_type)
->create();
$entity
->save();
$revision_ids[] = $entity
->getRevisionId();
for ($i = 0; $i < 4; $i++) {
$entity
->setNewRevision();
$entity
->save();
$revision_ids[] = $entity
->getRevisionId();
}
// Generate values and insert them directly in the storage tables.
$values = [];
$connection = Database::getConnection();
$query = $connection
->insert($this->revisionTable)
->fields($columns);
foreach ($revision_ids as $revision_id) {
// Put one value too many.
for ($delta = 0; $delta <= $this->fieldCardinality; $delta++) {
$value = mt_rand(1, 127);
$values[$revision_id][] = $value;
$query
->values([
$bundle,
0,
$entity
->id(),
$revision_id,
$delta,
$entity
->language()
->getId(),
$value,
]);
}
$query
->execute();
}
$query = $connection
->insert($this->table)
->fields($columns);
foreach ($values[$revision_id] as $delta => $value) {
$query
->values([
$bundle,
0,
$entity
->id(),
$revision_id,
$delta,
$entity
->language()
->getId(),
$value,
]);
}
$query
->execute();
// Load every revision and check the values.
foreach ($revision_ids as $revision_id) {
$entity = $storage
->loadRevision($revision_id);
foreach ($values[$revision_id] as $delta => $value) {
if ($delta < $this->fieldCardinality) {
$this
->assertEquals($value, $entity->{$this->fieldName}[$delta]->value);
}
else {
$this
->assertArrayNotHasKey($delta, $entity->{$this->fieldName});
}
}
}
// Load the "current revision" and check the values.
$entity = $storage
->load($entity
->id());
foreach ($values[$revision_id] as $delta => $value) {
if ($delta < $this->fieldCardinality) {
$this
->assertEquals($value, $entity->{$this->fieldName}[$delta]->value);
}
else {
$this
->assertArrayNotHasKey($delta, $entity->{$this->fieldName});
}
}
// Add a translation in an unavailable language code and verify it is not
// loaded.
$unavailable_langcode = 'xx';
$values = [
$bundle,
0,
$entity
->id(),
$entity
->getRevisionId(),
0,
$unavailable_langcode,
mt_rand(1, 127),
];
$connection
->insert($this->table)
->fields($columns)
->values($values)
->execute();
$connection
->insert($this->revisionTable)
->fields($columns)
->values($values)
->execute();
$entity = $storage
->load($entity
->id());
$this
->assertArrayNotHasKey($unavailable_langcode, $entity->{$this->fieldName});
}