Skip to content
Snippets Groups Projects
Verified Commit ebba427c authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3213752 by Spokje, bradjones1, quietone, _pratik_, ravi.shankar,...

Issue #3213752 by Spokje, bradjones1, quietone, _pratik_, ravi.shankar, rpayanm, bbrala, alexpott, catch: Remove dead code from JsonApiDocumentTopLevelNormalizerTest

(cherry picked from commit 40963387)
parent e11c30b5
No related branches found
No related tags found
17 merge requests!8506Draft: Issue #3456536 by ibrahim tameme,!5646Issue #3350972 by nod_: [random test failure]...,!5600Issue #3350972 by nod_: [random test failure]...,!5343Issue #3305066 by quietone, Rename RedirectLeadingSlashesSubscriber,!3603#ISSUE 3346218 Add a different message on edit comment,!3555Issue #2473873: Views entity operations lack cacheability support, resulting in incorrect dropbuttons,!3494Issue #3327018 by Spokje, longwave, xjm, mondrake: Update PHPStan to 1.9.3 and...,!3410Issue #3340128: UserLoginForm::submitForm has some dead code,!3389Issue #3325184 by Spokje, andypost, xjm, smustgrave: $this->configFactory is...,!3381Issue #3332363: Refactor Claro's menus-and-lists stylesheet,!3307Issue #3326193: CKEditor 5 can grow past the viewport when there is a lot of content,!3236Issue #3332419: Refactor Claro's messages stylesheet,!3231Draft: Issue #3049525 by longwave, fougere, larowlan, kim.pepper, AaronBauman, Wim...,!3212Issue #3294003: Refactor Claro's entity-meta stylesheet,!3194Issue #3330981: Fix PHPStan L1 error "Relying on entity queries to check access by default is deprecated...",!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!2972Issue #1845004: Replace custom password hashing library with PHP 5.5 password_hash()
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
use Drupal\user\Entity\Role; use Drupal\user\Entity\Role;
use Drupal\user\Entity\User; use Drupal\user\Entity\User;
use Drupal\user\RoleInterface; use Drupal\user\RoleInterface;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
...@@ -195,7 +193,7 @@ protected function setUp(): void { ...@@ -195,7 +193,7 @@ protected function setUp(): void {
$this->node = Node::create([ $this->node = Node::create([
'title' => 'dummy_title', 'title' => 'dummy_title',
'type' => 'article', 'type' => 'article',
'uid' => 1, 'uid' => $this->user,
'body' => [ 'body' => [
'format' => 'plain_text', 'format' => 'plain_text',
'value' => $this->randomStringValidate(42), 'value' => $this->randomStringValidate(42),
...@@ -259,7 +257,7 @@ protected function tearDown(): void { ...@@ -259,7 +257,7 @@ protected function tearDown(): void {
* @covers ::normalize * @covers ::normalize
*/ */
public function testNormalize() { public function testNormalize() {
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$resource_object = ResourceObject::createFromEntity($resource_type, $this->node); $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
$includes = $this->includeResolver->resolve($resource_object, 'uid,field_tags,field_image'); $includes = $this->includeResolver->resolve($resource_object, 'uid,field_tags,field_image');
...@@ -356,61 +354,16 @@ public function testNormalize() { ...@@ -356,61 +354,16 @@ public function testNormalize() {
); );
} }
/**
* @covers ::normalize
*/
public function testNormalizeRelated() {
$this->markTestIncomplete('This fails and should be fixed by https://www.drupal.org/project/drupal/issues/3213752');
[$request, $resource_type] = $this->generateProphecies('node', 'article');
$request->query = new ParameterBag([
'fields' => [
'user--user' => 'name,roles',
],
'include' => 'roles',
]);
$document_wrapper = $this->prophesize(JsonApiDocumentTopLevel::class);
$author = $this->node->get('uid')->entity;
$document_wrapper->getData()->willReturn($author);
$jsonapi_doc_object = $this
->getNormalizer()
->normalize(
$document_wrapper->reveal(),
'api_json',
[
'resource_type' => $resource_type,
'account' => NULL,
]
);
$normalized = $jsonapi_doc_object->getNormalization();
$this->assertSame($normalized['data']['attributes']['name'], 'user1');
$this->assertEquals($normalized['data']['id'], User::load(1)->uuid());
$this->assertEquals('user--user', $normalized['data']['type']);
// Make sure that the cache tags for the includes and the requested entities
// are bubbling as expected.
$this->assertSame(['user:1'], $jsonapi_doc_object->getCacheTags());
$this->assertSame(Cache::PERMANENT, $jsonapi_doc_object->getCacheMaxAge());
}
/** /**
* @covers ::normalize * @covers ::normalize
*/ */
public function testNormalizeUuid() { public function testNormalizeUuid() {
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$resource_object = ResourceObject::createFromEntity($resource_type, $this->node); $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
$include_param = 'uid,field_tags'; $include_param = 'uid,field_tags';
$includes = $this->includeResolver->resolve($resource_object, $include_param); $includes = $this->includeResolver->resolve($resource_object, $include_param);
$document_wrapper = new JsonApiDocumentTopLevel(new ResourceObjectData([$resource_object], 1), $includes, new LinkCollection([])); $document_wrapper = new JsonApiDocumentTopLevel(new ResourceObjectData([$resource_object], 1), $includes, new LinkCollection([]));
$request->query = new ParameterBag([
'fields' => [
'node--article' => 'title,node_type,uid,field_tags',
'user--user' => 'name',
],
'include' => $include_param,
]);
$jsonapi_doc_object = $this $jsonapi_doc_object = $this
->getNormalizer() ->getNormalizer()
->normalize( ->normalize(
...@@ -487,11 +440,12 @@ public function testAliasFieldRouteException() { ...@@ -487,11 +440,12 @@ public function testAliasFieldRouteException() {
$this->assertSame('user_roles', $this->resourceTypeRepository->getByTypeName('user--user')->getPublicName('roles')); $this->assertSame('user_roles', $this->resourceTypeRepository->getByTypeName('user--user')->getPublicName('roles'));
// Create the request to fetch the articles and fetch included user. // Create the request to fetch the articles and fetch included user.
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$user = User::load($this->node->getOwnerId()); $user = User::load($this->node->getOwnerId());
$resource_object = ResourceObject::createFromEntity($resource_type, $this->node); $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
[$request, $user_resource_type] = $this->generateProphecies('user', 'user'); $user_resource_type = $this->container->get('jsonapi.resource_type.repository')->get('user', 'user');
$resource_object_user = LabelOnlyResourceObject::createFromEntity($user_resource_type, $user); $resource_object_user = LabelOnlyResourceObject::createFromEntity($user_resource_type, $user);
$includes = $this->includeResolver->resolve($resource_object_user, 'user_roles'); $includes = $this->includeResolver->resolve($resource_object_user, 'user_roles');
...@@ -534,7 +488,7 @@ public function testAliasFieldRouteException() { ...@@ -534,7 +488,7 @@ public function testAliasFieldRouteException() {
* @covers ::normalize * @covers ::normalize
*/ */
public function testNormalizeConfig() { public function testNormalizeConfig() {
[$request, $resource_type] = $this->generateProphecies('node_type', 'node_type'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node_type', 'node_type');
$resource_object = ResourceObject::createFromEntity($resource_type, $this->nodeType); $resource_object = ResourceObject::createFromEntity($resource_type, $this->nodeType);
$document_wrapper = new JsonApiDocumentTopLevel(new ResourceObjectData([$resource_object], 1), new NullIncludedData(), new LinkCollection([])); $document_wrapper = new JsonApiDocumentTopLevel(new ResourceObjectData([$resource_object], 1), new NullIncludedData(), new LinkCollection([]));
...@@ -567,7 +521,7 @@ public function testNormalizeConfig() { ...@@ -567,7 +521,7 @@ public function testNormalizeConfig() {
public function testDenormalize() { public function testDenormalize() {
$payload = '{"data":{"type":"article","attributes":{"title":"Testing article"}}}'; $payload = '{"data":{"type":"article","attributes":{"title":"Testing article"}}}';
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$node = $this $node = $this
->getNormalizer() ->getNormalizer()
->denormalize(Json::decode($payload), NULL, 'api_json', [ ->denormalize(Json::decode($payload), NULL, 'api_json', [
...@@ -636,8 +590,7 @@ public function testDenormalizeUuid() { ...@@ -636,8 +590,7 @@ public function testDenormalizeUuid() {
[$payload_data, $expected] = $this->denormalizeUuidProviderBuilder($configuration); [$payload_data, $expected] = $this->denormalizeUuidProviderBuilder($configuration);
$payload = Json::encode($payload_data); $payload = Json::encode($payload_data);
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$this->container->get('request_stack')->push($request);
try { try {
$node = $this $node = $this
->getNormalizer() ->getNormalizer()
...@@ -706,8 +659,7 @@ public function testDenormalizeInvalidTypeAndNoType() { ...@@ -706,8 +659,7 @@ public function testDenormalizeInvalidTypeAndNoType() {
// Test relationship member with invalid type. // Test relationship member with invalid type.
$payload = Json::encode($payload_data); $payload = Json::encode($payload_data);
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$this->container->get('request_stack')->push($request);
try { try {
$this $this
->getNormalizer() ->getNormalizer()
...@@ -725,8 +677,7 @@ public function testDenormalizeInvalidTypeAndNoType() { ...@@ -725,8 +677,7 @@ public function testDenormalizeInvalidTypeAndNoType() {
unset($payload_data['data']['relationships']['field_tags']['data'][0]['type']); unset($payload_data['data']['relationships']['field_tags']['data'][0]['type']);
$payload = Json::encode($payload_data); $payload = Json::encode($payload_data);
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$this->container->get('request_stack')->push($request);
try { try {
$this->container->get('jsonapi_test_normalizers_kernel.jsonapi_document_toplevel') $this->container->get('jsonapi_test_normalizers_kernel.jsonapi_document_toplevel')
->denormalize(Json::decode($payload), NULL, 'api_json', [ ->denormalize(Json::decode($payload), NULL, 'api_json', [
...@@ -800,15 +751,11 @@ protected function denormalizeUuidProviderBuilder(array $options) { ...@@ -800,15 +751,11 @@ protected function denormalizeUuidProviderBuilder(array $options) {
* *
* @param \Drupal\Core\Cache\CacheableMetadata $expected_metadata * @param \Drupal\Core\Cache\CacheableMetadata $expected_metadata
* The expected cacheable metadata. * The expected cacheable metadata.
* @param array|null $fields
* Fields to include in the response, keyed by resource type.
* @param array|null $includes
* Resources paths to include in the response.
* *
* @dataProvider testCacheableMetadataProvider * @dataProvider testCacheableMetadataProvider
*/ */
public function testCacheableMetadata(CacheableMetadata $expected_metadata, $fields = NULL, $includes = NULL) { public function testCacheableMetadata(CacheableMetadata $expected_metadata) {
[$request, $resource_type] = $this->generateProphecies('node', 'article'); $resource_type = $this->container->get('jsonapi.resource_type.repository')->get('node', 'article');
$resource_object = ResourceObject::createFromEntity($resource_type, $this->node); $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
$context = [ $context = [
'resource_type' => $resource_type, 'resource_type' => $resource_type,
...@@ -840,17 +787,6 @@ public function testCacheableMetadataProvider() { ...@@ -840,17 +787,6 @@ public function testCacheableMetadataProvider() {
]; ];
} }
/**
* Decorates a request with sparse fieldsets and includes.
*/
protected function decorateRequest(Request $request, array $fields = NULL, array $includes = NULL) {
$parameters = new ParameterBag();
$parameters->add($fields ? ['fields' => $fields] : []);
$parameters->add($includes ? ['include' => $includes] : []);
$request->query = $parameters;
return $request;
}
/** /**
* Helper to load the normalizer. * Helper to load the normalizer.
*/ */
...@@ -862,23 +798,4 @@ protected function getNormalizer() { ...@@ -862,23 +798,4 @@ protected function getNormalizer() {
return $normalizer_service; return $normalizer_service;
} }
/**
* Generates the prophecies for the mocked entity request.
*
* @param string $entity_type_id
* The ID of the entity type. Ex: node.
* @param string $bundle
* The bundle. Ex: article.
*
* @return array
* A numeric array containing the request and the ResourceType.
*
* @throws \Exception
*/
protected function generateProphecies($entity_type_id, $bundle) {
$resource_type = $this->container->get('jsonapi.resource_type.repository')->get($entity_type_id, $bundle);
return [new Request(), $resource_type];
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment