src/EntityToJsonApi.php | 9 +---- tests/src/Kernel/Controller/EntityResourceTest.php | 47 +++++++++++++--------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/EntityToJsonApi.php b/src/EntityToJsonApi.php index fc9d56c..bcea945 100644 --- a/src/EntityToJsonApi.php +++ b/src/EntityToJsonApi.php @@ -80,14 +80,7 @@ class EntityToJsonApi { * The raw JSON string of the requested resource. */ public function serialize(EntityInterface $entity, array $includes = []) { - $resource_type = $this->resourceTypeRepository->get($entity->getEntityTypeId(), $entity->bundle()); - $resource_object = new ResourceObject($resource_type, $entity); - $context = $this->calculateContext($resource_object); - $document = $this->prepareDocument($resource_object, $includes); - return $this->serializer->serialize($document, - 'api_json', - $context - ); + return $this->serializer->encode($this->normalize($entity, $includes), 'api_json'); } /** diff --git a/tests/src/Kernel/Controller/EntityResourceTest.php b/tests/src/Kernel/Controller/EntityResourceTest.php index 378a4c9..1e5e077 100644 --- a/tests/src/Kernel/Controller/EntityResourceTest.php +++ b/tests/src/Kernel/Controller/EntityResourceTest.php @@ -54,15 +54,21 @@ class EntityResourceTest extends KernelTestBase { * @covers ::createIndividual */ public function testCreateIndividualConfig() { - $node_type = NodeType::create([ - 'type' => 'test', - 'name' => 'Test Type', - 'description' => 'Lorem ipsum', - ]); Role::load(Role::ANONYMOUS_ID) ->grantPermission('administer content types') ->save(); - $resource_type = new ResourceType('node', 'article', NULL); + $resource_type = new ResourceType('node_type', 'node_type', NodeType::class); + $resource_type->setRelatableResourceTypes([]); + $payload = Json::encode([ + 'data' => [ + 'type' => 'node--test', + 'attributes' => [ + 'type' => 'test', + 'name' => 'Test Type', + 'description' => 'Lorem ipsum', + ], + ], + ]); $entity_resource = new EntityResource( $this->container->get('entity_type.manager'), $this->container->get('entity_field.manager'), @@ -77,11 +83,12 @@ class EntityResourceTest extends KernelTestBase { $this->container->get('current_user'), $this->container->get('entity.repository') ), - $this->container->get('jsonapi.field_resolver') + $this->container->get('jsonapi.field_resolver'), + $this->container->get('jsonapi.serializer') ); - $response = $entity_resource->createIndividual($resource_type, $node_type, Request::create('/jsonapi/node/test')); + $response = $entity_resource->createIndividual($resource_type, Request::create('/jsonapi/node_type/node_type', 'POST', [], [], [], [], $payload)); // As a side effect, the node type will also be saved. - $this->assertNotEmpty($node_type->id()); + $node_type = NodeType::load('test'); $this->assertInstanceOf(JsonApiDocumentTopLevel2::class, $response->getResponseData()); $data = $response->getResponseData()->getData(); $this->assertInstanceOf(ResourceObject::class, $data); @@ -112,14 +119,17 @@ class EntityResourceTest extends KernelTestBase { ->save(); $payload = Json::encode([ 'data' => [ - 'type' => 'node_type', + 'type' => 'node_type--node_type', 'id' => $node_type->uuid(), 'attributes' => $values, ], ]); $request = Request::create('/jsonapi/node/node_type/' . $node_type->uuid(), 'PATCH', [], [], [], [], $payload); - $resource_type = new ResourceType('node', 'article', NULL); + $resource_type = new ResourceType('node_type', 'node_type', NodeType::class, FALSE, TRUE, TRUE, FALSE, [ + 'type' => 'drupal_internal__type', + ]); + $resource_type->setRelatableResourceTypes([]); $entity_resource = new EntityResource( $this->container->get('entity_type.manager'), $this->container->get('entity_field.manager'), @@ -134,9 +144,10 @@ class EntityResourceTest extends KernelTestBase { $this->container->get('current_user'), $this->container->get('entity.repository') ), - $this->container->get('jsonapi.field_resolver') + $this->container->get('jsonapi.field_resolver'), + $this->container->get('jsonapi.serializer') ); - $response = $entity_resource->patchIndividual($resource_type, $node_type, $parsed_node_type, $request); + $response = $entity_resource->patchIndividual($resource_type, $node_type, $request); // As a side effect, the node will also be saved. $this->assertInstanceOf(JsonApiDocumentTopLevel2::class, $response->getResponseData()); @@ -168,8 +179,8 @@ class EntityResourceTest extends KernelTestBase { * @covers ::patchIndividual * @dataProvider patchIndividualConfigFailedProvider */ - public function testPatchIndividualFailedConfig($values) { - $this->setExpectedException(ConfigException::class); + public function testPatchIndividualFailedConfig($values, $expected_message) { + $this->setExpectedException(ConfigException::class, $expected_message); $this->testPatchIndividualConfig($values); } @@ -181,8 +192,7 @@ class EntityResourceTest extends KernelTestBase { */ public function patchIndividualConfigFailedProvider() { return [ - [['uuid' => 'PATCHED']], - [['type' => 'article', 'status' => FALSE]], + [['type' => 'article', 'status' => FALSE], "The machine name of the 'Content type' bundle cannot be changed."], ]; } @@ -214,7 +224,8 @@ class EntityResourceTest extends KernelTestBase { $this->container->get('current_user'), $this->container->get('entity.repository') ), - $this->container->get('jsonapi.field_resolver') + $this->container->get('jsonapi.field_resolver'), + $this->container->get('jsonapi.serializer') ); $response = $entity_resource->deleteIndividual($node_type, new Request()); // As a side effect, the node will also be deleted.