function LinkCollectionNormalizerTest::testLinkAccess

Same name in other branches
  1. 9 core/modules/jsonapi/tests/src/Kernel/Normalizer/LinkCollectionNormalizerTest.php \Drupal\Tests\jsonapi\Kernel\Normalizer\LinkCollectionNormalizerTest::testLinkAccess()
  2. 11.x core/modules/jsonapi/tests/src/Kernel/Normalizer/LinkCollectionNormalizerTest.php \Drupal\Tests\jsonapi\Kernel\Normalizer\LinkCollectionNormalizerTest::testLinkAccess()

Tests the link collection normalizer.

@dataProvider linkAccessTestData

File

core/modules/jsonapi/tests/src/Kernel/Normalizer/LinkCollectionNormalizerTest.php, line 113

Class

LinkCollectionNormalizerTest
@coversDefaultClass \Drupal\jsonapi\Normalizer\LinkCollectionNormalizer @group jsonapi

Namespace

Drupal\Tests\jsonapi\Kernel\Normalizer

Code

public function testLinkAccess($current_user_id, $edit_form_uid, $expected_link_keys, $expected_cache_contexts) : void {
    // Get the current user and an edit-form URL.
    foreach ($this->testUsers as $user) {
        $uid = (int) $user->id();
        if ($uid === $current_user_id) {
            $current_user = $user;
        }
        if ($uid === $edit_form_uid) {
            $edit_form_url = $user->toUrl('edit-form');
        }
    }
    assert(isset($current_user));
    assert(isset($edit_form_url));
    // Create a link collection to normalize.
    $mock_resource_object = $this->createMock(ResourceObject::class);
    $link_collection = new LinkCollection([
        'edit-form' => new Link(new CacheableMetadata(), $edit_form_url, 'edit-form', [
            'title' => 'Edit',
        ]),
    ]);
    $link_collection = $link_collection->withContext($mock_resource_object);
    // Normalize the collection.
    $actual_normalization = $this->getNormalizer($current_user)
        ->normalize($link_collection);
    // Check that it returned the expected value object.
    $this->assertInstanceOf(CacheableNormalization::class, $actual_normalization);
    // Get the raw normalized data.
    $actual_data = $actual_normalization->getNormalization();
    $this->assertIsArray($actual_data);
    // Check that the expected links are present and unexpected links are
    // absent.
    $actual_link_keys = array_keys($actual_data);
    sort($expected_link_keys);
    sort($actual_link_keys);
    $this->assertSame($expected_link_keys, $actual_link_keys);
    // Check that the expected cache contexts were added.
    $actual_cache_contexts = $actual_normalization->getCacheContexts();
    sort($expected_cache_contexts);
    sort($actual_cache_contexts);
    $this->assertSame($expected_cache_contexts, $actual_cache_contexts);
    // If the edit-form link was present, check that it has the correct href.
    if (isset($actual_data['edit-form'])) {
        $this->assertSame($actual_data['edit-form'], [
            'href' => $edit_form_url->setAbsolute()
                ->toString(),
            'meta' => [
                'title' => 'Edit',
            ],
        ]);
    }
}

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