283 lines
10 KiB
PHP
283 lines
10 KiB
PHP
<?php
|
|
|
|
namespace DrupalFinder\Tests;
|
|
|
|
use org\bovigo\vfs\vfsStream;
|
|
|
|
class Drupal8FinderTest extends DrupalFinderTestBase
|
|
{
|
|
protected static $fileStructure = [
|
|
'autoload.php' => '',
|
|
'composer.json' => [
|
|
'extra' => [
|
|
'installer-paths' => [
|
|
'core' => [
|
|
'type:drupal-core'
|
|
]
|
|
]
|
|
]
|
|
],
|
|
'core' => [
|
|
'includes' => [
|
|
'common.inc' => '',
|
|
],
|
|
'misc' => [
|
|
'drupal.js' => '',
|
|
],
|
|
'core.services.yml' => '',
|
|
],
|
|
'modules' => [],
|
|
'vendor' => [],
|
|
];
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
protected function getDrupalComposerStructure()
|
|
{
|
|
$fileStructure = [
|
|
'web' => static::$fileStructure,
|
|
'composer.json' => [
|
|
'require' => [
|
|
'drupal/core' => '*',
|
|
],
|
|
'extra' => [
|
|
'installer-paths' => [
|
|
'web/core' => [
|
|
'type:drupal-core',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
'vendor' => [],
|
|
];
|
|
unset($fileStructure['web']['composer.json']);
|
|
unset($fileStructure['web']['vendor']);
|
|
|
|
return $fileStructure;
|
|
}
|
|
|
|
protected function setUp()
|
|
{
|
|
parent::setUp();
|
|
$this->finder = new \DrupalFinder\DrupalFinder();
|
|
}
|
|
|
|
public function testDrupalDefaultStructure()
|
|
{
|
|
$root = vfsStream::setup('root', null, $this->prepareFileStructure(static::$fileStructure));
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root->url()));
|
|
$this->assertSame('vfs://root', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root->url() . '/misc'));
|
|
$this->assertSame('vfs://root', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$root = vfsStream::setup(
|
|
'root',
|
|
null,
|
|
['project' => $this->prepareFileStructure(static::$fileStructure)]
|
|
);
|
|
$this->assertFalse(
|
|
$this->finder->locateRoot($root->url()),
|
|
'Not in the scope of the project'
|
|
);
|
|
$this->assertFalse($this->finder->getDrupalRoot());
|
|
$this->assertFalse($this->finder->getComposerRoot());
|
|
$this->assertFalse($this->finder->getVendorDir());
|
|
}
|
|
|
|
public function testDrupalComposerStructure()
|
|
{
|
|
$fileStructure = $this->getDrupalComposerStructure();
|
|
$this->assertComposerStructure($fileStructure);
|
|
}
|
|
|
|
public function testDrupalComposerStructureWithCustomRoot()
|
|
{
|
|
$fileStructure = [
|
|
'src' => static::$fileStructure,
|
|
'composer.json' => [
|
|
'require' => [
|
|
'drupal/core' => '*',
|
|
],
|
|
'extra' => [
|
|
'installer-paths' => [
|
|
'src/core' => [
|
|
'type:drupal-core',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
'vendor' => [],
|
|
];
|
|
unset($fileStructure['src']['composer.json']);
|
|
unset($fileStructure['src']['vendor']);
|
|
|
|
$fileStructure = $this->prepareFileStructure($fileStructure);
|
|
$root = vfsStream::setup('root', null, $fileStructure);
|
|
$this->assertTrue($this->finder->locateRoot($root->url() . '/src'));
|
|
$this->assertSame('vfs://root/src', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root->url() . '/src/misc'));
|
|
$this->assertSame('vfs://root/src', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root->url()));
|
|
$this->assertSame('vfs://root/src', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$root = vfsStream::setup(
|
|
'root',
|
|
null,
|
|
['nested_folder' => $fileStructure]
|
|
);
|
|
$this->assertFalse($this->finder->locateRoot($root->url()));
|
|
$this->assertFalse($this->finder->getDrupalRoot());
|
|
$this->assertFalse($this->finder->getComposerRoot());
|
|
$this->assertFalse($this->finder->getVendorDir());
|
|
}
|
|
|
|
public function testDrupalComposerStructureWithoutRequire()
|
|
{
|
|
$fileStructure = [
|
|
'web' => static::$fileStructure,
|
|
'composer.json' => [
|
|
'extra' => [
|
|
'installer-paths' => [
|
|
'web/core' => [
|
|
'drupal/core',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
];
|
|
unset($fileStructure['web']['composer.json']);
|
|
$this->assertComposerStructure($fileStructure);
|
|
}
|
|
|
|
public function testNoDrupalRootWithRealFilesystem()
|
|
{
|
|
$root = $this->tempdir(sys_get_temp_dir());
|
|
|
|
$this->assertFalse($this->finder->locateRoot($root));
|
|
$this->assertFalse($this->finder->getDrupalRoot());
|
|
$this->assertFalse($this->finder->getComposerRoot());
|
|
$this->assertFalse($this->finder->getVendorDir());
|
|
}
|
|
|
|
public function testDrupalDefaultStructureWithRealFilesystem()
|
|
{
|
|
$root = $this->tempdir(sys_get_temp_dir());
|
|
$this->dumpToFileSystem(static::$fileStructure, $root);
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root));
|
|
$this->assertSame($root, $this->finder->getDrupalRoot());
|
|
$this->assertSame($root, $this->finder->getComposerRoot());
|
|
$this->assertSame($root . '/vendor', $this->finder->getVendorDir());
|
|
|
|
// Test symlink implementation
|
|
$symlink = $this->tempdir(sys_get_temp_dir());
|
|
$this->symlink($root, $symlink . '/foo');
|
|
|
|
$this->assertTrue($this->finder->locateRoot($symlink . '/foo'));
|
|
$this->assertSame($root, $this->finder->getDrupalRoot());
|
|
$this->assertSame($root, $this->finder->getComposerRoot());
|
|
$this->assertSame($root . '/vendor', $this->finder->getVendorDir());
|
|
}
|
|
|
|
public function testDrupalComposerStructureWithRealFilesystem()
|
|
{
|
|
$root = $this->tempdir(sys_get_temp_dir());
|
|
$this->dumpToFileSystem($this->getDrupalComposerStructure(), $root);
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root));
|
|
$this->assertSame($root . '/web', $this->finder->getDrupalRoot());
|
|
$this->assertSame($root, $this->finder->getComposerRoot());
|
|
$this->assertSame($root . '/vendor', $this->finder->getVendorDir());
|
|
|
|
// Test symlink implementation
|
|
$symlink = $this->tempdir(sys_get_temp_dir());
|
|
$this->symlink($root, $symlink . '/foo');
|
|
|
|
$this->assertTrue($this->finder->locateRoot($symlink . '/foo'));
|
|
$this->assertSame($root . '/web', $this->finder->getDrupalRoot());
|
|
$this->assertSame($root, $this->finder->getComposerRoot());
|
|
$this->assertSame($root . '/vendor', $this->finder->getVendorDir());
|
|
}
|
|
|
|
public function testDrupalWithLinkedModule()
|
|
{
|
|
$root = $this->tempdir(sys_get_temp_dir());
|
|
$this->dumpToFileSystem(static::$fileStructure, $root);
|
|
|
|
$module = $this->tempdir(sys_get_temp_dir());
|
|
$module_link = $root . '/modules/foo';
|
|
$this->symlink($module, $module_link);
|
|
|
|
$this->assertTrue($this->finder->locateRoot($module_link));
|
|
$this->assertSame($root, realpath($this->finder->getDrupalRoot()));
|
|
$this->assertSame($root, realpath($this->finder->getComposerRoot()));
|
|
$this->assertSame($root . '/vendor', realpath($this->finder->getVendorDir()));
|
|
}
|
|
|
|
public function testDrupalWithCustomVendor()
|
|
{
|
|
$root = $this->tempdir(sys_get_temp_dir());
|
|
$fileStructure = static::$fileStructure;
|
|
$fileStructure['composer.json'] = [
|
|
'config' => [
|
|
'vendor-dir' => 'vendor-foo'
|
|
]
|
|
];
|
|
$fileStructure['vendor-foo'] = [];
|
|
$this->dumpToFileSystem($fileStructure, $root);
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root));
|
|
$this->assertSame($root, realpath($this->finder->getDrupalRoot()));
|
|
$this->assertSame($root, realpath($this->finder->getComposerRoot()));
|
|
$this->assertSame($root . '/vendor-foo', realpath($this->finder->getVendorDir()));
|
|
}
|
|
|
|
/**
|
|
* @param $fileStructure
|
|
*/
|
|
protected function assertComposerStructure($fileStructure)
|
|
{
|
|
$fileStructure = $this->prepareFileStructure($fileStructure);
|
|
$root = vfsStream::setup('root', null, $fileStructure);
|
|
$this->assertTrue($this->finder->locateRoot($root->url() . '/web'));
|
|
$this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root->url() . '/web/misc'));
|
|
$this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$this->assertTrue($this->finder->locateRoot($root->url()));
|
|
$this->assertSame('vfs://root/web', $this->finder->getDrupalRoot());
|
|
$this->assertSame('vfs://root', $this->finder->getComposerRoot());
|
|
$this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
|
|
|
|
$root = vfsStream::setup(
|
|
'root',
|
|
null,
|
|
['nested_folder' => $fileStructure]
|
|
);
|
|
$this->assertFalse($this->finder->locateRoot($root->url()));
|
|
$this->assertFalse($this->finder->getDrupalRoot());
|
|
$this->assertFalse($this->finder->getComposerRoot());
|
|
$this->assertFalse($this->finder->getVendorDir());
|
|
}
|
|
}
|