Security update for Core, with self-updated composer
[yaffs-website] / vendor / webflo / drupal-finder / tests / Drupal8FinderTest.php
1 <?php
2
3 namespace DrupalFinder\Tests;
4
5 use org\bovigo\vfs\vfsStream;
6
7 class Drupal8FinderTest extends DrupalFinderTestBase
8 {
9     protected static $fileStructure = [
10         'autoload.php' => '',
11         'composer.json' => [
12             'extra' => [
13                 'installer-paths' => [
14                     'core' => [
15                         'type:drupal-core'
16                     ]
17                 ]
18             ]
19         ],
20         'core' => [
21             'includes' => [
22                 'common.inc' => '',
23             ],
24             'misc' => [
25                 'drupal.js' => '',
26             ],
27             'core.services.yml' => '',
28         ],
29         'modules' => [],
30         'vendor' => [],
31     ];
32
33     /**
34      * @return array
35      */
36     protected function getDrupalComposerStructure()
37     {
38         $fileStructure = [
39             'web' => static::$fileStructure,
40             'composer.json' => [
41                 'require' => [
42                     'drupal/core' => '*',
43                 ],
44                 'extra' => [
45                     'installer-paths' => [
46                         'web/core' => [
47                             'type:drupal-core',
48                         ],
49                     ],
50                 ],
51             ],
52             'vendor' => [],
53         ];
54         unset($fileStructure['web']['composer.json']);
55         unset($fileStructure['web']['vendor']);
56
57         return $fileStructure;
58     }
59
60     protected function setUp()
61     {
62         parent::setUp();
63         $this->finder = new \DrupalFinder\DrupalFinder();
64     }
65
66     public function testDrupalDefaultStructure()
67     {
68         $root = vfsStream::setup('root', null, $this->prepareFileStructure(static::$fileStructure));
69
70         $this->assertTrue($this->finder->locateRoot($root->url()));
71         $this->assertSame('vfs://root', $this->finder->getDrupalRoot());
72         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
73         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
74
75         $this->assertTrue($this->finder->locateRoot($root->url() . '/misc'));
76         $this->assertSame('vfs://root', $this->finder->getDrupalRoot());
77         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
78         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
79
80         $root = vfsStream::setup(
81             'root',
82             null,
83             ['project' => $this->prepareFileStructure(static::$fileStructure)]
84         );
85         $this->assertFalse(
86             $this->finder->locateRoot($root->url()),
87             'Not in the scope of the project'
88         );
89         $this->assertFalse($this->finder->getDrupalRoot());
90         $this->assertFalse($this->finder->getComposerRoot());
91         $this->assertFalse($this->finder->getVendorDir());
92     }
93
94     public function testDrupalComposerStructure()
95     {
96         $fileStructure = $this->getDrupalComposerStructure();
97         $this->assertComposerStructure($fileStructure);
98     }
99
100     public function testDrupalComposerStructureWithCustomRoot()
101     {
102         $fileStructure = [
103             'src' => static::$fileStructure,
104             'composer.json' => [
105                 'require' => [
106                     'drupal/core' => '*',
107                 ],
108                 'extra' => [
109                     'installer-paths' => [
110                         'src/core' => [
111                             'type:drupal-core',
112                         ],
113                     ],
114                 ],
115             ],
116             'vendor' => [],
117         ];
118         unset($fileStructure['src']['composer.json']);
119         unset($fileStructure['src']['vendor']);
120
121         $fileStructure = $this->prepareFileStructure($fileStructure);
122         $root = vfsStream::setup('root', null, $fileStructure);
123         $this->assertTrue($this->finder->locateRoot($root->url() . '/src'));
124         $this->assertSame('vfs://root/src', $this->finder->getDrupalRoot());
125         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
126         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
127
128         $this->assertTrue($this->finder->locateRoot($root->url() . '/src/misc'));
129         $this->assertSame('vfs://root/src', $this->finder->getDrupalRoot());
130         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
131         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
132
133         $this->assertTrue($this->finder->locateRoot($root->url()));
134         $this->assertSame('vfs://root/src', $this->finder->getDrupalRoot());
135         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
136         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
137
138         $root = vfsStream::setup(
139             'root',
140             null,
141             ['nested_folder' => $fileStructure]
142         );
143         $this->assertFalse($this->finder->locateRoot($root->url()));
144         $this->assertFalse($this->finder->getDrupalRoot());
145         $this->assertFalse($this->finder->getComposerRoot());
146         $this->assertFalse($this->finder->getVendorDir());
147     }
148
149     public function testDrupalComposerStructureWithoutRequire()
150     {
151         $fileStructure = [
152             'web' => static::$fileStructure,
153             'composer.json' => [
154                 'extra' => [
155                     'installer-paths' => [
156                         'web/core' => [
157                             'drupal/core',
158                         ],
159                     ],
160                 ],
161             ],
162         ];
163         unset($fileStructure['web']['composer.json']);
164         $this->assertComposerStructure($fileStructure);
165     }
166
167     public function testNoDrupalRootWithRealFilesystem()
168     {
169         $root = $this->tempdir(sys_get_temp_dir());
170
171         $this->assertFalse($this->finder->locateRoot($root));
172         $this->assertFalse($this->finder->getDrupalRoot());
173         $this->assertFalse($this->finder->getComposerRoot());
174         $this->assertFalse($this->finder->getVendorDir());
175     }
176
177     public function testDrupalDefaultStructureWithRealFilesystem()
178     {
179         $root = $this->tempdir(sys_get_temp_dir());
180         $this->dumpToFileSystem(static::$fileStructure, $root);
181
182         $this->assertTrue($this->finder->locateRoot($root));
183         $this->assertSame($root, $this->finder->getDrupalRoot());
184         $this->assertSame($root, $this->finder->getComposerRoot());
185         $this->assertSame($root . '/vendor', $this->finder->getVendorDir());
186
187         // Test symlink implementation
188         $symlink = $this->tempdir(sys_get_temp_dir());
189         $this->symlink($root, $symlink . '/foo');
190
191         $this->assertTrue($this->finder->locateRoot($symlink . '/foo'));
192         $this->assertSame($root, $this->finder->getDrupalRoot());
193         $this->assertSame($root, $this->finder->getComposerRoot());
194         $this->assertSame($root . '/vendor', $this->finder->getVendorDir());
195     }
196
197     public function testDrupalComposerStructureWithRealFilesystem()
198     {
199         $root = $this->tempdir(sys_get_temp_dir());
200         $this->dumpToFileSystem($this->getDrupalComposerStructure(), $root);
201
202         $this->assertTrue($this->finder->locateRoot($root));
203         $this->assertSame($root . '/web', $this->finder->getDrupalRoot());
204         $this->assertSame($root, $this->finder->getComposerRoot());
205         $this->assertSame($root . '/vendor', $this->finder->getVendorDir());
206
207         // Test symlink implementation
208         $symlink = $this->tempdir(sys_get_temp_dir());
209         $this->symlink($root, $symlink . '/foo');
210
211         $this->assertTrue($this->finder->locateRoot($symlink . '/foo'));
212         $this->assertSame($root . '/web', $this->finder->getDrupalRoot());
213         $this->assertSame($root, $this->finder->getComposerRoot());
214         $this->assertSame($root . '/vendor', $this->finder->getVendorDir());
215     }
216
217     public function testDrupalWithLinkedModule()
218     {
219         $root = $this->tempdir(sys_get_temp_dir());
220         $this->dumpToFileSystem(static::$fileStructure, $root);
221
222         $module = $this->tempdir(sys_get_temp_dir());
223         $module_link = $root . '/modules/foo';
224         $this->symlink($module, $module_link);
225
226         $this->assertTrue($this->finder->locateRoot($module_link));
227         $this->assertSame($root, realpath($this->finder->getDrupalRoot()));
228         $this->assertSame($root, realpath($this->finder->getComposerRoot()));
229         $this->assertSame($root . '/vendor', realpath($this->finder->getVendorDir()));
230     }
231
232     public function testDrupalWithCustomVendor()
233     {
234         $root = $this->tempdir(sys_get_temp_dir());
235         $fileStructure = static::$fileStructure;
236         $fileStructure['composer.json'] = [
237             'config' => [
238                 'vendor-dir' => 'vendor-foo'
239             ]
240         ];
241         $fileStructure['vendor-foo'] = [];
242         $this->dumpToFileSystem($fileStructure, $root);
243
244         $this->assertTrue($this->finder->locateRoot($root));
245         $this->assertSame($root, realpath($this->finder->getDrupalRoot()));
246         $this->assertSame($root, realpath($this->finder->getComposerRoot()));
247         $this->assertSame($root . '/vendor-foo', realpath($this->finder->getVendorDir()));
248     }
249
250     /**
251      * @param $fileStructure
252      */
253     protected function assertComposerStructure($fileStructure)
254     {
255         $fileStructure = $this->prepareFileStructure($fileStructure);
256         $root = vfsStream::setup('root', null, $fileStructure);
257         $this->assertTrue($this->finder->locateRoot($root->url() . '/web'));
258         $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
259         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
260         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
261
262         $this->assertTrue($this->finder->locateRoot($root->url() . '/web/misc'));
263         $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
264         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
265         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
266
267         $this->assertTrue($this->finder->locateRoot($root->url()));
268         $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
269         $this->assertSame('vfs://root', $this->finder->getComposerRoot());
270         $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
271
272         $root = vfsStream::setup(
273             'root',
274             null,
275             ['nested_folder' => $fileStructure]
276         );
277         $this->assertFalse($this->finder->locateRoot($root->url()));
278         $this->assertFalse($this->finder->getDrupalRoot());
279         $this->assertFalse($this->finder->getComposerRoot());
280         $this->assertFalse($this->finder->getVendorDir());
281     }
282 }