diff --git a/src/EntityToJsonApi.php b/src/EntityToJsonApi.php index 9c1706b..0ca3717 100644 --- a/src/EntityToJsonApi.php +++ b/src/EntityToJsonApi.php @@ -8,7 +8,6 @@ use Drupal\jsonapi\JsonApiResource\EntityCollection; use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface; use Drupal\jsonapi\Routing\Routes; use Drupal\jsonapi\Serializer\Serializer; -use Drupal\jsonapi_extras\ResourceType\ConfigurableResourceTypeRepository; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Serializer\SerializerInterface; @@ -80,9 +79,7 @@ class EntityToJsonApi { assert(isset($jsonapi_base_path[1])); assert(substr($jsonapi_base_path, -1) !== '/'); $this->jsonApiBasePath = $jsonapi_base_path; - $this->classToUse = ConfigurableResourceTypeRepository::isJsonApi2x() - ? '\Drupal\jsonapi\JsonApiResource\JsonApiDocumentTopLevel' - : '\Drupal\jsonapi\Resource\JsonApiDocumentTopLevel'; + $this->classToUse = '\Drupal\jsonapi\JsonApiResource\JsonApiDocumentTopLevel'; } /** @@ -101,9 +98,7 @@ class EntityToJsonApi { foreach ($includes as $field_name) { $referenced_entities = array_merge($referenced_entities, $entity->get($field_name)->referencedEntities()); } - $document = ConfigurableResourceTypeRepository::isJsonApi2x() - ? new $this->classToUse($entity, new EntityCollection($referenced_entities), []) - : new $this->classToUse($entity); + $document = new $this->classToUse($entity, new EntityCollection($referenced_entities), []); return $this->serializer->serialize($document, 'api_json', $this->calculateContext($entity, $includes) @@ -126,9 +121,7 @@ class EntityToJsonApi { foreach ($includes as $field_name) { $referenced_entities = array_merge($referenced_entities, $entity->get($field_name)->referencedEntities()); } - $document = ConfigurableResourceTypeRepository::isJsonApi2x() - ? new $this->classToUse($entity, new EntityCollection($referenced_entities), []) - : new $this->classToUse($entity); + $document = new $this->classToUse($entity, new EntityCollection($referenced_entities), []); return $this->serializer->normalize($document, 'api_json', $this->calculateContext($entity, $includes) diff --git a/src/Form/JsonapiResourceConfigForm.php b/src/Form/JsonapiResourceConfigForm.php index e9fc12c..e7b76dd 100644 --- a/src/Form/JsonapiResourceConfigForm.php +++ b/src/Form/JsonapiResourceConfigForm.php @@ -2,14 +2,18 @@ namespace Drupal\jsonapi_extras\Form; +use Drupal\Component\Plugin\Exception\PluginException; +use Drupal\Component\Plugin\Exception\PluginNotFoundException; +use Drupal\Component\Utility\NestedArray; +use Drupal\Core\Config\Entity\ConfigEntityTypeInterface; use Drupal\Core\Config\ImmutableConfig; use Drupal\Core\Config\TypedConfigManagerInterface; use Drupal\Core\Entity\ContentEntityTypeInterface; use Drupal\Core\Entity\EntityFieldManager; use Drupal\Core\Entity\EntityForm; use Drupal\Core\Entity\EntityTypeBundleInfoInterface; +use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityTypeRepositoryInterface; -use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\jsonapi\ResourceType\ResourceType; use Drupal\jsonapi\ResourceType\ResourceTypeRepository; @@ -160,7 +164,14 @@ class JsonapiResourceConfigForm extends EntityForm { drupal_set_message($this->t('This override already exists, please edit it instead.')); return $form; } - $form['bundle_wrapper']['fields_wrapper'] = $this->buildOverridesForm($resource_type, $entity); + try { + $fields_wrapper = $this->buildOverridesForm($resource_type, $entity); + $form['bundle_wrapper']['fields_wrapper'] = $fields_wrapper; + } + catch (PluginNotFoundException $exception) { + // Log the exception and continue. + watchdog_exception('jsonapi_extras', $exception); + } $form['id'] = [ '#type' => 'hidden', '#value' => sprintf('%s--%s', $entity_type_id, $bundle), @@ -221,24 +232,15 @@ class JsonapiResourceConfigForm extends EntityForm { * * @return array * The partial form. + * + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ protected function buildOverridesForm(ResourceType $resource_type, JsonapiResourceConfig $entity) { $entity_type_id = $resource_type->getEntityTypeId(); /** @var \Drupal\Core\Config\Entity\ConfigEntityTypeInterface $entity_type */ $entity_type = $this->entityTypeManager->getDefinition($entity_type_id); $bundle = $resource_type->getBundle(); - if ($entity_type instanceof ContentEntityTypeInterface) { - $field_names = array_map(function (FieldDefinitionInterface $field_definition) { - return $field_definition->getName(); - }, $this->fieldManager->getFieldDefinitions($entity_type_id, $bundle)); - } - elseif ($properties = $entity_type->getPropertiesToExport()) { - $field_names = array_keys($properties); - array_unshift($field_names, $entity_type->getKey('id')); - } - else { - $field_names = []; - } + $field_names = $this->getAllFieldNames($entity_type, $bundle); $overrides_form['overrides']['entity'] = [ '#type' => 'details', @@ -318,7 +320,7 @@ class JsonapiResourceConfigForm extends EntityForm { 'disabled' => $this->t('Disabled'), 'fieldName' => $this->t('Field name'), 'publicName' => $this->t('Alias'), - 'advancedOptions' => $this->t(''), + 'advancedOptions' => '', ], '#empty' => $this->t('No fields available.'), '#states' => [ @@ -328,13 +330,25 @@ class JsonapiResourceConfigForm extends EntityForm { ], '#attached' => [ 'library' => [ - 'jsonapi_extras/expandable_rows_table', + 'jsonapi_extras/expandable_rows_table', ], ], ]; foreach ($field_names as $field_name) { - $overrides_form['overrides']['fields']['resourceFields'][$field_name] = $this->buildOverridesField($field_name, $entity); + try { + $overrides = $this->buildOverridesField($field_name, $entity); + } + catch (PluginException $exception) { + // Log exception and continue. + watchdog_exception('jsonapi_extras', $exception); + continue; + } + NestedArray::setValue( + $overrides_form, + ['overrides', 'fields', 'resourceFields', $field_name], + $overrides + ); } return $overrides_form; @@ -366,6 +380,8 @@ class JsonapiResourceConfigForm extends EntityForm { * * @return array * The partial form. + * + * @throws \Drupal\Component\Plugin\Exception\PluginException */ protected function buildOverridesField($field_name, JsonapiResourceConfig $entity) { $resource_fields = array_filter($entity->get('resourceFields'), function (array $resource_field) use ($field_name) { @@ -403,7 +419,7 @@ class JsonapiResourceConfigForm extends EntityForm { $overrides_form['advancedOptionsIcon'] = [ // Here we are just printing an arrow. - '#markup' => '↳' + '#markup' => '↳', ]; $overrides_form['enhancer_label'] = [ @@ -480,7 +496,8 @@ class JsonapiResourceConfigForm extends EntityForm { * {@inheritdoc} */ protected function actionsElement(array $form, FormStateInterface $form_state) { - // We want to display "Revert" instead of "Delete" on the Resource Config Form. + // We want to display "Revert" instead of "Delete" on the Resource Config + // Form. $element = parent::actionsElement($form, $form_state); if (isset($element['delete'])) { $element['delete']['#title'] = $this->t('Revert'); @@ -488,4 +505,42 @@ class JsonapiResourceConfigForm extends EntityForm { return $element; } + /** + * Gets all field names for a given entity type and bundle. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type for which to get all field names. + * @param string $bundle + * The bundle for which to get all field names. + * + * @todo This is a copy of ResourceTypeRepository::getAllFieldNames. We can't + * reuse that code because it's protected. + * + * @return string[] + * All field names. + */ + protected function getAllFieldNames(EntityTypeInterface $entity_type, $bundle) { + if ($entity_type instanceof ContentEntityTypeInterface) { + $field_definitions = $this->fieldManager->getFieldDefinitions( + $entity_type->id(), + $bundle + ); + return array_keys($field_definitions); + } + elseif ($entity_type instanceof ConfigEntityTypeInterface) { + // @todo Uncomment the first line, remove everything else once https://www.drupal.org/project/drupal/issues/2483407 lands. + // return array_keys($entity_type->getPropertiesToExport()); + $export_properties = $entity_type->getPropertiesToExport(); + if ($export_properties !== NULL) { + return array_keys($export_properties); + } + else { + return ['id', 'type', 'uuid', '_core']; + } + } + else { + throw new \LogicException("Only content and config entity types are supported."); + } + } + } diff --git a/src/JsonapiExtrasServiceProvider.php b/src/JsonapiExtrasServiceProvider.php index 598be86..3d6d9c7 100644 --- a/src/JsonapiExtrasServiceProvider.php +++ b/src/JsonapiExtrasServiceProvider.php @@ -21,13 +21,6 @@ class JsonapiExtrasServiceProvider extends ServiceProviderBase { // Override the class used for the configurable service. $definition = $container->getDefinition('jsonapi.resource_type.repository'); $definition->setClass(ConfigurableResourceTypeRepository::class); - // We can't use ConfigurableResourceTypeRepository::isJsonApi2x() here. - // 'jsonapi.entity.to_jsonapi' service was removed in 2.x see - // https://www.drupal.org/node/2983182. - // @todo Remove this when JSON API Extras drops support for JSON API 1.x. - if ($container->has('jsonapi.entity.to_jsonapi')) { - $definition->addMethodCall('setStaticCache', [new Reference('cache.static')]); - } // The configurable service expects the entity repository and the enhancer // plugin manager. $definition->addMethodCall('setEntityRepository', [new Reference('entity.repository')]); diff --git a/src/Normalizer/ConfigEntityNormalizer.php b/src/Normalizer/ConfigEntityNormalizer.php index 0916e3d..003dd06 100644 --- a/src/Normalizer/ConfigEntityNormalizer.php +++ b/src/Normalizer/ConfigEntityNormalizer.php @@ -32,7 +32,7 @@ class ConfigEntityNormalizer extends JsonapiConfigEntityNormalizer { /** * {@inheritdoc} */ - protected function prepareInput(array $data, ResourceType $resource_type, $format = NULL, array $context = []) { + protected function prepareInput(array $data, ResourceType $resource_type, $format, array $context) { foreach ($data as $public_field_name => &$field_value) { /** @var \Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerInterface $enhancer */ $enhancer = $resource_type->getFieldEnhancer($public_field_name); diff --git a/src/Normalizer/EntityNormalizerTrait.php b/src/Normalizer/EntityNormalizerTrait.php index 141a6f2..836f339 100644 --- a/src/Normalizer/EntityNormalizerTrait.php +++ b/src/Normalizer/EntityNormalizerTrait.php @@ -17,18 +17,14 @@ trait EntityNormalizerTrait { * @param \Drupal\jsonapi\ResourceType\ResourceType $resource_type * Contains the info about the resource type. * @param string $format - * (optional) Format from which the given data was extracted. Only required - * for JSON API 2.x. + * Format from which the given data was extracted. * @param array $context - * (optional) Options available to the denormalizer. Only required for JSON - * API 2.x. + * Options available to the denormalizer. * * @return array * The modified input data. - * - * @todo Make the last 2 args non-optional when JSON API 2.x is required. */ - protected function prepareInput(array $data, ResourceType $resource_type, $format = NULL, array $context = []) { + protected function prepareInput(array $data, ResourceType $resource_type, $format, array $context) { /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_storage_definitions */ $field_storage_definitions = \Drupal::service('entity_field.manager') ->getFieldStorageDefinitions( diff --git a/src/ResourceType/ConfigurableResourceTypeRepository.php b/src/ResourceType/ConfigurableResourceTypeRepository.php index 5c5e784..ee95e6e 100644 --- a/src/ResourceType/ConfigurableResourceTypeRepository.php +++ b/src/ResourceType/ConfigurableResourceTypeRepository.php @@ -5,8 +5,8 @@ namespace Drupal\jsonapi_extras\ResourceType; use Drupal\Component\Plugin\Exception\PluginException; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityRepositoryInterface; -use Drupal\Core\Extension\ModuleHandler; use Drupal\jsonapi\ResourceType\ResourceTypeRepository; +use Drupal\jsonapi_extras\Entity\JsonapiResourceConfig; use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerManager; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Cache\CacheBackendInterface; @@ -73,17 +73,22 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { protected $staticCache; /** - * Detects whether this site has JSON API 1.x or 2.x installed. + * Builds the resource config ID from the entity type ID and bundle. * - * @return bool - * TRUE if JSON API 2.x is installed. FALSE otherwise. + * @param string $entity_type_id + * The entity type ID. + * @param string $bundle + * The entity bundle. * - * @todo Remove this when JSON API Extras drops support for JSON API 1.x. + * @return string + * The ID of the associated ResourceConfig entity. */ - public static function isJsonApi2x() { - $v = ModuleHandler::parseDependency('jsonapi(>= 8.x-2.0-beta1)'); - $module_list = \Drupal::service('extension.list.module')->getList(); - return is_null(drupal_check_incompatibility($v, $module_list['jsonapi']->info['version'])); + protected static function buildResourceConfigId($entity_type_id, $bundle) { + return sprintf( + '%s--%s', + $entity_type_id, + $bundle + ); } /** @@ -126,24 +131,6 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { $this->configFactory = $config_factory; } - /** - * {@inheritdoc} - * - * @todo Remove this when JSON API Extras drops support for JSON API 1.x. - */ - public function all() { - if (static::isJsonApi2x()) { - return parent::all(); - } - - if (empty($this->all)) { - $all = parent::all(); - array_walk($all, [$this, 'injectAdditionalServicesToResourceType']); - $this->all = $all; - } - return $this->all; - } - /** * {@inheritdoc} * @@ -153,8 +140,7 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { * 2. Field mapping not based on logic, but on configuration. */ protected function createResourceType(EntityTypeInterface $entity_type, $bundle) { - $resource_config_id = sprintf( - '%s--%s', + $resource_config_id = static::buildResourceConfigId( $entity_type->id(), $bundle ); @@ -169,7 +155,7 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { $entity_type->isInternal() || (bool) $resource_config->get('disabled'), static::isLocatableResourceType($entity_type, $bundle), TRUE, - $resource_config->getFieldMapping() + $this->overrideFieldMapping($resource_config) ); // Inject additional services through setters. By using setter injection @@ -193,8 +179,7 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { * @todo Remove this when JSON API Extras drops support for JSON API 1.x. */ protected function injectAdditionalServicesToResourceType(ConfigurableResourceType $resource_type) { - $resource_config_id = sprintf( - '%s--%s', + $resource_config_id = static::buildResourceConfigId( $resource_type->getEntityTypeId(), $resource_type->getBundle() ); @@ -245,7 +230,10 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { $resource_config_ids = []; foreach ($this->getEntityTypeBundleTuples() as $tuple) { list($entity_type_id, $bundle) = $tuple; - $resource_config_ids[] = sprintf('%s--%s', $entity_type_id, $bundle); + $resource_config_ids[] = static::buildResourceConfigId( + $entity_type_id, + $bundle + ); } $this->resourceConfigs = $this->entityTypeManager ->getStorage('jsonapi_resource_config') @@ -282,4 +270,33 @@ class ConfigurableResourceTypeRepository extends ResourceTypeRepository { $this->resourceConfigs = []; } + /** + * Gets the field mapping for the given field names and entity type + bundle. + * + * @param \Drupal\jsonapi_extras\Entity\JsonapiResourceConfig $resource_config + * The associated resource config. + * + * @return array + * An array with: + * - keys are (real/internal) field names + * - values are either FALSE (indicating the field is not exposed despite + * not being internal), TRUE (indicating the field should be exposed under + * its internal name) or a string (indicating the field should not be + * exposed using its internal name, but the name specified in the string) + */ + protected function overrideFieldMapping(JsonapiResourceConfig $resource_config) { + if ($resource_config instanceof NullJsonapiResourceConfig) { + return []; + } + $entity_type = $resource_config->getEntityType(); + $bundle = $resource_config->bundle(); + $field_names = $this->getAllFieldNames($entity_type, $bundle); + // Use the base class to fetch the non-configurable field mappings. + $mappings = static::getFieldMapping($field_names, $entity_type, $bundle); + // Make sure to respect the overrides coming from JSON:API. + array_merge($resource_config->getFieldMapping(), $mappings); + + return $mappings; + } + } diff --git a/tests/src/Functional/JsonExtrasApiFunctionalTest.php b/tests/src/Functional/JsonExtrasApiFunctionalTest.php index 4341117..7b12fcf 100644 --- a/tests/src/Functional/JsonExtrasApiFunctionalTest.php +++ b/tests/src/Functional/JsonExtrasApiFunctionalTest.php @@ -8,7 +8,6 @@ use Drupal\Core\Url; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; use Drupal\jsonapi_extras\Entity\JsonapiResourceConfig; -use Drupal\jsonapi_extras\ResourceType\ConfigurableResourceTypeRepository; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; use Drupal\Tests\jsonapi\Functional\JsonApiFunctionalTestBase; @@ -179,13 +178,8 @@ class JsonExtrasApiFunctionalTest extends JsonApiFunctionalTestBase { $this->drupalGet('/api/taxonomy_term/tags/' . $this->tags[0]->uuid() . '/vid'); $this->assertSession()->statusCodeEquals(404); $output = Json::decode($this->drupalGet('/api/taxonomy_term/tags/' . $this->tags[0]->uuid() . '/relationships/vid')); - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $this->assertSession()->statusCodeEquals(200); - $this->assertSame(NULL, $output['data']); - } - else { - $this->assertSession()->statusCodeEquals(404); - } + $this->assertSession()->statusCodeEquals(200); + $this->assertSame(NULL, $output['data']); // 14. Test a disabled related resource of multiple cardinality. $this->tags[1]->vocabs->set(0, 'tags'); @@ -271,12 +265,7 @@ class JsonExtrasApiFunctionalTest extends JsonApiFunctionalTestBase { $this->assertEquals(201, $response->getStatusCode()); $this->assertArrayHasKey('internalId', $created_response['data']['attributes']); $this->assertCount(2, $created_response['data']['relationships']['tags']['data']); - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $this->assertSame($created_response['data']['links']['self']['href'], $response->getHeader('Location')[0]); - } - else { - $this->assertSame($created_response['data']['links']['self'], $response->getHeader('Location')[0]); - } + $this->assertSame($created_response['data']['links']['self']['href'], $response->getHeader('Location')[0]); $date = new \DateTime($body['data']['attributes']['timestamp']); $created_node = Node::load($created_response['data']['attributes']['internalId']); $this->assertSame((int) $date->format('U'), (int) $created_node->get('field_timestamp')->value); diff --git a/tests/src/Kernel/Controller/EntityResourceTest.php b/tests/src/Kernel/Controller/EntityResourceTest.php index 44c18cd..578067e 100644 --- a/tests/src/Kernel/Controller/EntityResourceTest.php +++ b/tests/src/Kernel/Controller/EntityResourceTest.php @@ -6,9 +6,7 @@ use Drupal\Component\Serialization\Json; use Drupal\Core\Config\ConfigException; use Drupal\jsonapi\ResourceType\ResourceType; use Drupal\jsonapi\Controller\EntityResource; -use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel; use Drupal\jsonapi\JsonApiResource\JsonApiDocumentTopLevel as JsonApiDocumentTopLevel2; -use Drupal\jsonapi_extras\ResourceType\ConfigurableResourceTypeRepository; use Drupal\KernelTests\KernelTestBase; use Drupal\node\Entity\NodeType; use Drupal\user\Entity\Role; @@ -21,10 +19,6 @@ use Symfony\Component\HttpFoundation\Request; * @group jsonapi_extras * @group legacy * - * When upgrading JSON API Extras to work with JSON API 2.x revert to this patch - * instead. - * @see https://www.drupal.org/project/jsonapi_extras/issues/2995804#comment-12752336 - * * @internal */ class EntityResourceTest extends KernelTestBase { @@ -67,37 +61,19 @@ class EntityResourceTest extends KernelTestBase { ->grantPermission('administer content types') ->save(); $resource_type = new ResourceType('node', 'article', NULL); - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $entity_resource = new EntityResource( - $this->container->get('entity_type.manager'), - $this->container->get('entity_field.manager'), - $this->container->get('jsonapi.link_manager'), - $this->container->get('jsonapi.resource_type.repository'), - $this->container->get('renderer'), - $this->container->get('entity.repository'), - $this->container->get('jsonapi.include_resolver') - ); - $response = $entity_resource->createIndividual($resource_type, $node_type, new Request()); - } - else { - $entity_resource = new EntityResource( - $resource_type, - $this->container->get('entity_type.manager'), - $this->container->get('entity_field.manager'), - $this->container->get('plugin.manager.field.field_type'), - $this->container->get('jsonapi.link_manager'), - $this->container->get('jsonapi.resource_type.repository') - ); - $response = $entity_resource->createIndividual($node_type, new Request()); - } + $entity_resource = new EntityResource( + $this->container->get('entity_type.manager'), + $this->container->get('entity_field.manager'), + $this->container->get('jsonapi.link_manager'), + $this->container->get('jsonapi.resource_type.repository'), + $this->container->get('renderer'), + $this->container->get('entity.repository'), + $this->container->get('jsonapi.include_resolver') + ); + $response = $entity_resource->createIndividual($resource_type, $node_type, new Request()); // As a side effect, the node type will also be saved. $this->assertNotEmpty($node_type->id()); - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $this->assertInstanceOf(JsonApiDocumentTopLevel2::class, $response->getResponseData()); - } - else { - $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData()); - } + $this->assertInstanceOf(JsonApiDocumentTopLevel2::class, $response->getResponseData()); $this->assertEquals('test', $response->getResponseData()->getData()->id()); $this->assertEquals(201, $response->getStatusCode()); } @@ -133,37 +109,19 @@ class EntityResourceTest extends KernelTestBase { $request = new Request([], [], [], [], [], [], $payload); $resource_type = new ResourceType('node', 'article', NULL); - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $entity_resource = new EntityResource( - $this->container->get('entity_type.manager'), - $this->container->get('entity_field.manager'), - $this->container->get('jsonapi.link_manager'), - $this->container->get('jsonapi.resource_type.repository'), - $this->container->get('renderer'), - $this->container->get('entity.repository'), - $this->container->get('jsonapi.include_resolver') - ); - $response = $entity_resource->patchIndividual($resource_type, $node_type, $parsed_node_type, $request); - } - else { - $entity_resource = new EntityResource( - $resource_type, - $this->container->get('entity_type.manager'), - $this->container->get('entity_field.manager'), - $this->container->get('plugin.manager.field.field_type'), - $this->container->get('jsonapi.link_manager'), - $this->container->get('jsonapi.resource_type.repository') - ); - $response = $entity_resource->patchIndividual($node_type, $parsed_node_type, $request); - } + $entity_resource = new EntityResource( + $this->container->get('entity_type.manager'), + $this->container->get('entity_field.manager'), + $this->container->get('jsonapi.link_manager'), + $this->container->get('jsonapi.resource_type.repository'), + $this->container->get('renderer'), + $this->container->get('entity.repository'), + $this->container->get('jsonapi.include_resolver') + ); + $response = $entity_resource->patchIndividual($resource_type, $node_type, $parsed_node_type, $request); // As a side effect, the node will also be saved. - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $this->assertInstanceOf(JsonApiDocumentTopLevel2::class, $response->getResponseData()); - } - else { - $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData()); - } + $this->assertInstanceOf(JsonApiDocumentTopLevel2::class, $response->getResponseData()); $updated_node_type = $response->getResponseData()->getData(); $this->assertInstanceOf(NodeType::class, $updated_node_type); // If the field is ignored then we should not see a difference. @@ -224,29 +182,15 @@ class EntityResourceTest extends KernelTestBase { Role::load(Role::ANONYMOUS_ID) ->grantPermission('administer content types') ->save(); - $resource_type = new ResourceType('node', 'article', NULL); - if (ConfigurableResourceTypeRepository::isJsonApi2x()) { - $entity_resource = new EntityResource( - $this->container->get('entity_type.manager'), - $this->container->get('entity_field.manager'), - $this->container->get('jsonapi.link_manager'), - $this->container->get('jsonapi.resource_type.repository'), - $this->container->get('renderer'), - $this->container->get('entity.repository'), - $this->container->get('jsonapi.include_resolver') - ); - - } - else { - $entity_resource = new EntityResource( - $resource_type, - $this->container->get('entity_type.manager'), - $this->container->get('entity_field.manager'), - $this->container->get('plugin.manager.field.field_type'), - $this->container->get('jsonapi.link_manager'), - $this->container->get('jsonapi.resource_type.repository') - ); - } + $entity_resource = new EntityResource( + $this->container->get('entity_type.manager'), + $this->container->get('entity_field.manager'), + $this->container->get('jsonapi.link_manager'), + $this->container->get('jsonapi.resource_type.repository'), + $this->container->get('renderer'), + $this->container->get('entity.repository'), + $this->container->get('jsonapi.include_resolver') + ); $response = $entity_resource->deleteIndividual($node_type, new Request()); // As a side effect, the node will also be deleted. $count = $this->container->get('entity_type.manager') diff --git a/tests/src/Kernel/EntityToJsonApiTest.php b/tests/src/Kernel/EntityToJsonApiTest.php index 673054c..5ab6dc0 100644 --- a/tests/src/Kernel/EntityToJsonApiTest.php +++ b/tests/src/Kernel/EntityToJsonApiTest.php @@ -7,7 +7,6 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\file\Entity\File; use Drupal\jsonapi\LinkManager\LinkManager; -use Drupal\jsonapi_extras\ResourceType\ConfigurableResourceTypeRepository; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; use Drupal\taxonomy\Entity\Term; @@ -254,9 +253,7 @@ class EntityToJsonApiTest extends JsonapiKernelTestBase { static::assertNotEmpty($structured['data']['type']); static::assertNotEmpty($structured['data']['id']); static::assertNotEmpty($structured['data']['attributes']); - if (!ConfigurableResourceTypeRepository::isJsonApi2x()) { - static::assertInternalType('string', $structured['links']['self']); - } + static::assertInternalType('string', $structured['links']['self']); } /**