function ResourceTestBase::setUpFields

Same name and namespace in other branches
  1. 8.9.x core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php \Drupal\Tests\jsonapi\Functional\ResourceTestBase::setUpFields()
  2. 10 core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php \Drupal\Tests\jsonapi\Functional\ResourceTestBase::setUpFields()
  3. 11.x core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php \Drupal\Tests\jsonapi\Functional\ResourceTestBase::setUpFields()

Sets up additional fields for testing.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The primary test entity.

\Drupal\user\UserInterface $account: The primary test user account.

Return value

\Drupal\Core\Entity\EntityInterface The reloaded entity with the new fields attached.

Throws

\Drupal\Core\Entity\EntityStorageException

1 call to ResourceTestBase::setUpFields()
ResourceTestBase::setUp in core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php

File

core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php, line 271

Class

ResourceTestBase
Subclass this for every JSON:API resource type.

Namespace

Drupal\Tests\jsonapi\Functional

Code

protected function setUpFields(EntityInterface $entity, UserInterface $account) {
    if (!$entity instanceof FieldableEntityInterface) {
        return $entity;
    }
    $entity_bundle = $entity->bundle();
    // Add access-protected field.
    FieldStorageConfig::create([
        'entity_type' => static::$entityTypeId,
        'field_name' => 'field_rest_test',
        'type' => 'text',
    ])->setCardinality(1)
        ->save();
    FieldConfig::create([
        'entity_type' => static::$entityTypeId,
        'field_name' => 'field_rest_test',
        'bundle' => $entity_bundle,
    ])->setLabel('Test field')
        ->setTranslatable(FALSE)
        ->save();
    FieldStorageConfig::create([
        'entity_type' => static::$entityTypeId,
        'field_name' => 'field_jsonapi_test_entity_ref',
        'type' => 'entity_reference',
    ])->setSetting('target_type', 'user')
        ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
        ->save();
    FieldConfig::create([
        'entity_type' => static::$entityTypeId,
        'field_name' => 'field_jsonapi_test_entity_ref',
        'bundle' => $entity_bundle,
    ])->setTranslatable(FALSE)
        ->setSetting('handler', 'default')
        ->setSetting('handler_settings', [
        'target_bundles' => NULL,
    ])
        ->save();
    // Add multi-value field.
    FieldStorageConfig::create([
        'entity_type' => static::$entityTypeId,
        'field_name' => 'field_rest_test_multivalue',
        'type' => 'string',
    ])->setCardinality(3)
        ->save();
    FieldConfig::create([
        'entity_type' => static::$entityTypeId,
        'field_name' => 'field_rest_test_multivalue',
        'bundle' => $entity_bundle,
    ])->setLabel('Test field: multi-value')
        ->setTranslatable(FALSE)
        ->save();
    \Drupal::service('router.builder')->rebuildIfNeeded();
    // Reload entity so that it has the new field.
    $reloaded_entity = $this->entityLoadUnchanged($entity->id());
    // Some entity types are not stored, hence they cannot be reloaded.
    if ($reloaded_entity !== NULL) {
        $entity = $reloaded_entity;
        // Set a default value on the fields.
        $entity->set('field_rest_test', [
            'value' => 'All the faith he had had had had no effect on the outcome of his life.',
        ]);
        $entity->set('field_jsonapi_test_entity_ref', [
            'user' => $account->id(),
        ]);
        $entity->set('field_rest_test_multivalue', [
            [
                'value' => 'One',
            ],
            [
                'value' => 'Two',
            ],
        ]);
        $entity->save();
    }
    return $entity;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.