function RelationshipNormalizerTest::testNormalize

Same name and namespace in other branches
  1. 9 core/modules/jsonapi/tests/src/Kernel/Normalizer/RelationshipNormalizerTest.php \Drupal\Tests\jsonapi\Kernel\Normalizer\RelationshipNormalizerTest::testNormalize()
  2. 8.9.x core/modules/jsonapi/tests/src/Kernel/Normalizer/RelationshipNormalizerTest.php \Drupal\Tests\jsonapi\Kernel\Normalizer\RelationshipNormalizerTest::testNormalize()
  3. 11.x core/modules/jsonapi/tests/src/Kernel/Normalizer/RelationshipNormalizerTest.php \Drupal\Tests\jsonapi\Kernel\Normalizer\RelationshipNormalizerTest::testNormalize()

@covers ::normalize
@dataProvider normalizeProvider

File

core/modules/jsonapi/tests/src/Kernel/Normalizer/RelationshipNormalizerTest.php, line 227

Class

RelationshipNormalizerTest
@coversDefaultClass \Drupal\jsonapi\Normalizer\RelationshipNormalizer[[api-linebreak]] @group jsonapi @group #slow

Namespace

Drupal\Tests\jsonapi\Kernel\Normalizer

Code

public function testNormalize($entity_property_names, $field_name, $expected) : void {
  // Links cannot be generated in the test provider because the container
  // has not yet been set.
  $expected['links'] = [
    'self' => [
      'href' => Url::fromUri('base:/jsonapi/node/referencer/' . static::$referencerId . "/relationships/{$field_name}", [
        'query' => [
          'resourceVersion' => 'id:1',
        ],
      ])->setAbsolute()
        ->toString(),
    ],
    'related' => [
      'href' => Url::fromUri('base:/jsonapi/node/referencer/' . static::$referencerId . "/{$field_name}", [
        'query' => [
          'resourceVersion' => 'id:1',
        ],
      ])->setAbsolute()
        ->toString(),
    ],
  ];
  // Set up different field values.
  $this->referencer->{$field_name} = array_map(function ($entity_property_name) {
    $value = [
      'target_id' => $this->{$entity_property_name === 'image1a' ? 'image1' : $entity_property_name}
        ->id(),
    ];
    switch ($entity_property_name) {
      case 'image1':
        $value['alt'] = 'Cute llama';
        $value['title'] = 'My spirit animal';
        break;

      case 'image1a':
        $value['alt'] = 'Ugly llama';
        $value['title'] = 'My alter ego';
        break;

      case 'image2':
        $value['alt'] = 'Adorable llama';
        $value['title'] = 'My spirit animal 😍';
        break;

    }
    return $value;
  }, $entity_property_names);
  $resource_object = ResourceObject::createFromEntity($this->referencingResourceType, $this->referencer);
  $relationship = Relationship::createFromEntityReferenceField($resource_object, $resource_object->getField($field_name));
  // Normalize.
  $actual = $this->normalizer
    ->normalize($relationship, 'api_json');
  // Assert.
  assert($actual instanceof CacheableNormalization);
  $this->assertEquals($expected, $actual->getNormalization());
}

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