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