function EntityLinkTest::testLink

Tests for the Entity::link() method

@covers ::link

@dataProvider providerTestLink

@group legacy

Note this is only a legacy test because it triggers a call to \Drupal\Core\Entity\EntityTypeInterface::getLabelCallback() which is mocked and triggers a deprecation error. Remove when ::getLabelCallback() is removed.

File

core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php, line 69

Class

EntityLinkTest
@coversDefaultClass <a href="/api/drupal/core%21lib%21Drupal%21Core%21Entity%21Entity.php/class/Entity/8.9.x" title="Defines a base entity class." class="local">\Drupal\Core\Entity\Entity</a> @group Entity

Namespace

Drupal\Tests\Core\Entity

Code

public function testLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
    $language = new Language([
        'id' => 'es',
    ]);
    $link_options += [
        'language' => $language,
    ];
    $this->languageManager
        ->expects($this->any())
        ->method('getLanguage')
        ->with('es')
        ->willReturn($language);
    $route_name_map = [
        'canonical' => 'entity.test_entity_type.canonical',
        'edit-form' => 'entity.test_entity_type.edit_form',
    ];
    $route_name = $route_name_map[$link_rel];
    $entity_id = 'test_entity_id';
    $entity_type_id = 'test_entity_type';
    $expected = '<a href="/test_entity_type/test_entity_id">' . $expected_text . '</a>';
    $entity_type = $this->createMock('Drupal\\Core\\Entity\\EntityTypeInterface');
    $entity_type->expects($this->once())
        ->method('getLinkTemplates')
        ->willReturn($route_name_map);
    $entity_type->expects($this->any())
        ->method('getKey')
        ->willReturnMap([
        [
            'label',
            'label',
        ],
        [
            'langcode',
            'langcode',
        ],
    ]);
    $this->entityTypeManager
        ->expects($this->any())
        ->method('getDefinition')
        ->with($entity_type_id)
        ->will($this->returnValue($entity_type));
    
    /** @var \Drupal\Core\Entity\Entity $entity */
    $entity = $this->getMockForAbstractClass('Drupal\\Core\\Entity\\EntityBase', [
        [
            'id' => $entity_id,
            'label' => $entity_label,
            'langcode' => 'es',
        ],
        $entity_type_id,
    ]);
    $expected_link = Link::createFromRoute($expected_text, $route_name, [
        $entity_type_id => $entity_id,
    ], [
        'entity_type' => $entity_type_id,
        'entity' => $entity,
    ] + $link_options)->setLinkGenerator($this->linkGenerator);
    $this->linkGenerator
        ->expects($this->once())
        ->method('generateFromLink')
        ->with($this->equalTo($expected_link))
        ->willReturn($expected);
    $this->assertSame($expected, $entity->toLink($link_text, $link_rel, $link_options)
        ->toString());
}

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