Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\media\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\file\Entity\File;
|
Chris@0
|
6 use Drupal\KernelTests\KernelTestBase;
|
Chris@0
|
7 use Drupal\media\Entity\Media;
|
Chris@0
|
8 use Drupal\media\Entity\MediaType;
|
Chris@0
|
9 use Drupal\media\MediaTypeInterface;
|
Chris@0
|
10 use Drupal\user\Entity\User;
|
Chris@0
|
11 use org\bovigo\vfs\vfsStream;
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * Base class for Media kernel tests.
|
Chris@0
|
15 */
|
Chris@0
|
16 abstract class MediaKernelTestBase extends KernelTestBase {
|
Chris@0
|
17
|
Chris@0
|
18 /**
|
Chris@0
|
19 * Modules to install.
|
Chris@0
|
20 *
|
Chris@0
|
21 * @var array
|
Chris@0
|
22 */
|
Chris@0
|
23 public static $modules = [
|
Chris@0
|
24 'media',
|
Chris@0
|
25 'media_test_source',
|
Chris@0
|
26 'image',
|
Chris@0
|
27 'user',
|
Chris@0
|
28 'field',
|
Chris@0
|
29 'system',
|
Chris@0
|
30 'file',
|
Chris@0
|
31 ];
|
Chris@0
|
32
|
Chris@0
|
33 /**
|
Chris@0
|
34 * The test media type.
|
Chris@0
|
35 *
|
Chris@0
|
36 * @var \Drupal\media\MediaTypeInterface
|
Chris@0
|
37 */
|
Chris@0
|
38 protected $testMediaType;
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * The test media type with constraints.
|
Chris@0
|
42 *
|
Chris@0
|
43 * @var \Drupal\media\MediaTypeInterface
|
Chris@0
|
44 */
|
Chris@0
|
45 protected $testConstraintsMediaType;
|
Chris@0
|
46
|
Chris@0
|
47 /**
|
Chris@0
|
48 * A user.
|
Chris@0
|
49 *
|
Chris@0
|
50 * @var \Drupal\user\UserInterface
|
Chris@0
|
51 */
|
Chris@0
|
52 protected $user;
|
Chris@0
|
53
|
Chris@0
|
54 /**
|
Chris@0
|
55 * {@inheritdoc}
|
Chris@0
|
56 */
|
Chris@0
|
57 protected function setUp() {
|
Chris@0
|
58 parent::setUp();
|
Chris@0
|
59
|
Chris@0
|
60 $this->installEntitySchema('user');
|
Chris@0
|
61 $this->installEntitySchema('file');
|
Chris@0
|
62 $this->installSchema('file', 'file_usage');
|
Chris@0
|
63 $this->installSchema('system', 'sequences');
|
Chris@0
|
64 $this->installEntitySchema('media');
|
Chris@0
|
65 $this->installConfig(['field', 'system', 'image', 'file', 'media']);
|
Chris@0
|
66
|
Chris@0
|
67 // Create a test media type.
|
Chris@0
|
68 $this->testMediaType = $this->createMediaType('test');
|
Chris@0
|
69 // Create a test media type with constraints.
|
Chris@0
|
70 $this->testConstraintsMediaType = $this->createMediaType('test_constraints');
|
Chris@0
|
71
|
Chris@0
|
72 $this->user = User::create([
|
Chris@0
|
73 'name' => 'username',
|
Chris@0
|
74 'status' => 1,
|
Chris@0
|
75 ]);
|
Chris@0
|
76 $this->user->save();
|
Chris@0
|
77 $this->container->get('current_user')->setAccount($this->user);
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 /**
|
Chris@0
|
81 * Create a media type for a source plugin.
|
Chris@0
|
82 *
|
Chris@0
|
83 * @param string $media_source_name
|
Chris@0
|
84 * The name of the media source.
|
Chris@0
|
85 *
|
Chris@0
|
86 * @return \Drupal\media\MediaTypeInterface
|
Chris@0
|
87 * A media type.
|
Chris@0
|
88 */
|
Chris@0
|
89 protected function createMediaType($media_source_name) {
|
Chris@0
|
90 $id = strtolower($this->randomMachineName());
|
Chris@0
|
91 $media_type = MediaType::create([
|
Chris@0
|
92 'id' => $id,
|
Chris@0
|
93 'label' => $id,
|
Chris@0
|
94 'source' => $media_source_name,
|
Chris@0
|
95 'new_revision' => FALSE,
|
Chris@0
|
96 ]);
|
Chris@0
|
97 $media_type->save();
|
Chris@0
|
98 $source_field = $media_type->getSource()->createSourceField($media_type);
|
Chris@0
|
99 // The media type form creates a source field if it does not exist yet. The
|
Chris@0
|
100 // same must be done in a kernel test, since it does not use that form.
|
Chris@0
|
101 // @see \Drupal\media\MediaTypeForm::save()
|
Chris@0
|
102 $source_field->getFieldStorageDefinition()->save();
|
Chris@0
|
103 // The source field storage has been created, now the field can be saved.
|
Chris@0
|
104 $source_field->save();
|
Chris@0
|
105 $media_type->set('source_configuration', [
|
Chris@0
|
106 'source_field' => $source_field->getName(),
|
Chris@0
|
107 ])->save();
|
Chris@0
|
108 return $media_type;
|
Chris@0
|
109 }
|
Chris@0
|
110
|
Chris@0
|
111 /**
|
Chris@0
|
112 * Helper to generate media entity.
|
Chris@0
|
113 *
|
Chris@0
|
114 * @param string $filename
|
Chris@0
|
115 * String filename with extension.
|
Chris@0
|
116 * @param \Drupal\media\MediaTypeInterface $media_type
|
Chris@0
|
117 * The the media type.
|
Chris@0
|
118 *
|
Chris@0
|
119 * @return \Drupal\media\Entity\Media
|
Chris@0
|
120 * A media entity.
|
Chris@0
|
121 */
|
Chris@0
|
122 protected function generateMedia($filename, MediaTypeInterface $media_type) {
|
Chris@0
|
123 vfsStream::setup('drupal_root');
|
Chris@0
|
124 vfsStream::create([
|
Chris@0
|
125 'sites' => [
|
Chris@0
|
126 'default' => [
|
Chris@0
|
127 'files' => [
|
Chris@0
|
128 $filename => str_repeat('a', 3000),
|
Chris@0
|
129 ],
|
Chris@0
|
130 ],
|
Chris@0
|
131 ],
|
Chris@0
|
132 ]);
|
Chris@0
|
133
|
Chris@0
|
134 $file = File::create([
|
Chris@0
|
135 'uri' => 'vfs://drupal_root/sites/default/files/' . $filename,
|
Chris@0
|
136 'uid' => $this->user->id(),
|
Chris@0
|
137 ]);
|
Chris@0
|
138 $file->setPermanent();
|
Chris@0
|
139 $file->save();
|
Chris@0
|
140
|
Chris@0
|
141 return Media::create([
|
Chris@0
|
142 'bundle' => $media_type->id(),
|
Chris@0
|
143 'name' => 'Mr. Jones',
|
Chris@0
|
144 'field_media_file' => [
|
Chris@0
|
145 'target_id' => $file->id(),
|
Chris@0
|
146 ],
|
Chris@0
|
147 ]);
|
Chris@0
|
148 }
|
Chris@0
|
149
|
Chris@0
|
150 }
|