View source
<?php
namespace Drupal\Tests\token\Functional;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\node\Entity\NodeType;
use Drupal\node\Entity\Node;
use Drupal\file\Entity\File;
use Drupal\image\Entity\ImageStyle;
class TokenFieldUiTest extends TokenTestBase {
protected $adminUser;
public static $modules = [
'field_ui',
'node',
'image',
];
public function setUp($modules = []) {
parent::setUp();
$this->adminUser = $this
->drupalCreateUser([
'administer content types',
'administer node fields',
]);
$this
->drupalLogin($this->adminUser);
$node_type = NodeType::create([
'type' => 'article',
'name' => 'Article',
'description' => "Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.",
]);
$node_type
->save();
FieldStorageConfig::create([
'field_name' => 'field_body',
'entity_type' => 'node',
'type' => 'text_with_summary',
])
->save();
FieldConfig::create([
'field_name' => 'field_body',
'label' => 'Body',
'entity_type' => 'node',
'bundle' => 'article',
])
->save();
FieldStorageConfig::create([
'field_name' => 'field_image',
'entity_type' => 'node',
'type' => 'image',
])
->save();
FieldConfig::create([
'field_name' => 'field_image',
'label' => 'Image',
'entity_type' => 'node',
'bundle' => 'article',
])
->save();
FieldStorageConfig::create([
'field_name' => 'field_image_2',
'entity_type' => 'node',
'type' => 'image',
])
->save();
FieldConfig::create([
'field_name' => 'field_image_2',
'label' => 'Image 2',
'entity_type' => 'node',
'bundle' => 'article',
])
->save();
FieldStorageConfig::create([
'field_name' => 'multivalued_field_image',
'entity_type' => 'node',
'type' => 'image',
])
->save();
FieldConfig::create([
'field_name' => 'multivalued_field_image',
'label' => 'Multivalued field image',
'entity_type' => 'node',
'bundle' => 'article',
])
->save();
\Drupal::service('entity_display.repository')
->getFormDisplay('node', 'article', 'default')
->setComponent('field_body', [
'type' => 'text_textarea_with_summary',
'settings' => [
'rows' => '9',
'summary_rows' => '3',
],
'weight' => 5,
])
->save();
}
public function testFileFieldUi() {
$this
->drupalGet('admin/structure/types/manage/article/fields/node.article.field_image');
$this
->assertSession()
->linkExists('Browse available tokens.');
$this
->assertSession()
->linkByHrefExists('token/tree');
$this
->drupalPostForm(NULL, [], 'Save settings');
$this
->assertText(t('Saved Image configuration.'));
}
public function testFieldDescriptionTokens() {
$edit = [
'description' => 'The site is called [site:name].',
];
$this
->drupalPostForm('admin/structure/types/manage/article/fields/node.article.field_body', $edit, 'Save settings');
$this
->drupalGet('node/add/article');
$this
->assertText('The site is called Drupal.');
}
public function testImageFieldTokens() {
$file_system = \Drupal::service('file_system');
$file_system
->copy(\Drupal::root() . '/core/misc/druplicon.png', 'public://example1.png');
$file_system
->copy(\Drupal::root() . '/core/misc/loading.gif', 'public://example2.gif');
$image1 = \Drupal::service('image.factory')
->get('public://example1.png');
$image1
->resize(500, 500);
$image1
->save();
$image2 = \Drupal::service('image.factory')
->get('public://example2.gif');
$image2
->resize(500, 500);
$image2
->save();
$image1 = File::create([
'uri' => 'public://example1.png',
]);
$image1
->save();
$image2 = File::create([
'uri' => 'public://example2.gif',
]);
$image2
->save();
$node = Node::create([
'title' => 'Test node title',
'type' => 'article',
'field_image' => [
[
'target_id' => $image1
->id(),
],
],
'field_image_2' => [
[
'target_id' => $image2
->id(),
],
],
'multivalued_field_image' => [
[
'target_id' => $image1
->id(),
],
[
'target_id' => $image2
->id(),
],
],
]);
$node
->save();
$style_thumbnail = ImageStyle::load('thumbnail');
$style_thumbnail
->createDerivative('public://example1.png', 'public://styles/thumbnail/public/example1-test.png');
$style_thumbnail
->createDerivative('public://example2.gif', 'public://styles/thumbnail/public/example2-test.gif');
$image_1_thumbnail = \Drupal::service('image.factory')
->get('public://styles/thumbnail/public/example1-test.png');
$image_2_thumbnail = \Drupal::service('image.factory')
->get('public://styles/thumbnail/public/example2-test.gif');
$style_medium = ImageStyle::load('medium');
$style_medium
->createDerivative('public://example1.png', 'public://styles/medium/public/example1-test.png');
$style_medium
->createDerivative('public://example2.gif', 'public://styles/medium/public/example2-test.gif');
$image_1_medium = \Drupal::service('image.factory')
->get('public://styles/medium/public/example1-test.png');
$image_2_medium = \Drupal::service('image.factory')
->get('public://styles/medium/public/example2-test.gif');
$style_large = ImageStyle::load('large');
$style_large
->createDerivative('public://example1.png', 'public://styles/large/public/example1-test.png');
$style_large
->createDerivative('public://example2.gif', 'public://styles/large/public/example2-test.gif');
$image_1_large = \Drupal::service('image.factory')
->get('public://styles/large/public/example1-test.png');
$image_2_large = \Drupal::service('image.factory')
->get('public://styles/large/public/example2-test.gif');
unlink('public://styles/thumbnail/public/example1-test.png');
unlink('public://styles/medium/public/example1-test.png');
unlink('public://styles/large/public/example1-test.png');
unlink('public://styles/thumbnail/public/example2-test.gif');
unlink('public://styles/medium/public/example2-test.gif');
unlink('public://styles/large/public/example2-test.gif');
$tokens = [
'field_image:thumbnail:mimetype' => 'image/png',
'field_image:medium:mimetype' => 'image/png',
'field_image:large:mimetype' => 'image/png',
'field_image:thumbnail:filesize' => $image_1_thumbnail
->getFileSize(),
'field_image:medium:filesize' => $image_1_medium
->getFileSize(),
'field_image:large:filesize' => $image_1_large
->getFileSize(),
'field_image:thumbnail:height' => '100',
'field_image:medium:height' => '220',
'field_image:large:height' => '480',
'field_image:thumbnail:width' => '100',
'field_image:medium:width' => '220',
'field_image:large:width' => '480',
'field_image:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
'field_image:medium:uri' => 'public://styles/medium/public/example1.png',
'field_image:large:uri' => 'public://styles/large/public/example1.png',
'field_image:thumbnail:url' => $style_thumbnail
->buildUrl('public://example1.png'),
'field_image:medium:url' => $style_medium
->buildUrl('public://example1.png'),
'field_image:large:url' => $style_large
->buildUrl('public://example1.png'),
'field_image:thumbnail' => $style_thumbnail
->buildUrl('public://example1.png'),
'field_image:medium' => $style_medium
->buildUrl('public://example1.png'),
'field_image:large' => $style_large
->buildUrl('public://example1.png'),
'field_image_2:thumbnail:mimetype' => 'image/gif',
'field_image_2:medium:mimetype' => 'image/gif',
'field_image_2:large:mimetype' => 'image/gif',
'field_image_2:thumbnail:filesize' => $image_2_thumbnail
->getFileSize(),
'field_image_2:medium:filesize' => $image_2_medium
->getFileSize(),
'field_image_2:large:filesize' => $image_2_large
->getFileSize(),
'field_image_2:thumbnail:height' => '100',
'field_image_2:medium:height' => '220',
'field_image_2:large:height' => '480',
'field_image_2:thumbnail:width' => '100',
'field_image_2:medium:width' => '220',
'field_image_2:large:width' => '480',
'field_image_2:thumbnail:uri' => 'public://styles/thumbnail/public/example2.gif',
'field_image_2:medium:uri' => 'public://styles/medium/public/example2.gif',
'field_image_2:large:uri' => 'public://styles/large/public/example2.gif',
'field_image_2:thumbnail:url' => $style_thumbnail
->buildUrl('public://example2.gif'),
'field_image_2:medium:url' => $style_medium
->buildUrl('public://example2.gif'),
'field_image_2:large:url' => $style_large
->buildUrl('public://example2.gif'),
'field_image_2:thumbnail' => $style_thumbnail
->buildUrl('public://example2.gif'),
'field_image_2:medium' => $style_medium
->buildUrl('public://example2.gif'),
'field_image_2:large' => $style_large
->buildUrl('public://example2.gif'),
'multivalued_field_image:0:thumbnail:mimetype' => 'image/png',
'multivalued_field_image:0:thumbnail:filesize' => $image_1_thumbnail
->getFileSize(),
'multivalued_field_image:0:thumbnail:height' => '100',
'multivalued_field_image:0:thumbnail:width' => '100',
'multivalued_field_image:0:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
'multivalued_field_image:0:thumbnail:url' => $style_thumbnail
->buildUrl('public://example1.png'),
'multivalued_field_image:0:thumbnail' => $style_thumbnail
->buildUrl('public://example1.png'),
'multivalued_field_image:1:medium:mimetype' => 'image/gif',
'multivalued_field_image:1:medium:filesize' => $image_2_medium
->getFileSize(),
'multivalued_field_image:1:medium:height' => '220',
'multivalued_field_image:1:medium:width' => '220',
'multivalued_field_image:1:medium:uri' => 'public://styles/medium/public/example2.gif',
'multivalued_field_image:1:medium:url' => $style_medium
->buildUrl('public://example2.gif'),
'multivalued_field_image:1:medium' => $style_medium
->buildUrl('public://example2.gif'),
];
$this
->assertTokens('node', [
'node' => $node,
], $tokens);
$token_service = \Drupal::service('token');
$token_info = $token_service
->getTokenInfo('node-field_image', 'thumbnail');
$this
->assertEquals('Thumbnail (100×100)', $token_info['name']);
$this
->assertEquals('Represents the image in the given image style.', $token_info['description']);
$token_info = $token_service
->getTokenInfo('node-multivalued_field_image', 'medium');
$this
->assertEquals('Medium (220×220)', $token_info['name']);
$this
->assertEquals('Represents the image in the given image style.', $token_info['description']);
$token_info = $token_service
->getTokenInfo('image_with_image_style', 'mimetype');
$this
->assertEquals('MIME type', $token_info['name']);
$this
->assertEquals('The MIME type (image/png, image/bmp, etc.) of the image.', $token_info['description']);
$token_info = $token_service
->getTokenInfo('image_with_image_style', 'filesize');
$this
->assertEquals('File size', $token_info['name']);
$this
->assertEquals('The file size of the image.', $token_info['description']);
}
}