3 namespace Drupal\token\Tests;
5 use Drupal\node\Entity\NodeType;
6 use Drupal\node\Entity\Node;
7 use Drupal\file\Entity\File;
8 use Drupal\image\Entity\ImageStyle;
15 class TokenFieldUiTest extends TokenTestBase {
18 * @var \Drupal\Core\Session\AccountInterface
27 public static $modules = ['field_ui', 'node', 'image'];
32 public function setUp($modules = []) {
34 $this->adminUser = $this->drupalCreateUser(['administer content types', 'administer node fields']);
35 $this->drupalLogin($this->adminUser);
37 $node_type = NodeType::create([
40 'description' => "Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.",
44 entity_create('field_storage_config', array(
45 'field_name' => 'field_body',
46 'entity_type' => 'node',
47 'type' => 'text_with_summary',
49 entity_create('field_config', array(
50 'field_name' => 'field_body',
52 'entity_type' => 'node',
53 'bundle' => 'article',
55 entity_create('field_storage_config', array(
56 'field_name' => 'field_image',
57 'entity_type' => 'node',
60 entity_create('field_config', array(
61 'field_name' => 'field_image',
63 'entity_type' => 'node',
64 'bundle' => 'article',
66 entity_create('field_storage_config', array(
67 'field_name' => 'field_image_2',
68 'entity_type' => 'node',
71 entity_create('field_config', array(
72 'field_name' => 'field_image_2',
74 'entity_type' => 'node',
75 'bundle' => 'article',
77 entity_create('field_storage_config', array(
78 'field_name' => 'multivalued_field_image',
79 'entity_type' => 'node',
82 entity_create('field_config', array(
83 'field_name' => 'multivalued_field_image',
84 'label' => 'Multivalued field image',
85 'entity_type' => 'node',
86 'bundle' => 'article',
89 entity_get_form_display('node', 'article', 'default')
90 ->setComponent('field_body', [
91 'type' => 'text_textarea_with_summary',
94 'summary_rows' => '3',
101 public function testFileFieldUi() {
102 $this->drupalGet('admin/structure/types/manage/article/fields/node.article.field_image');
104 // Ensure the 'Browse available tokens' link is present and correct.
105 $this->assertLink('Browse available tokens.');
106 $this->assertLinkByHref('token/tree');
108 // Ensure that the default file directory value validates correctly.
109 $this->drupalPostForm(NULL, [], t('Save settings'));
110 $this->assertText(t('Saved Image configuration.'));
113 public function testFieldDescriptionTokens() {
115 'description' => 'The site is called [site:name].',
117 $this->drupalPostForm('admin/structure/types/manage/article/fields/node.article.field_body', $edit, 'Save settings');
119 $this->drupalGet('node/add/article');
120 $this->assertText('The site is called Drupal.');
124 * Test that tokens are correctly provided and replaced for the image fields.
126 public function testImageFieldTokens() {
127 // Generate 2 different test images.
128 file_unmanaged_copy(\Drupal::root() . '/core/misc/druplicon.png', 'public://example1.png');
129 file_unmanaged_copy(\Drupal::root() . '/core/misc/loading.gif', 'public://example2.gif');
131 // Resize the test images so that they will be scaled down during token
133 $image1 = \Drupal::service('image.factory')->get('public://example1.png');
134 $image1->resize(500, 500);
136 $image2 = \Drupal::service('image.factory')->get('public://example2.gif');
137 $image2->resize(500, 500);
140 /** @var \Drupal\file\Entity\File $image1 */
141 $image1 = File::create(['uri' => 'public://example1.png']);
143 /** @var \Drupal\file\Entity\File $image2 */
144 $image2 = File::create(['uri' => 'public://example2.gif']);
147 $node = Node::create([
148 'title' => 'Test node title',
152 'target_id' => $image1->id(),
157 'target_id' => $image2->id(),
160 'multivalued_field_image' => [
161 ['target_id' => $image1->id()],
162 ['target_id' => $image2->id()],
167 // Obtain the file size and dimension of the images that will be scaled
168 // down during token replacement by applying the styles here.
169 $style_thumbnail = ImageStyle::load('thumbnail');
170 $style_thumbnail->createDerivative('public://example1.png', 'public://styles/thumbnail/public/example1-test.png');
171 $style_thumbnail->createDerivative('public://example2.gif', 'public://styles/thumbnail/public/example2-test.gif');
172 $image_1_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example1-test.png');
173 $image_2_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example2-test.gif');
174 $style_medium = ImageStyle::load('medium');
175 $style_medium->createDerivative('public://example1.png', 'public://styles/medium/public/example1-test.png');
176 $style_medium->createDerivative('public://example2.gif', 'public://styles/medium/public/example2-test.gif');
177 $image_1_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example1-test.png');
178 $image_2_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example2-test.gif');
179 $style_large = ImageStyle::load('large');
180 $style_large->createDerivative('public://example1.png', 'public://styles/large/public/example1-test.png');
181 $style_large->createDerivative('public://example2.gif', 'public://styles/large/public/example2-test.gif');
182 $image_1_large = \Drupal::service('image.factory')->get('public://styles/large/public/example1-test.png');
183 $image_2_large = \Drupal::service('image.factory')->get('public://styles/large/public/example2-test.gif');
185 // Delete the image derivatives, to make sure they are re-created.
186 unlink('public://styles/thumbnail/public/example1-test.png');
187 unlink('public://styles/medium/public/example1-test.png');
188 unlink('public://styles/large/public/example1-test.png');
189 unlink('public://styles/thumbnail/public/example2-test.gif');
190 unlink('public://styles/medium/public/example2-test.gif');
191 unlink('public://styles/large/public/example2-test.gif');
195 'field_image:thumbnail:mimetype' => 'image/png',
196 'field_image:medium:mimetype' => 'image/png',
197 'field_image:large:mimetype' => 'image/png',
198 'field_image:thumbnail:filesize' => $image_1_thumbnail->getFileSize(),
199 'field_image:medium:filesize' => $image_1_medium->getFileSize(),
200 'field_image:large:filesize' => $image_1_large->getFileSize(),
201 'field_image:thumbnail:height' => '100',
202 'field_image:medium:height' => '220',
203 'field_image:large:height' => '480',
204 'field_image:thumbnail:width' => '100',
205 'field_image:medium:width' => '220',
206 'field_image:large:width' => '480',
207 'field_image:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
208 'field_image:medium:uri' => 'public://styles/medium/public/example1.png',
209 'field_image:large:uri' => 'public://styles/large/public/example1.png',
210 'field_image:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'),
211 'field_image:medium:url' => $style_medium->buildUrl('public://example1.png'),
212 'field_image:large:url' => $style_large->buildUrl('public://example1.png'),
213 'field_image:thumbnail' => $style_thumbnail->buildUrl('public://example1.png'),
214 'field_image:medium' => $style_medium->buildUrl('public://example1.png'),
215 'field_image:large' => $style_large->buildUrl('public://example1.png'),
217 'field_image_2:thumbnail:mimetype' => 'image/gif',
218 'field_image_2:medium:mimetype' => 'image/gif',
219 'field_image_2:large:mimetype' => 'image/gif',
220 'field_image_2:thumbnail:filesize' => $image_2_thumbnail->getFileSize(),
221 'field_image_2:medium:filesize' => $image_2_medium->getFileSize(),
222 'field_image_2:large:filesize' => $image_2_large->getFileSize(),
223 'field_image_2:thumbnail:height' => '100',
224 'field_image_2:medium:height' => '220',
225 'field_image_2:large:height' => '480',
226 'field_image_2:thumbnail:width' => '100',
227 'field_image_2:medium:width' => '220',
228 'field_image_2:large:width' => '480',
229 'field_image_2:thumbnail:uri' => 'public://styles/thumbnail/public/example2.gif',
230 'field_image_2:medium:uri' => 'public://styles/medium/public/example2.gif',
231 'field_image_2:large:uri' => 'public://styles/large/public/example2.gif',
232 'field_image_2:thumbnail:url' => $style_thumbnail->buildUrl('public://example2.gif'),
233 'field_image_2:medium:url' => $style_medium->buildUrl('public://example2.gif'),
234 'field_image_2:large:url' => $style_large->buildUrl('public://example2.gif'),
235 'field_image_2:thumbnail' => $style_thumbnail->buildUrl('public://example2.gif'),
236 'field_image_2:medium' => $style_medium->buildUrl('public://example2.gif'),
237 'field_image_2:large' => $style_large->buildUrl('public://example2.gif'),
238 // multivalued_field_image:0, test for thumbnail image style only.
239 'multivalued_field_image:0:thumbnail:mimetype' => 'image/png',
240 'multivalued_field_image:0:thumbnail:filesize' => $image_1_thumbnail->getFileSize(),
241 'multivalued_field_image:0:thumbnail:height' => '100',
242 'multivalued_field_image:0:thumbnail:width' => '100',
243 'multivalued_field_image:0:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
244 'multivalued_field_image:0:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'),
245 'multivalued_field_image:0:thumbnail' => $style_thumbnail->buildUrl('public://example1.png'),
246 // multivalued_field_image:1, test for medium image style only.
247 'multivalued_field_image:1:medium:mimetype' => 'image/gif',
248 'multivalued_field_image:1:medium:filesize' => $image_2_medium->getFileSize(),
249 'multivalued_field_image:1:medium:height' => '220',
250 'multivalued_field_image:1:medium:width' => '220',
251 'multivalued_field_image:1:medium:uri' => 'public://styles/medium/public/example2.gif',
252 'multivalued_field_image:1:medium:url' => $style_medium->buildUrl('public://example2.gif'),
253 'multivalued_field_image:1:medium' => $style_medium->buildUrl('public://example2.gif'),
255 $this->assertTokens('node', ['node' => $node], $tokens);
257 /** @var \Drupal\token\Token $token_service */
258 $token_service = \Drupal::service('token');
260 // Test one of the image style's token info for cardinality 1 image field.
261 $token_info = $token_service->getTokenInfo('node-field_image', 'thumbnail');
262 $this->assertEqual('Thumbnail (100×100)', $token_info['name']);
263 $this->assertEqual('Represents the image in the given image style.', $token_info['description']);
265 // Test one of the image style's token info for a multivalued image field.
266 $token_info = $token_service->getTokenInfo('node-multivalued_field_image', 'medium');
267 $this->assertEqual('Medium (220×220)', $token_info['name']);
268 $this->assertEqual('Represents the image in the given image style.', $token_info['description']);
270 // Test few of the image styles' properties token info.
271 $token_info = $token_service->getTokenInfo('image_with_image_style', 'mimetype');
272 $this->assertEqual('MIME type', $token_info['name']);
273 $this->assertEqual('The MIME type (image/png, image/bmp, etc.) of the image.', $token_info['description']);
275 $token_info = $token_service->getTokenInfo('image_with_image_style', 'filesize');
276 $this->assertEqual('File size', $token_info['name']);
277 $this->assertEqual('The file size of the image.', $token_info['description']);