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