3 namespace Drupal\token\Tests;
5 use Drupal\field\Entity\FieldConfig;
6 use Drupal\field\Entity\FieldStorageConfig;
7 use Drupal\node\Entity\NodeType;
8 use Drupal\node\Entity\Node;
9 use Drupal\file\Entity\File;
10 use Drupal\image\Entity\ImageStyle;
17 class TokenFieldUiTest extends TokenTestBase {
20 * @var \Drupal\Core\Session\AccountInterface
29 public static $modules = ['field_ui', 'node', 'image'];
34 public function setUp($modules = []) {
36 $this->adminUser = $this->drupalCreateUser(['administer content types', 'administer node fields']);
37 $this->drupalLogin($this->adminUser);
39 $node_type = NodeType::create([
42 'description' => "Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.",
46 FieldStorageConfig::create([
47 'field_name' => 'field_body',
48 'entity_type' => 'node',
49 'type' => 'text_with_summary',
52 'field_name' => 'field_body',
54 'entity_type' => 'node',
55 'bundle' => 'article',
57 FieldStorageConfig::create([
58 'field_name' => 'field_image',
59 'entity_type' => 'node',
63 'field_name' => 'field_image',
65 'entity_type' => 'node',
66 'bundle' => 'article',
68 FieldStorageConfig::create([
69 'field_name' => 'field_image_2',
70 'entity_type' => 'node',
74 'field_name' => 'field_image_2',
76 'entity_type' => 'node',
77 'bundle' => 'article',
79 FieldStorageConfig::create([
80 'field_name' => 'multivalued_field_image',
81 'entity_type' => 'node',
85 'field_name' => 'multivalued_field_image',
86 'label' => 'Multivalued field image',
87 'entity_type' => 'node',
88 'bundle' => 'article',
91 entity_get_form_display('node', 'article', 'default')
92 ->setComponent('field_body', [
93 'type' => 'text_textarea_with_summary',
96 'summary_rows' => '3',
103 public function testFileFieldUi() {
104 $this->drupalGet('admin/structure/types/manage/article/fields/node.article.field_image');
106 // Ensure the 'Browse available tokens' link is present and correct.
107 $this->assertLink('Browse available tokens.');
108 $this->assertLinkByHref('token/tree');
110 // Ensure that the default file directory value validates correctly.
111 $this->drupalPostForm(NULL, [], t('Save settings'));
112 $this->assertText(t('Saved Image configuration.'));
115 public function testFieldDescriptionTokens() {
117 'description' => 'The site is called [site:name].',
119 $this->drupalPostForm('admin/structure/types/manage/article/fields/node.article.field_body', $edit, 'Save settings');
121 $this->drupalGet('node/add/article');
122 $this->assertText('The site is called Drupal.');
126 * Test that tokens are correctly provided and replaced for the image fields.
128 public function testImageFieldTokens() {
129 // Generate 2 different test images.
130 file_unmanaged_copy(\Drupal::root() . '/core/misc/druplicon.png', 'public://example1.png');
131 file_unmanaged_copy(\Drupal::root() . '/core/misc/loading.gif', 'public://example2.gif');
133 // Resize the test images so that they will be scaled down during token
135 $image1 = \Drupal::service('image.factory')->get('public://example1.png');
136 $image1->resize(500, 500);
138 $image2 = \Drupal::service('image.factory')->get('public://example2.gif');
139 $image2->resize(500, 500);
142 /** @var \Drupal\file\Entity\File $image1 */
143 $image1 = File::create(['uri' => 'public://example1.png']);
145 /** @var \Drupal\file\Entity\File $image2 */
146 $image2 = File::create(['uri' => 'public://example2.gif']);
149 $node = Node::create([
150 'title' => 'Test node title',
154 'target_id' => $image1->id(),
159 'target_id' => $image2->id(),
162 'multivalued_field_image' => [
163 ['target_id' => $image1->id()],
164 ['target_id' => $image2->id()],
169 // Obtain the file size and dimension of the images that will be scaled
170 // down during token replacement by applying the styles here.
171 $style_thumbnail = ImageStyle::load('thumbnail');
172 $style_thumbnail->createDerivative('public://example1.png', 'public://styles/thumbnail/public/example1-test.png');
173 $style_thumbnail->createDerivative('public://example2.gif', 'public://styles/thumbnail/public/example2-test.gif');
174 $image_1_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example1-test.png');
175 $image_2_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example2-test.gif');
176 $style_medium = ImageStyle::load('medium');
177 $style_medium->createDerivative('public://example1.png', 'public://styles/medium/public/example1-test.png');
178 $style_medium->createDerivative('public://example2.gif', 'public://styles/medium/public/example2-test.gif');
179 $image_1_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example1-test.png');
180 $image_2_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example2-test.gif');
181 $style_large = ImageStyle::load('large');
182 $style_large->createDerivative('public://example1.png', 'public://styles/large/public/example1-test.png');
183 $style_large->createDerivative('public://example2.gif', 'public://styles/large/public/example2-test.gif');
184 $image_1_large = \Drupal::service('image.factory')->get('public://styles/large/public/example1-test.png');
185 $image_2_large = \Drupal::service('image.factory')->get('public://styles/large/public/example2-test.gif');
187 // Delete the image derivatives, to make sure they are re-created.
188 unlink('public://styles/thumbnail/public/example1-test.png');
189 unlink('public://styles/medium/public/example1-test.png');
190 unlink('public://styles/large/public/example1-test.png');
191 unlink('public://styles/thumbnail/public/example2-test.gif');
192 unlink('public://styles/medium/public/example2-test.gif');
193 unlink('public://styles/large/public/example2-test.gif');
197 'field_image:thumbnail:mimetype' => 'image/png',
198 'field_image:medium:mimetype' => 'image/png',
199 'field_image:large:mimetype' => 'image/png',
200 'field_image:thumbnail:filesize' => $image_1_thumbnail->getFileSize(),
201 'field_image:medium:filesize' => $image_1_medium->getFileSize(),
202 'field_image:large:filesize' => $image_1_large->getFileSize(),
203 'field_image:thumbnail:height' => '100',
204 'field_image:medium:height' => '220',
205 'field_image:large:height' => '480',
206 'field_image:thumbnail:width' => '100',
207 'field_image:medium:width' => '220',
208 'field_image:large:width' => '480',
209 'field_image:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
210 'field_image:medium:uri' => 'public://styles/medium/public/example1.png',
211 'field_image:large:uri' => 'public://styles/large/public/example1.png',
212 'field_image:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'),
213 'field_image:medium:url' => $style_medium->buildUrl('public://example1.png'),
214 'field_image:large:url' => $style_large->buildUrl('public://example1.png'),
215 'field_image:thumbnail' => $style_thumbnail->buildUrl('public://example1.png'),
216 'field_image:medium' => $style_medium->buildUrl('public://example1.png'),
217 'field_image:large' => $style_large->buildUrl('public://example1.png'),
219 'field_image_2:thumbnail:mimetype' => 'image/gif',
220 'field_image_2:medium:mimetype' => 'image/gif',
221 'field_image_2:large:mimetype' => 'image/gif',
222 'field_image_2:thumbnail:filesize' => $image_2_thumbnail->getFileSize(),
223 'field_image_2:medium:filesize' => $image_2_medium->getFileSize(),
224 'field_image_2:large:filesize' => $image_2_large->getFileSize(),
225 'field_image_2:thumbnail:height' => '100',
226 'field_image_2:medium:height' => '220',
227 'field_image_2:large:height' => '480',
228 'field_image_2:thumbnail:width' => '100',
229 'field_image_2:medium:width' => '220',
230 'field_image_2:large:width' => '480',
231 'field_image_2:thumbnail:uri' => 'public://styles/thumbnail/public/example2.gif',
232 'field_image_2:medium:uri' => 'public://styles/medium/public/example2.gif',
233 'field_image_2:large:uri' => 'public://styles/large/public/example2.gif',
234 'field_image_2:thumbnail:url' => $style_thumbnail->buildUrl('public://example2.gif'),
235 'field_image_2:medium:url' => $style_medium->buildUrl('public://example2.gif'),
236 'field_image_2:large:url' => $style_large->buildUrl('public://example2.gif'),
237 'field_image_2:thumbnail' => $style_thumbnail->buildUrl('public://example2.gif'),
238 'field_image_2:medium' => $style_medium->buildUrl('public://example2.gif'),
239 'field_image_2:large' => $style_large->buildUrl('public://example2.gif'),
240 // multivalued_field_image:0, test for thumbnail image style only.
241 'multivalued_field_image:0:thumbnail:mimetype' => 'image/png',
242 'multivalued_field_image:0:thumbnail:filesize' => $image_1_thumbnail->getFileSize(),
243 'multivalued_field_image:0:thumbnail:height' => '100',
244 'multivalued_field_image:0:thumbnail:width' => '100',
245 'multivalued_field_image:0:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
246 'multivalued_field_image:0:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'),
247 'multivalued_field_image:0:thumbnail' => $style_thumbnail->buildUrl('public://example1.png'),
248 // multivalued_field_image:1, test for medium image style only.
249 'multivalued_field_image:1:medium:mimetype' => 'image/gif',
250 'multivalued_field_image:1:medium:filesize' => $image_2_medium->getFileSize(),
251 'multivalued_field_image:1:medium:height' => '220',
252 'multivalued_field_image:1:medium:width' => '220',
253 'multivalued_field_image:1:medium:uri' => 'public://styles/medium/public/example2.gif',
254 'multivalued_field_image:1:medium:url' => $style_medium->buildUrl('public://example2.gif'),
255 'multivalued_field_image:1:medium' => $style_medium->buildUrl('public://example2.gif'),
257 $this->assertTokens('node', ['node' => $node], $tokens);
259 /** @var \Drupal\token\Token $token_service */
260 $token_service = \Drupal::service('token');
262 // Test one of the image style's token info for cardinality 1 image field.
263 $token_info = $token_service->getTokenInfo('node-field_image', 'thumbnail');
264 $this->assertEqual('Thumbnail (100×100)', $token_info['name']);
265 $this->assertEqual('Represents the image in the given image style.', $token_info['description']);
267 // Test one of the image style's token info for a multivalued image field.
268 $token_info = $token_service->getTokenInfo('node-multivalued_field_image', 'medium');
269 $this->assertEqual('Medium (220×220)', $token_info['name']);
270 $this->assertEqual('Represents the image in the given image style.', $token_info['description']);
272 // Test few of the image styles' properties token info.
273 $token_info = $token_service->getTokenInfo('image_with_image_style', 'mimetype');
274 $this->assertEqual('MIME type', $token_info['name']);
275 $this->assertEqual('The MIME type (image/png, image/bmp, etc.) of the image.', $token_info['description']);
277 $token_info = $token_service->getTokenInfo('image_with_image_style', 'filesize');
278 $this->assertEqual('File size', $token_info['name']);
279 $this->assertEqual('The file size of the image.', $token_info['description']);