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