public function JsonApiDocumentTopLevelNormalizerTest::testNormalize in Drupal 8
@covers ::normalize
File
- core/
modules/ jsonapi/ tests/ src/ Kernel/ Normalizer/ JsonApiDocumentTopLevelNormalizerTest.php, line 210
Class
- JsonApiDocumentTopLevelNormalizerTest
- @coversDefaultClass \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer @group jsonapi
Namespace
Drupal\Tests\jsonapi\Kernel\NormalizerCode
public function testNormalize() {
list($request, $resource_type) = $this
->generateProphecies('node', 'article');
$resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
$includes = $this->includeResolver
->resolve($resource_object, 'uid,field_tags,field_image');
$jsonapi_doc_object = $this
->getNormalizer()
->normalize(new JsonApiDocumentTopLevel(new ResourceObjectData([
$resource_object,
], 1), $includes, new LinkCollection([])), 'api_json', [
'resource_type' => $resource_type,
'account' => NULL,
'sparse_fieldset' => [
'node--article' => [
'title',
'node_type',
'uid',
'field_tags',
'field_image',
],
'user--user' => [
'display_name',
],
],
'include' => [
'uid',
'field_tags',
'field_image',
],
]);
$normalized = $jsonapi_doc_object
->getNormalization();
// @see http://jsonapi.org/format/#document-jsonapi-object
$this
->assertEquals($normalized['jsonapi']['version'], '1.0');
$this
->assertEquals($normalized['jsonapi']['meta']['links']['self']['href'], 'http://jsonapi.org/format/1.0/');
$this
->assertSame($normalized['data']['attributes']['title'], 'dummy_title');
$this
->assertEquals($normalized['data']['id'], $this->node
->uuid());
$this
->assertSame([
'data' => [
'type' => 'node_type--node_type',
'id' => NodeType::load('article')
->uuid(),
],
'links' => [
'related' => [
'href' => Url::fromUri('internal:/jsonapi/node/article/' . $this->node
->uuid() . '/node_type', [
'query' => [
'resourceVersion' => 'id:' . $this->node
->getRevisionId(),
],
])
->setAbsolute()
->toString(TRUE)
->getGeneratedUrl(),
],
'self' => [
'href' => Url::fromUri('internal:/jsonapi/node/article/' . $this->node
->uuid() . '/relationships/node_type', [
'query' => [
'resourceVersion' => 'id:' . $this->node
->getRevisionId(),
],
])
->setAbsolute()
->toString(TRUE)
->getGeneratedUrl(),
],
],
], $normalized['data']['relationships']['node_type']);
$this
->assertTrue(!isset($normalized['data']['attributes']['created']));
$this
->assertEquals([
'alt' => 'test alt',
'title' => 'test title',
'width' => 10,
'height' => 11,
], $normalized['data']['relationships']['field_image']['data']['meta']);
$this
->assertSame('node--article', $normalized['data']['type']);
$this
->assertEquals([
'data' => [
'type' => 'user--user',
'id' => $this->user
->uuid(),
],
'links' => [
'self' => [
'href' => Url::fromUri('internal:/jsonapi/node/article/' . $this->node
->uuid() . '/relationships/uid', [
'query' => [
'resourceVersion' => 'id:' . $this->node
->getRevisionId(),
],
])
->setAbsolute()
->toString(TRUE)
->getGeneratedUrl(),
],
'related' => [
'href' => Url::fromUri('internal:/jsonapi/node/article/' . $this->node
->uuid() . '/uid', [
'query' => [
'resourceVersion' => 'id:' . $this->node
->getRevisionId(),
],
])
->setAbsolute()
->toString(TRUE)
->getGeneratedUrl(),
],
],
], $normalized['data']['relationships']['uid']);
$this
->assertTrue(empty($normalized['meta']['omitted']));
$this
->assertSame($this->user
->uuid(), $normalized['included'][0]['id']);
$this
->assertSame('user--user', $normalized['included'][0]['type']);
$this
->assertSame('user1', $normalized['included'][0]['attributes']['display_name']);
$this
->assertCount(1, $normalized['included'][0]['attributes']);
$this
->assertSame($this->term1
->uuid(), $normalized['included'][1]['id']);
$this
->assertSame('taxonomy_term--tags', $normalized['included'][1]['type']);
$this
->assertSame($this->term1
->label(), $normalized['included'][1]['attributes']['name']);
$this
->assertCount(12, $normalized['included'][1]['attributes']);
$this
->assertTrue(!isset($normalized['included'][1]['attributes']['created']));
// Make sure that the cache tags for the includes and the requested entities
// are bubbling as expected.
$this
->assertArraySubset([
'file:1',
'node:1',
'taxonomy_term:1',
'taxonomy_term:2',
'user:1',
], $jsonapi_doc_object
->getCacheTags());
$this
->assertSame(Cache::PERMANENT, $jsonapi_doc_object
->getCacheMaxAge());
}