1<?php 2 3namespace Drupal\Tests\file\Kernel\Formatter; 4 5use Drupal\Core\Entity\Entity\EntityViewDisplay; 6use Drupal\Core\Url; 7use Drupal\file\Entity\File; 8use Drupal\KernelTests\KernelTestBase; 9 10/** 11 * Tests the default file formatter. 12 * 13 * @group field 14 */ 15class FileEntityFormatterTest extends KernelTestBase { 16 17 /** 18 * {@inheritdoc} 19 */ 20 public static $modules = ['file', 'user']; 21 22 /** 23 * The files. 24 * 25 * @var array 26 */ 27 protected $files; 28 29 /** 30 * {@inheritdoc} 31 */ 32 protected function setUp() { 33 parent::setUp(); 34 35 $this->installEntitySchema('file'); 36 37 $this->files = []; 38 file_put_contents('public://file.png', str_repeat('t', 10)); 39 $file = File::create([ 40 'uri' => 'public://file.png', 41 'filename' => 'file.png', 42 ]); 43 $file->save(); 44 $this->files[] = $file; 45 46 file_put_contents('public://file.tar', str_repeat('t', 200)); 47 $file = File::create([ 48 'uri' => 'public://file.tar', 49 'filename' => 'file.tar', 50 ]); 51 $file->save(); 52 $this->files[] = $file; 53 54 file_put_contents('public://file.tar.gz', str_repeat('t', 40000)); 55 $file = File::create([ 56 'uri' => 'public://file.tar.gz', 57 'filename' => 'file.tar.gz', 58 ]); 59 $file->save(); 60 $this->files[] = $file; 61 62 file_put_contents('public://file', str_repeat('t', 8000000)); 63 $file = File::create([ 64 'uri' => 'public://file', 65 'filename' => 'file', 66 ]); 67 $file->save(); 68 $this->files[] = $file; 69 } 70 71 /** 72 * Tests the file_link field formatter. 73 */ 74 public function testFormatterFileLink() { 75 $entity_display = EntityViewDisplay::create([ 76 'targetEntityType' => 'file', 77 'bundle' => 'file', 78 ]); 79 $entity_display->setComponent('filename', ['type' => 'file_link']); 80 81 $build = $entity_display->buildMultiple($this->files)[0]['filename'][0]; 82 $this->assertEqual('file.png', $build['#title']); 83 $this->assertEqual(Url::fromUri(file_create_url('public://file.png')), $build['#url']); 84 } 85 86 /** 87 * Tests the file_link field formatter. 88 */ 89 public function testFormatterFileUri() { 90 $entity_display = EntityViewDisplay::create([ 91 'targetEntityType' => 'file', 92 'bundle' => 'file', 93 ]); 94 $entity_display->setComponent('uri', ['type' => 'file_uri']); 95 96 $build = $entity_display->buildMultiple($this->files)[0]['uri'][0]; 97 $this->assertEqual('public://file.png', $build['#markup']); 98 99 $entity_display->setComponent('uri', ['type' => 'file_uri', 'settings' => ['file_download_path' => TRUE]]); 100 $build = $entity_display->buildMultiple($this->files)[0]['uri'][0]; 101 $this->assertEqual(file_create_url('public://file.png'), $build['#markup']); 102 103 $entity_display->setComponent('uri', ['type' => 'file_uri', 'settings' => ['file_download_path' => TRUE, 'link_to_file' => TRUE]]); 104 $build = $entity_display->buildMultiple($this->files)[0]['uri'][0]; 105 $this->assertEqual(file_create_url('public://file.png'), $build['#title']); 106 $this->assertEqual(Url::fromUri(file_create_url('public://file.png')), $build['#url']); 107 } 108 109 /** 110 * Tests the file_extension field formatter. 111 */ 112 public function testFormatterFileExtension() { 113 $entity_display = EntityViewDisplay::create([ 114 'targetEntityType' => 'file', 115 'bundle' => 'file', 116 ]); 117 $entity_display->setComponent('filename', ['type' => 'file_extension']); 118 119 $expected = ['png', 'tar', 'gz', '']; 120 foreach (array_values($this->files) as $i => $file) { 121 $build = $entity_display->build($file); 122 $this->assertEqual($expected[$i], $build['filename'][0]['#markup']); 123 } 124 125 $entity_display->setComponent('filename', ['type' => 'file_extension', 'settings' => ['extension_detect_tar' => TRUE]]); 126 127 $expected = ['png', 'tar', 'tar.gz', '']; 128 foreach (array_values($this->files) as $i => $file) { 129 $build = $entity_display->build($file); 130 $this->assertEqual($expected[$i], $build['filename'][0]['#markup']); 131 } 132 } 133 134 /** 135 * Tests the file_extension field formatter. 136 */ 137 public function testFormatterFileMime() { 138 $entity_display = EntityViewDisplay::create([ 139 'targetEntityType' => 'file', 140 'bundle' => 'file', 141 ]); 142 $entity_display->setComponent('filemime', ['type' => 'file_filemime', 'settings' => ['filemime_image' => TRUE]]); 143 144 foreach (array_values($this->files) as $i => $file) { 145 $build = $entity_display->build($file); 146 $this->assertEqual('image__file_icon', $build['filemime'][0]['#theme']); 147 $this->assertEqual(spl_object_hash($file), spl_object_hash($build['filemime'][0]['#file'])); 148 } 149 } 150 151 /** 152 * Tests the file_size field formatter. 153 */ 154 public function testFormatterFileSize() { 155 $entity_display = EntityViewDisplay::create([ 156 'targetEntityType' => 'file', 157 'bundle' => 'file', 158 ]); 159 $entity_display->setComponent('filesize', ['type' => 'file_size']); 160 161 $expected = ['10 bytes', '200 bytes', '39.06 KB', '7.63 MB']; 162 foreach (array_values($this->files) as $i => $file) { 163 $build = $entity_display->build($file); 164 $this->assertEqual($expected[$i], $build['filesize'][0]['#markup']); 165 } 166 } 167 168} 169