c9a247bf40296c963369f5369ff694ad644104d7
[yaffs-website] / web / core / modules / file / tests / src / Kernel / FileItemValidationTest.php
1 <?php
2
3 namespace Drupal\Tests\file\Kernel;
4
5 use Drupal\entity_test\Entity\EntityTest;
6 use Drupal\field\Entity\FieldConfig;
7 use Drupal\field\Entity\FieldStorageConfig;
8 use Drupal\file\Entity\File;
9 use Drupal\KernelTests\KernelTestBase;
10 use Drupal\user\Entity\User;
11 use org\bovigo\vfs\vfsStream;
12
13 /**
14  * Tests that files referenced in file and image fields are always validated.
15  *
16  * @group file
17  */
18 class FileItemValidationTest extends KernelTestBase {
19
20   /**
21    * {@inheritdoc}
22    */
23   public static $modules = ['file', 'image', 'entity_test', 'field', 'user', 'system'];
24
25   /**
26    * A user.
27    *
28    * @var \Drupal\user\UserInterface
29    */
30   protected $user;
31
32   /**
33    * {@inheritdoc}
34    */
35   protected function setUp() {
36     parent::setUp();
37
38     $this->installEntitySchema('user');
39     $this->installEntitySchema('file');
40     $this->installSchema('file', 'file_usage');
41     $this->installSchema('system', 'sequences');
42
43     $this->user = User::create([
44       'name' => 'username',
45       'status' => 1,
46     ]);
47     $this->user->save();
48     $this->container->get('current_user')->setAccount($this->user);
49   }
50
51   /**
52    * @covers \Drupal\file\Plugin\Validation\Constraint\FileValidationConstraint
53    * @covers \Drupal\file\Plugin\Validation\Constraint\FileValidationConstraintValidator
54    * @dataProvider getFileTypes
55    */
56   public function testFileValidationConstraint($file_type) {
57     $field_storage = FieldStorageConfig::create([
58       'field_name' => 'field_test_file',
59       'entity_type' => 'entity_test',
60       'type' => $file_type,
61     ]);
62     $field_storage->save();
63
64     $field = FieldConfig::create([
65       'field_name' => 'field_test_file',
66       'entity_type' => 'entity_test',
67       'bundle' => 'entity_test',
68       'settings' => [
69         'max_filesize' => '2k',
70         'file_extensions' => 'jpg|png',
71       ],
72     ]);
73     $field->save();
74
75     vfsStream::setup('drupal_root');
76     vfsStream::create([
77       'sites' => [
78         'default' => [
79           'files' => [
80             'test.txt' => str_repeat('a', 3000),
81           ]
82         ]
83       ]
84     ]);
85
86     // Test for max filesize.
87     $file = File::create([
88       'uri' => 'vfs://drupal_root/sites/default/files/test.txt',
89       'uid' => $this->user->id(),
90     ]);
91     $file->setPermanent();
92     $file->save();
93
94     $entity_test = EntityTest::create([
95       'uid' => $this->user->id(),
96       'field_test_file' => [
97         'target_id' => $file->id(),
98       ]
99     ]);
100     $result = $entity_test->validate();
101     $this->assertCount(2, $result);
102
103     $this->assertEquals('field_test_file.0', $result->get(0)->getPropertyPath());
104     $this->assertEquals('The file is <em class="placeholder">2.93 KB</em> exceeding the maximum file size of <em class="placeholder">2 KB</em>.', (string) $result->get(0)->getMessage());
105     $this->assertEquals('field_test_file.0', $result->get(1)->getPropertyPath());
106     $this->assertEquals('Only files with the following extensions are allowed: <em class="placeholder">jpg|png</em>.', (string) $result->get(1)->getMessage());
107   }
108
109   /**
110    * Provides a list of file types to test.
111    */
112   public function getFileTypes() {
113     return [['file'], ['image']];
114   }
115
116 }