PageRenderTime 38ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/token/src/Tests/TokenFieldUiTest.php

https://gitlab.com/guillaumev/alkarama
PHP | 280 lines | 216 code | 27 blank | 37 comment | 1 complexity | 3589a3c0f276e19a87152720dea267a3 MD5 | raw file
  1. <?php
  2. namespace Drupal\token\Tests;
  3. use Drupal\node\Entity\NodeType;
  4. use Drupal\node\Entity\Node;
  5. use Drupal\file\Entity\File;
  6. use Drupal\image\Entity\ImageStyle;
  7. /**
  8. * Tests field ui.
  9. *
  10. * @group token
  11. */
  12. class TokenFieldUiTest extends TokenTestBase {
  13. /**
  14. * @var \Drupal\Core\Session\AccountInterface
  15. */
  16. protected $adminUser;
  17. /**
  18. * Modules to enable.
  19. *
  20. * @var array
  21. */
  22. public static $modules = ['field_ui', 'node', 'image'];
  23. /**
  24. * {@inheritdoc}
  25. */
  26. public function setUp($modules = []) {
  27. parent::setUp();
  28. $this->adminUser = $this->drupalCreateUser(['administer content types', 'administer node fields']);
  29. $this->drupalLogin($this->adminUser);
  30. $node_type = NodeType::create([
  31. 'type' => 'article',
  32. 'name' => 'Article',
  33. 'description' => "Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.",
  34. ]);
  35. $node_type->save();
  36. entity_create('field_storage_config', array(
  37. 'field_name' => 'field_body',
  38. 'entity_type' => 'node',
  39. 'type' => 'text_with_summary',
  40. ))->save();
  41. entity_create('field_config', array(
  42. 'field_name' => 'field_body',
  43. 'label' => 'Body',
  44. 'entity_type' => 'node',
  45. 'bundle' => 'article',
  46. ))->save();
  47. entity_create('field_storage_config', array(
  48. 'field_name' => 'field_image',
  49. 'entity_type' => 'node',
  50. 'type' => 'image',
  51. ))->save();
  52. entity_create('field_config', array(
  53. 'field_name' => 'field_image',
  54. 'label' => 'Image',
  55. 'entity_type' => 'node',
  56. 'bundle' => 'article',
  57. ))->save();
  58. entity_create('field_storage_config', array(
  59. 'field_name' => 'field_image_2',
  60. 'entity_type' => 'node',
  61. 'type' => 'image',
  62. ))->save();
  63. entity_create('field_config', array(
  64. 'field_name' => 'field_image_2',
  65. 'label' => 'Image 2',
  66. 'entity_type' => 'node',
  67. 'bundle' => 'article',
  68. ))->save();
  69. entity_create('field_storage_config', array(
  70. 'field_name' => 'multivalued_field_image',
  71. 'entity_type' => 'node',
  72. 'type' => 'image',
  73. ))->save();
  74. entity_create('field_config', array(
  75. 'field_name' => 'multivalued_field_image',
  76. 'label' => 'Multivalued field image',
  77. 'entity_type' => 'node',
  78. 'bundle' => 'article',
  79. ))->save();
  80. entity_get_form_display('node', 'article', 'default')
  81. ->setComponent('field_body', [
  82. 'type' => 'text_textarea_with_summary',
  83. 'settings' => [
  84. 'rows' => '9',
  85. 'summary_rows' => '3',
  86. ],
  87. 'weight' => 5,
  88. ])
  89. ->save();
  90. }
  91. public function testFileFieldUi() {
  92. $this->drupalGet('admin/structure/types/manage/article/fields/node.article.field_image');
  93. // Ensure the 'Browse available tokens' link is present and correct.
  94. $this->assertLink('Browse available tokens.');
  95. $this->assertLinkByHref('token/tree');
  96. // Ensure that the default file directory value validates correctly.
  97. $this->drupalPostForm(NULL, [], t('Save settings'));
  98. $this->assertText(t('Saved Image configuration.'));
  99. }
  100. public function testFieldDescriptionTokens() {
  101. $edit = [
  102. 'description' => 'The site is called [site:name].',
  103. ];
  104. $this->drupalPostForm('admin/structure/types/manage/article/fields/node.article.field_body', $edit, 'Save settings');
  105. $this->drupalGet('node/add/article');
  106. $this->assertText('The site is called Drupal.');
  107. }
  108. /**
  109. * Test that tokens are correctly provided and replaced for the image fields.
  110. */
  111. public function testImageFieldTokens() {
  112. // Generate 2 different test images.
  113. file_unmanaged_copy(\Drupal::root() . '/core/misc/druplicon.png', 'public://example1.png');
  114. file_unmanaged_copy(\Drupal::root() . '/core/misc/loading.gif', 'public://example2.gif');
  115. // Resize the test images so that they will be scaled down during token
  116. // replacement.
  117. $image1 = \Drupal::service('image.factory')->get('public://example1.png');
  118. $image1->resize(500, 500);
  119. $image1->save();
  120. $image2 = \Drupal::service('image.factory')->get('public://example2.gif');
  121. $image2->resize(500, 500);
  122. $image2->save();
  123. /** @var \Drupal\file\Entity\File $image1 */
  124. $image1 = File::create(['uri' => 'public://example1.png']);
  125. $image1->save();
  126. /** @var \Drupal\file\Entity\File $image2 */
  127. $image2 = File::create(['uri' => 'public://example2.gif']);
  128. $image2->save();
  129. $node = Node::create([
  130. 'title' => 'Test node title',
  131. 'type' => 'article',
  132. 'field_image' => [
  133. [
  134. 'target_id' => $image1->id(),
  135. ],
  136. ],
  137. 'field_image_2' => [
  138. [
  139. 'target_id' => $image2->id(),
  140. ],
  141. ],
  142. 'multivalued_field_image' => [
  143. ['target_id' => $image1->id()],
  144. ['target_id' => $image2->id()],
  145. ],
  146. ]);
  147. $node->save();
  148. // Obtain the file size and dimension of the images that will be scaled
  149. // down during token replacement by applying the styles here.
  150. $style_thumbnail = ImageStyle::load('thumbnail');
  151. $style_thumbnail->createDerivative('public://example1.png', 'public://styles/thumbnail/public/example1-test.png');
  152. $style_thumbnail->createDerivative('public://example2.gif', 'public://styles/thumbnail/public/example2-test.gif');
  153. $image_1_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example1-test.png');
  154. $image_2_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example2-test.gif');
  155. $style_medium = ImageStyle::load('medium');
  156. $style_medium->createDerivative('public://example1.png', 'public://styles/medium/public/example1-test.png');
  157. $style_medium->createDerivative('public://example2.gif', 'public://styles/medium/public/example2-test.gif');
  158. $image_1_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example1-test.png');
  159. $image_2_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example2-test.gif');
  160. $style_large = ImageStyle::load('large');
  161. $style_large->createDerivative('public://example1.png', 'public://styles/large/public/example1-test.png');
  162. $style_large->createDerivative('public://example2.gif', 'public://styles/large/public/example2-test.gif');
  163. $image_1_large = \Drupal::service('image.factory')->get('public://styles/large/public/example1-test.png');
  164. $image_2_large = \Drupal::service('image.factory')->get('public://styles/large/public/example2-test.gif');
  165. // Delete the image derivatives, to make sure they are re-created.
  166. unlink('public://styles/thumbnail/public/example1-test.png');
  167. unlink('public://styles/medium/public/example1-test.png');
  168. unlink('public://styles/large/public/example1-test.png');
  169. unlink('public://styles/thumbnail/public/example2-test.gif');
  170. unlink('public://styles/medium/public/example2-test.gif');
  171. unlink('public://styles/large/public/example2-test.gif');
  172. $tokens = [
  173. // field_image
  174. 'field_image:thumbnail:mimetype' => 'image/png',
  175. 'field_image:medium:mimetype' => 'image/png',
  176. 'field_image:large:mimetype' => 'image/png',
  177. 'field_image:thumbnail:filesize' => $image_1_thumbnail->getFileSize(),
  178. 'field_image:medium:filesize' => $image_1_medium->getFileSize(),
  179. 'field_image:large:filesize' => $image_1_large->getFileSize(),
  180. 'field_image:thumbnail:height' => '100',
  181. 'field_image:medium:height' => '220',
  182. 'field_image:large:height' => '480',
  183. 'field_image:thumbnail:width' => '100',
  184. 'field_image:medium:width' => '220',
  185. 'field_image:large:width' => '480',
  186. 'field_image:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
  187. 'field_image:medium:uri' => 'public://styles/medium/public/example1.png',
  188. 'field_image:large:uri' => 'public://styles/large/public/example1.png',
  189. 'field_image:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'),
  190. 'field_image:medium:url' => $style_medium->buildUrl('public://example1.png'),
  191. 'field_image:large:url' => $style_large->buildUrl('public://example1.png'),
  192. 'field_image:thumbnail' => $style_thumbnail->buildUrl('public://example1.png'),
  193. 'field_image:medium' => $style_medium->buildUrl('public://example1.png'),
  194. 'field_image:large' => $style_large->buildUrl('public://example1.png'),
  195. // field_image_2
  196. 'field_image_2:thumbnail:mimetype' => 'image/gif',
  197. 'field_image_2:medium:mimetype' => 'image/gif',
  198. 'field_image_2:large:mimetype' => 'image/gif',
  199. 'field_image_2:thumbnail:filesize' => $image_2_thumbnail->getFileSize(),
  200. 'field_image_2:medium:filesize' => $image_2_medium->getFileSize(),
  201. 'field_image_2:large:filesize' => $image_2_large->getFileSize(),
  202. 'field_image_2:thumbnail:height' => '100',
  203. 'field_image_2:medium:height' => '220',
  204. 'field_image_2:large:height' => '480',
  205. 'field_image_2:thumbnail:width' => '100',
  206. 'field_image_2:medium:width' => '220',
  207. 'field_image_2:large:width' => '480',
  208. 'field_image_2:thumbnail:uri' => 'public://styles/thumbnail/public/example2.gif',
  209. 'field_image_2:medium:uri' => 'public://styles/medium/public/example2.gif',
  210. 'field_image_2:large:uri' => 'public://styles/large/public/example2.gif',
  211. 'field_image_2:thumbnail:url' => $style_thumbnail->buildUrl('public://example2.gif'),
  212. 'field_image_2:medium:url' => $style_medium->buildUrl('public://example2.gif'),
  213. 'field_image_2:large:url' => $style_large->buildUrl('public://example2.gif'),
  214. 'field_image_2:thumbnail' => $style_thumbnail->buildUrl('public://example2.gif'),
  215. 'field_image_2:medium' => $style_medium->buildUrl('public://example2.gif'),
  216. 'field_image_2:large' => $style_large->buildUrl('public://example2.gif'),
  217. // multivalued_field_image:0, test for thumbnail image style only.
  218. 'multivalued_field_image:0:thumbnail:mimetype' => 'image/png',
  219. 'multivalued_field_image:0:thumbnail:filesize' => $image_1_thumbnail->getFileSize(),
  220. 'multivalued_field_image:0:thumbnail:height' => '100',
  221. 'multivalued_field_image:0:thumbnail:width' => '100',
  222. 'multivalued_field_image:0:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png',
  223. 'multivalued_field_image:0:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'),
  224. 'multivalued_field_image:0:thumbnail' => $style_thumbnail->buildUrl('public://example1.png'),
  225. // multivalued_field_image:1, test for medium image style only.
  226. 'multivalued_field_image:1:medium:mimetype' => 'image/gif',
  227. 'multivalued_field_image:1:medium:filesize' => $image_2_medium->getFileSize(),
  228. 'multivalued_field_image:1:medium:height' => '220',
  229. 'multivalued_field_image:1:medium:width' => '220',
  230. 'multivalued_field_image:1:medium:uri' => 'public://styles/medium/public/example2.gif',
  231. 'multivalued_field_image:1:medium:url' => $style_medium->buildUrl('public://example2.gif'),
  232. 'multivalued_field_image:1:medium' => $style_medium->buildUrl('public://example2.gif'),
  233. ];
  234. $this->assertTokens('node', ['node' => $node], $tokens);
  235. /** @var \Drupal\token\Token $token_service */
  236. $token_service = \Drupal::service('token');
  237. // Test one of the image style's token info for cardinality 1 image field.
  238. $token_info = $token_service->getTokenInfo('node-field_image', 'thumbnail');
  239. $this->assertEqual('Thumbnail (100×100)', $token_info['name']);
  240. $this->assertEqual('Represents the image in the given image style.', $token_info['description']);
  241. // Test one of the image style's token info for a multivalued image field.
  242. $token_info = $token_service->getTokenInfo('node-multivalued_field_image', 'medium');
  243. $this->assertEqual('Medium (220×220)', $token_info['name']);
  244. $this->assertEqual('Represents the image in the given image style.', $token_info['description']);
  245. // Test few of the image styles' properties token info.
  246. $token_info = $token_service->getTokenInfo('image_with_image_style', 'mimetype');
  247. $this->assertEqual('MIME type', $token_info['name']);
  248. $this->assertEqual('The MIME type (image/png, image/bmp, etc.) of the image.', $token_info['description']);
  249. $token_info = $token_service->getTokenInfo('image_with_image_style', 'filesize');
  250. $this->assertEqual('File size', $token_info['name']);
  251. $this->assertEqual('The file size of the image.', $token_info['description']);
  252. }
  253. }