3 namespace DrupalFinder\Tests;
5 use org\bovigo\vfs\vfsStream;
7 class Drupal8FinderTest extends DrupalFinderTestBase
9 protected static $fileStructure = [
13 'installer-paths' => [
27 'core.services.yml' => '',
36 protected function getDrupalComposerStructure()
39 'web' => static::$fileStructure,
45 'installer-paths' => [
54 unset($fileStructure['web']['composer.json']);
55 unset($fileStructure['web']['vendor']);
57 return $fileStructure;
60 protected function setUp()
63 $this->finder = new \DrupalFinder\DrupalFinder();
66 public function testDrupalDefaultStructure()
68 $root = vfsStream::setup('root', null, $this->prepareFileStructure(static::$fileStructure));
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());
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());
80 $root = vfsStream::setup(
83 ['project' => $this->prepareFileStructure(static::$fileStructure)]
86 $this->finder->locateRoot($root->url()),
87 'Not in the scope of the project'
89 $this->assertFalse($this->finder->getDrupalRoot());
90 $this->assertFalse($this->finder->getComposerRoot());
91 $this->assertFalse($this->finder->getVendorDir());
94 public function testDrupalComposerStructure()
96 $fileStructure = $this->getDrupalComposerStructure();
97 $this->assertComposerStructure($fileStructure);
100 public function testDrupalComposerStructureWithCustomRoot()
103 'src' => static::$fileStructure,
106 'drupal/core' => '*',
109 'installer-paths' => [
118 unset($fileStructure['src']['composer.json']);
119 unset($fileStructure['src']['vendor']);
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());
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());
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());
138 $root = vfsStream::setup(
141 ['nested_folder' => $fileStructure]
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());
149 public function testDrupalComposerStructureWithoutRequire()
152 'web' => static::$fileStructure,
155 'installer-paths' => [
163 unset($fileStructure['web']['composer.json']);
164 $this->assertComposerStructure($fileStructure);
167 public function testNoDrupalRootWithRealFilesystem()
169 $root = $this->tempdir(sys_get_temp_dir());
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());
177 public function testDrupalDefaultStructureWithRealFilesystem()
179 $root = $this->tempdir(sys_get_temp_dir());
180 $this->dumpToFileSystem(static::$fileStructure, $root);
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());
187 // Test symlink implementation
188 $symlink = $this->tempdir(sys_get_temp_dir());
189 $this->symlink($root, $symlink . '/foo');
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());
197 public function testDrupalComposerStructureWithRealFilesystem()
199 $root = $this->tempdir(sys_get_temp_dir());
200 $this->dumpToFileSystem($this->getDrupalComposerStructure(), $root);
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());
207 // Test symlink implementation
208 $symlink = $this->tempdir(sys_get_temp_dir());
209 $this->symlink($root, $symlink . '/foo');
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());
217 public function testDrupalWithLinkedModule()
219 $root = $this->tempdir(sys_get_temp_dir());
220 $this->dumpToFileSystem(static::$fileStructure, $root);
222 $module = $this->tempdir(sys_get_temp_dir());
223 $module_link = $root . '/modules/foo';
224 $this->symlink($module, $module_link);
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()));
232 public function testDrupalWithCustomVendor()
234 $root = $this->tempdir(sys_get_temp_dir());
235 $fileStructure = static::$fileStructure;
236 $fileStructure['composer.json'] = [
238 'vendor-dir' => 'vendor-foo'
241 $fileStructure['vendor-foo'] = [];
242 $this->dumpToFileSystem($fileStructure, $root);
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()));
251 * @param $fileStructure
253 protected function assertComposerStructure($fileStructure)
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());
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());
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());
272 $root = vfsStream::setup(
275 ['nested_folder' => $fileStructure]
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());