View source
<?php
namespace Drupal\Tests\field\Kernel;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\KernelTests\KernelTestBase;
abstract class FieldKernelTestBase extends KernelTestBase {
public static $modules = [
'user',
'system',
'field',
'text',
'entity_test',
'field_test',
];
protected $fieldTestData;
protected function setUp() {
parent::setUp();
$this->fieldTestData = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS);
$this
->installEntitySchema('entity_test');
$this
->installEntitySchema('user');
$this
->installSchema('system', [
'sequences',
'key_value',
]);
$this
->installConfig([
'field',
'system',
]);
$storage = \Drupal::entityTypeManager()
->getStorage('user');
$storage
->create([
'uid' => 1,
'name' => 'entity-test',
'mail' => 'entity@localhost',
'status' => TRUE,
])
->save();
}
protected function createFieldWithStorage($suffix = '', $entity_type = 'entity_test', $bundle = NULL) {
if (empty($bundle)) {
$bundle = $entity_type;
}
$field_name = 'field_name' . $suffix;
$field_storage = 'field_storage' . $suffix;
$field_storage_uuid = 'field_storage_uuid' . $suffix;
$field = 'field' . $suffix;
$field_definition = 'field_definition' . $suffix;
$this->fieldTestData->{$field_name} = mb_strtolower($this
->randomMachineName() . '_field_name' . $suffix);
$this->fieldTestData->{$field_storage} = FieldStorageConfig::create([
'field_name' => $this->fieldTestData->{$field_name},
'entity_type' => $entity_type,
'type' => 'test_field',
'cardinality' => 4,
]);
$this->fieldTestData->{$field_storage}
->save();
$this->fieldTestData->{$field_storage_uuid} = $this->fieldTestData->{$field_storage}
->uuid();
$this->fieldTestData->{$field_definition} = [
'field_storage' => $this->fieldTestData->{$field_storage},
'bundle' => $bundle,
'label' => $this
->randomMachineName() . '_label',
'description' => $this
->randomMachineName() . '_description',
'settings' => [
'test_field_setting' => $this
->randomMachineName(),
],
];
$this->fieldTestData->{$field} = FieldConfig::create($this->fieldTestData->{$field_definition});
$this->fieldTestData->{$field}
->save();
\Drupal::service('entity_display.repository')
->getFormDisplay($entity_type, $bundle)
->setComponent($this->fieldTestData->{$field_name}, [
'type' => 'test_field_widget',
'settings' => [
'test_widget_setting' => $this
->randomMachineName(),
],
])
->save();
}
protected function entitySaveReload(EntityInterface $entity) {
$entity
->save();
$controller = $this->container
->get('entity_type.manager')
->getStorage($entity
->getEntityTypeId());
$controller
->resetCache();
return $controller
->load($entity
->id());
}
protected function entityValidateAndSave(EntityInterface $entity) {
$violations = $entity
->validate();
if ($violations
->count()) {
$this
->fail($violations);
}
else {
$entity
->save();
}
}
protected function _generateTestFieldValues($cardinality) {
$values = [];
for ($i = 0; $i < $cardinality; $i++) {
$values[$i]['value'] = mt_rand(1, 127);
}
return $values;
}
protected function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') {
$storage = $this->container
->get('entity_type.manager')
->getStorage($entity
->getEntityTypeId());
$storage
->resetCache([
$entity
->id(),
]);
$e = $storage
->load($this->entityId);
$field = $values = $e
->getTranslation($langcode)->{$field_name};
$field
->filterEmptyItems();
$values = $field
->getValue();
$this
->assertEqual(count($values), count($expected_values), 'Expected number of values were saved.');
foreach ($expected_values as $key => $value) {
$this
->assertEqual($values[$key][$column], $value, new FormattableMarkup('Value @value was saved correctly.', [
'@value' => $value,
]));
}
}
}