Version 1
[yaffs-website] / web / modules / contrib / token / src / Tests / TokenFieldUiTest.php
1 <?php
2
3 namespace Drupal\token\Tests;
4
5 use Drupal\node\Entity\NodeType;
6 use Drupal\node\Entity\Node;
7 use Drupal\file\Entity\File;
8 use Drupal\image\Entity\ImageStyle;
9
10 /**
11  * Tests field ui.
12  *
13  * @group token
14  */
15 class TokenFieldUiTest extends TokenTestBase {
16
17   /**
18    * @var \Drupal\Core\Session\AccountInterface
19    */
20   protected $adminUser;
21
22   /**
23    * Modules to enable.
24    *
25    * @var array
26    */
27   public static $modules = ['field_ui', 'node', 'image'];
28
29   /**
30    * {@inheritdoc}
31    */
32   public function setUp($modules = []) {
33     parent::setUp();
34     $this->adminUser = $this->drupalCreateUser(['administer content types', 'administer node fields']);
35     $this->drupalLogin($this->adminUser);
36
37     $node_type = NodeType::create([
38       'type' => 'article',
39       'name' => 'Article',
40       'description' => "Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.",
41     ]);
42     $node_type->save();
43
44     entity_create('field_storage_config', array(
45       'field_name' => 'field_body',
46       'entity_type' => 'node',
47       'type' => 'text_with_summary',
48     ))->save();
49     entity_create('field_config', array(
50       'field_name' => 'field_body',
51       'label' => 'Body',
52       'entity_type' => 'node',
53       'bundle' => 'article',
54     ))->save();
55     entity_create('field_storage_config', array(
56       'field_name' => 'field_image',
57       'entity_type' => 'node',
58       'type' => 'image',
59     ))->save();
60     entity_create('field_config', array(
61       'field_name' => 'field_image',
62       'label' => 'Image',
63       'entity_type' => 'node',
64       'bundle' => 'article',
65     ))->save();
66     entity_create('field_storage_config', array(
67       'field_name' => 'field_image_2',
68       'entity_type' => 'node',
69       'type' => 'image',
70     ))->save();
71     entity_create('field_config', array(
72       'field_name' => 'field_image_2',
73       'label' => 'Image 2',
74       'entity_type' => 'node',
75       'bundle' => 'article',
76     ))->save();
77     entity_create('field_storage_config', array(
78       'field_name' => 'multivalued_field_image',
79       'entity_type' => 'node',
80       'type' => 'image',
81     ))->save();
82     entity_create('field_config', array(
83       'field_name' => 'multivalued_field_image',
84       'label' => 'Multivalued field image',
85       'entity_type' => 'node',
86       'bundle' => 'article',
87     ))->save();
88
89     entity_get_form_display('node', 'article', 'default')
90       ->setComponent('field_body', [
91         'type' => 'text_textarea_with_summary',
92         'settings' => [
93           'rows' => '9',
94           'summary_rows' => '3',
95         ],
96         'weight' => 5,
97       ])
98       ->save();
99   }
100
101   public function testFileFieldUi() {
102     $this->drupalGet('admin/structure/types/manage/article/fields/node.article.field_image');
103
104     // Ensure the 'Browse available tokens' link is present and correct.
105     $this->assertLink('Browse available tokens.');
106     $this->assertLinkByHref('token/tree');
107
108     // Ensure that the default file directory value validates correctly.
109     $this->drupalPostForm(NULL, [], t('Save settings'));
110     $this->assertText(t('Saved Image configuration.'));
111   }
112
113   public function testFieldDescriptionTokens() {
114     $edit = [
115       'description' => 'The site is called [site:name].',
116     ];
117     $this->drupalPostForm('admin/structure/types/manage/article/fields/node.article.field_body', $edit, 'Save settings');
118
119     $this->drupalGet('node/add/article');
120     $this->assertText('The site is called Drupal.');
121   }
122
123   /**
124    * Test that tokens are correctly provided and replaced for the image fields.
125    */
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');
130
131     // Resize the test images so that they will be scaled down during token
132     // replacement.
133     $image1 = \Drupal::service('image.factory')->get('public://example1.png');
134     $image1->resize(500, 500);
135     $image1->save();
136     $image2 = \Drupal::service('image.factory')->get('public://example2.gif');
137     $image2->resize(500, 500);
138     $image2->save();
139
140     /** @var \Drupal\file\Entity\File $image1 */
141     $image1 = File::create(['uri' => 'public://example1.png']);
142     $image1->save();
143     /** @var \Drupal\file\Entity\File $image2 */
144     $image2 = File::create(['uri' => 'public://example2.gif']);
145     $image2->save();
146
147     $node = Node::create([
148       'title' => 'Test node title',
149       'type' => 'article',
150       'field_image' => [
151         [
152           'target_id' => $image1->id(),
153         ],
154       ],
155       'field_image_2' => [
156         [
157           'target_id' => $image2->id(),
158         ],
159       ],
160       'multivalued_field_image' => [
161         ['target_id' => $image1->id()],
162         ['target_id' => $image2->id()],
163       ],
164     ]);
165     $node->save();
166
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');
184
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');
192
193     $tokens = [
194       // field_image
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'),
216       // field_image_2
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'),
254     ];
255     $this->assertTokens('node', ['node' => $node], $tokens);
256
257     /** @var \Drupal\token\Token $token_service */
258     $token_service = \Drupal::service('token');
259
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']);
264
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']);
269
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']);
274
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']);
278   }
279
280 }