annotate vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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 }