Chris@0: fieldTestData->field_name[suffix] Chris@0: * - $this->fieldTestData->field_storage[suffix] Chris@0: * - $this->fieldTestData->field_storage_uuid[suffix] Chris@0: * - $this->fieldTestData->field[suffix] Chris@0: * - $this->fieldTestData->field_definition[suffix] Chris@0: * Chris@0: * @see \Drupal\field\Tests\FieldUnitTestBase::createFieldWithStorage() Chris@0: * Chris@0: * @var \ArrayObject Chris@0: */ Chris@0: protected $fieldTestData; Chris@0: Chris@0: /** Chris@0: * Set the default field storage backend for fields created during tests. Chris@0: */ Chris@0: protected function setUp() { Chris@0: parent::setUp(); Chris@0: Chris@0: $this->fieldTestData = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); Chris@0: Chris@0: $this->installEntitySchema('entity_test'); Chris@0: $this->installEntitySchema('user'); Chris@0: $this->installSchema('system', ['sequences', 'key_value']); Chris@0: Chris@0: // Set default storage backend and configure the theme system. Chris@0: $this->installConfig(['field', 'system']); Chris@0: Chris@0: // Create user 1. Chris@0: $storage = \Drupal::entityManager()->getStorage('user'); Chris@0: $storage Chris@0: ->create([ Chris@0: 'uid' => 1, Chris@0: 'name' => 'entity-test', Chris@0: 'mail' => 'entity@localhost', Chris@0: 'status' => TRUE, Chris@0: ]) Chris@0: ->save(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Create a field and an associated field storage. Chris@0: * Chris@0: * @param string $suffix Chris@0: * (optional) A string that should only contain characters that are valid in Chris@0: * PHP variable names as well. Chris@0: * @param string $entity_type Chris@0: * (optional) The entity type on which the field should be created. Chris@0: * Defaults to "entity_test". Chris@0: * @param string $bundle Chris@0: * (optional) The entity type on which the field should be created. Chris@0: * Defaults to the default bundle of the entity type. Chris@0: */ Chris@0: protected function createFieldWithStorage($suffix = '', $entity_type = 'entity_test', $bundle = NULL) { Chris@0: if (empty($bundle)) { Chris@0: $bundle = $entity_type; Chris@0: } Chris@0: $field_name = 'field_name' . $suffix; Chris@0: $field_storage = 'field_storage' . $suffix; Chris@0: $field_storage_uuid = 'field_storage_uuid' . $suffix; Chris@0: $field = 'field' . $suffix; Chris@0: $field_definition = 'field_definition' . $suffix; Chris@0: Chris@17: $this->fieldTestData->$field_name = mb_strtolower($this->randomMachineName() . '_field_name' . $suffix); Chris@0: $this->fieldTestData->$field_storage = FieldStorageConfig::create([ Chris@0: 'field_name' => $this->fieldTestData->$field_name, Chris@0: 'entity_type' => $entity_type, Chris@0: 'type' => 'test_field', Chris@0: 'cardinality' => 4, Chris@0: ]); Chris@0: $this->fieldTestData->$field_storage->save(); Chris@0: $this->fieldTestData->$field_storage_uuid = $this->fieldTestData->$field_storage->uuid(); Chris@0: $this->fieldTestData->$field_definition = [ Chris@0: 'field_storage' => $this->fieldTestData->$field_storage, Chris@0: 'bundle' => $bundle, Chris@0: 'label' => $this->randomMachineName() . '_label', Chris@0: 'description' => $this->randomMachineName() . '_description', Chris@0: 'settings' => [ Chris@0: 'test_field_setting' => $this->randomMachineName(), Chris@0: ], Chris@0: ]; Chris@0: $this->fieldTestData->$field = FieldConfig::create($this->fieldTestData->$field_definition); Chris@0: $this->fieldTestData->$field->save(); Chris@0: Chris@0: entity_get_form_display($entity_type, $bundle, 'default') Chris@0: ->setComponent($this->fieldTestData->$field_name, [ Chris@0: 'type' => 'test_field_widget', Chris@0: 'settings' => [ Chris@0: 'test_widget_setting' => $this->randomMachineName(), Chris@17: ], Chris@0: ]) Chris@0: ->save(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Saves and reloads an entity. Chris@0: * Chris@0: * @param \Drupal\Core\Entity\EntityInterface $entity Chris@0: * The entity to save. Chris@0: * Chris@0: * @return \Drupal\Core\Entity\EntityInterface Chris@0: * The entity, freshly reloaded from storage. Chris@0: */ Chris@0: protected function entitySaveReload(EntityInterface $entity) { Chris@0: $entity->save(); Chris@0: $controller = $this->container->get('entity.manager')->getStorage($entity->getEntityTypeId()); Chris@0: $controller->resetCache(); Chris@0: return $controller->load($entity->id()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Validate and save entity. Fail if violations are found. Chris@0: * Chris@0: * @param \Drupal\Core\Entity\EntityInterface $entity Chris@0: * The entity to save. Chris@0: */ Chris@0: protected function entityValidateAndSave(EntityInterface $entity) { Chris@0: $violations = $entity->validate(); Chris@0: if ($violations->count()) { Chris@0: $this->fail($violations); Chris@0: } Chris@0: else { Chris@0: $entity->save(); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Generate random values for a field_test field. Chris@0: * Chris@0: * @param $cardinality Chris@0: * Number of values to generate. Chris@0: * @return Chris@0: * An array of random values, in the format expected for field values. Chris@0: */ Chris@0: protected function _generateTestFieldValues($cardinality) { Chris@0: $values = []; Chris@0: for ($i = 0; $i < $cardinality; $i++) { Chris@0: // field_test fields treat 0 as 'empty value'. Chris@0: $values[$i]['value'] = mt_rand(1, 127); Chris@0: } Chris@0: return $values; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Assert that a field has the expected values in an entity. Chris@0: * Chris@0: * This function only checks a single column in the field values. Chris@0: * Chris@12: * @param \Drupal\Core\Entity\EntityInterface $entity Chris@0: * The entity to test. Chris@0: * @param $field_name Chris@0: * The name of the field to test Chris@0: * @param $expected_values Chris@0: * The array of expected values. Chris@0: * @param $langcode Chris@0: * (Optional) The language code for the values. Defaults to Chris@0: * \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_SPECIFIED. Chris@0: * @param $column Chris@0: * (Optional) The name of the column to check. Defaults to 'value'. Chris@0: */ Chris@0: protected function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') { Chris@0: // Re-load the entity to make sure we have the latest changes. Chris@0: $storage = $this->container->get('entity_type.manager') Chris@0: ->getStorage($entity->getEntityTypeId()); Chris@0: $storage->resetCache([$entity->id()]); Chris@0: $e = $storage->load($this->entityId); Chris@0: Chris@0: $field = $values = $e->getTranslation($langcode)->$field_name; Chris@0: // Filter out empty values so that they don't mess with the assertions. Chris@0: $field->filterEmptyItems(); Chris@0: $values = $field->getValue(); Chris@0: $this->assertEqual(count($values), count($expected_values), 'Expected number of values were saved.'); Chris@0: foreach ($expected_values as $key => $value) { Chris@0: $this->assertEqual($values[$key][$column], $value, format_string('Value @value was saved correctly.', ['@value' => $value])); Chris@0: } Chris@0: } Chris@0: Chris@0: }