3 namespace DrupalFinder\Tests;
5 use org\bovigo\vfs\vfsStream;
7 class Drupal7FinderTest extends DrupalFinderTestBase
10 * @var \DrupalFinder\DrupalFinder
14 protected static $fileStructure = [
31 protected function getDrupalComposerStructure()
34 'web' => static::$fileStructure,
37 'drupal/drupal' => '*',
40 'installer-paths' => [
49 return $fileStructure;
52 public function testDrupalComposerStructure()
54 $fileStructure = $this->getDrupalComposerStructure();
55 $this->assertComposerStructure($fileStructure);
58 public function testDrupalComposerStructureWithoutRequire()
61 'web' => static::$fileStructure,
64 'installer-paths' => [
72 $this->assertComposerStructure($fileStructure);
75 public function testNoDrupalRootWithRealFilesystem()
77 $root = $this->tempdir(sys_get_temp_dir());
79 $this->assertFalse($this->finder->locateRoot($root));
80 $this->assertFalse($this->finder->getDrupalRoot());
81 $this->assertFalse($this->finder->getComposerRoot());
82 $this->assertFalse($this->finder->getVendorDir());
85 public function testDrupalComposerStructureWithRealFilesystem()
87 $root = $this->tempdir(sys_get_temp_dir());
88 $this->dumpToFileSystem($this->getDrupalComposerStructure(), $root);
90 $this->assertTrue($this->finder->locateRoot($root));
91 $this->assertSame($root . '/web', $this->finder->getDrupalRoot());
92 $this->assertSame($root, $this->finder->getComposerRoot());
93 $this->assertSame($root . '/vendor', $this->finder->getVendorDir());
95 // Test symlink implementation
96 $symlink = $this->tempdir(sys_get_temp_dir());
97 $this->symlink($root, $symlink . '/foo');
99 $this->assertTrue($this->finder->locateRoot($symlink . '/foo'));
100 $this->assertSame($root . '/web', $this->finder->getDrupalRoot());
101 $this->assertSame($root, $this->finder->getComposerRoot());
102 $this->assertSame($root . '/vendor', $this->finder->getVendorDir());
105 public function testDrupalWithLinkedModule()
107 $root = $this->tempdir(sys_get_temp_dir());
108 $this->dumpToFileSystem($this->getDrupalComposerStructure(), $root);
110 $module = $this->tempdir(sys_get_temp_dir());
111 $module_link = $root . '/web/sites/all/modules/foo';
112 $this->symlink($module, $module_link);
114 $this->assertTrue($this->finder->locateRoot($module_link));
115 $this->assertSame($root . '/web', realpath($this->finder->getDrupalRoot()));
116 $this->assertSame($root, realpath($this->finder->getComposerRoot()));
117 $this->assertSame($root . '/vendor', realpath($this->finder->getVendorDir()));
120 public function testDrupalWithCustomVendor()
122 $root = $this->tempdir(sys_get_temp_dir());
123 $fileStructure = $this->getDrupalComposerStructure();
124 $composerJson = $fileStructure['composer.json'];
125 $composerJson['config']['vendor-dir'] = 'vendor-foo';
126 $fileStructure['composer.json'] = $composerJson;
127 $fileStructure['vendor-foo'] = [];
128 $this->dumpToFileSystem($fileStructure, $root);
130 $this->assertTrue($this->finder->locateRoot($root));
131 $this->assertSame($root . '/web', realpath($this->finder->getDrupalRoot()));
132 $this->assertSame($root, realpath($this->finder->getComposerRoot()));
133 $this->assertSame($root . '/vendor-foo', realpath($this->finder->getVendorDir()));
137 * @param $fileStructure
139 protected function assertComposerStructure($fileStructure)
141 $fileStructure = $this->prepareFileStructure($fileStructure);
142 $root = vfsStream::setup('root', null, $fileStructure);
143 $this->assertTrue($this->finder->locateRoot($root->url() . '/web'));
144 $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
145 $this->assertSame('vfs://root', $this->finder->getComposerRoot());
146 $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
148 $this->assertTrue($this->finder->locateRoot($root->url() . '/web/misc'));
149 $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
150 $this->assertSame('vfs://root', $this->finder->getComposerRoot());
151 $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
153 $this->assertTrue($this->finder->locateRoot($root->url()));
154 $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
155 $this->assertSame('vfs://root', $this->finder->getComposerRoot());
156 $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
158 $root = vfsStream::setup(
161 ['nested_folder' => $fileStructure]
163 $this->assertFalse($this->finder->locateRoot($root->url()));
164 $this->assertFalse($this->finder->getDrupalRoot());
165 $this->assertFalse($this->finder->getComposerRoot());
166 $this->assertFalse($this->finder->getVendorDir());