Skip to content
Snippets Groups Projects

Issue #3112449: Token for link field URL

Open Edouard Cunibil requested to merge issue/token-3112449:3112449-token-for-link into 8.x-1.x
Files
2
@@ -2,8 +2,10 @@
namespace Drupal\Tests\token\Functional;
use Drupal\Core\Url;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\link\LinkItemInterface;
use Drupal\file\Entity\File;
use Drupal\image\Entity\ImageStyle;
use Drupal\node\Entity\Node;
@@ -24,7 +26,7 @@ class TokenFieldUiTest extends TokenTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['field_ui', 'node', 'image'];
protected static $modules = ['field_ui', 'node', 'image', 'link'];
/**
* {@inheritdoc}
@@ -85,6 +87,46 @@ class TokenFieldUiTest extends TokenTestBase {
'entity_type' => 'node',
'bundle' => 'article',
])->save();
FieldStorageConfig::create([
'field_name' => 'field_link',
'entity_type' => 'node',
'type' => 'link',
])->save();
FieldConfig::create([
'field_name' => 'field_link',
'label' => 'Link',
'entity_type' => 'node',
'bundle' => 'article',
'settings' => [
'link_type' => LinkItemInterface::LINK_EXTERNAL,
],
])->save();
FieldStorageConfig::create([
'field_name' => 'field_link_2',
'entity_type' => 'node',
'type' => 'link',
])->save();
FieldConfig::create([
'field_name' => 'field_link_2',
'label' => 'Link 2',
'entity_type' => 'node',
'bundle' => 'article',
'settings' => [
'link_type' => LinkItemInterface::LINK_INTERNAL,
],
])->save();
FieldStorageConfig::create([
'field_name' => 'multivalued_field_link',
'entity_type' => 'node',
'type' => 'link',
'cardinality' => -1,
])->save();
FieldConfig::create([
'field_name' => 'multivalued_field_link',
'label' => 'Multivalued field link',
'entity_type' => 'node',
'bundle' => 'article',
])->save();
\Drupal::service('entity_display.repository')->getFormDisplay('node', 'article', 'default')
->setComponent('field_body', [
@@ -286,4 +328,95 @@ class TokenFieldUiTest extends TokenTestBase {
$this->assertEquals('The file size of the image.', $token_info['description']);
}
/**
* Test that tokens are correctly provided and replaced for the link fields.
*/
public function testLinkFieldTokens() {
$node = Node::create([
'title' => 'Test node 2 title',
'type' => 'article',
]);
$node->save();
$this->createPathAlias('/node/' . $node->id(), '/foo/bar');
$node2 = Node::create([
'title' => 'Test node title',
'type' => 'article',
'field_link' => [
'uri' => 'http://www.drupal.org/foo/bar',
'title' => 'Drupal',
],
'field_link_2' => [
'uri' => 'entity:node/' . $node->id()
],
'multivalued_field_link' => [
[
'uri' => 'http://www.drupal.org/foo/bar',
'title' => 'Drupal',
],
[
'uri' => 'http://www.drupal.org/foo/bar?param1&param2',
'title' => 'Drupal',
],
['uri' => 'entity:node/' . $node->id()],
],
]);
$node2->save();
$url = new Url('entity.node.canonical', ['node' => $node->id()]);
$cloned_url = clone $url;
$unaliased_url = $cloned_url->setAbsolute()->setOption('alias', TRUE);
$tokens = [
// field_link
'field_link:title' => 'Drupal',
'field_link:uri' => 'http://www.drupal.org/foo/bar',
'field_link:path' => 'http://www.drupal.org/foo/bar',
'field_link:url' => 'http://www.drupal.org/foo/bar',
'field_link:url:absolute' => 'http://www.drupal.org/foo/bar',
'field_link:url:brief' => 'www.drupal.org/foo/bar',
'field_link:url:path' => '/',
'field_link:url:relative' => 'http://www.drupal.org/foo/bar',
'field_link:url:unaliased' => 'http://www.drupal.org/foo/bar',
// field_link_2
'field_link_2:uri' => 'entity:node/' . $node->id(),
'field_link_2:path' => '/foo/bar',
'field_link_2:url' => '/foo/bar',
'field_link_2:url:absolute' => $url->setAbsolute()->toString(),
'field_link_2:url:brief' => preg_replace(['!^https?://!', '!/$!'], '', $url->setAbsolute()->toString()),
'field_link_2:url:path' => '/foo/bar',
'field_link_2:url:relative' => '/foo/bar',
'field_link_2:url:unaliased' => $unaliased_url->toString(),
'field_link_2:url:args:value:0' => 'foo',
// multivalued_field_link
'multivalued_field_link:0:title' => 'Drupal',
'multivalued_field_link:0:uri' => 'http://www.drupal.org/foo/bar',
'multivalued_field_link:0:path' => 'http://www.drupal.org/foo/bar',
'multivalued_field_link:0:url' => 'http://www.drupal.org/foo/bar',
'multivalued_field_link:0:url:absolute' => 'http://www.drupal.org/foo/bar',
'multivalued_field_link:0:url:brief' => 'www.drupal.org/foo/bar',
'multivalued_field_link:0:url:path' => '/',
'multivalued_field_link:0:url:relative' => 'http://www.drupal.org/foo/bar',
'multivalued_field_link:0:url:unaliased' => 'http://www.drupal.org/foo/bar',
'multivalued_field_link:1:title' => 'Drupal',
'multivalued_field_link:1:uri' => 'http://www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:1:path' => 'http://www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:1:url' => 'http://www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:1:url:absolute' => 'http://www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:1:url:brief' => 'www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:1:url:path' => '/',
'multivalued_field_link:1:url:relative' => 'http://www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:1:url:unaliased' => 'http://www.drupal.org/foo/bar?param1&param2',
'multivalued_field_link:2:uri' => 'entity:node/' . $node->id(),
'multivalued_field_link:2:path' => '/foo/bar',
'multivalued_field_link:2:url' => '/foo/bar',
'multivalued_field_link:2:url:absolute' => $url->setAbsolute()->toString(),
'multivalued_field_link:2:url:brief' => preg_replace(['!^https?://!', '!/$!'], '', $url->setAbsolute()->toString()),
'multivalued_field_link:2:url:path' => '/foo/bar',
'multivalued_field_link:2:url:relative' => '/foo/bar',
'multivalued_field_link:2:url:unaliased' => $unaliased_url->toString(),
'multivalued_field_link:2:url:args:value:0' => 'foo',
];
$this->assertTokens('node', ['node' => $node2], $tokens);
}
}
Loading