Skip to content
Snippets Groups Projects

Issue #3328234: Improve test DX *and* confidence: assert VFS state

Compare and Show latest version
1 file
+ 25
16
Compare changes
  • Side-by-side
  • Inline
@@ -9,7 +9,7 @@ use Drupal\KernelTests\KernelTestBase;
use Drupal\package_manager\ComposerUtility;
use Drupal\Tests\package_manager\Traits\AssertPreconditionsTrait;
use Drupal\Tests\package_manager\Traits\FixtureUtilityTrait;
use org\bovigo\vfs\vfsStream;
use Symfony\Component\Filesystem\Filesystem;
/**
* @coversDefaultClass \Drupal\package_manager\ComposerUtility
@@ -21,6 +21,13 @@ class ComposerUtilityTest extends KernelTestBase {
use AssertPreconditionsTrait;
use FixtureUtilityTrait;
/**
* The temporary root directory for testing.
*
* @var string
*/
protected string $rootDir;
/**
* {@inheritdoc}
*/
@@ -32,9 +39,15 @@ class ComposerUtilityTest extends KernelTestBase {
protected function setUp(): void {
parent::setUp();
$fixture = vfsStream::newDirectory('fixture');
$this->vfsRoot->addChild($fixture);
static::copyFixtureFilesTo(__DIR__ . '/../../fixtures/fake_site', $fixture->url());
$this->rootDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'composer_utility_testing_root' . $this->databasePrefix;
$fs = new Filesystem();
if (is_dir($this->rootDir)) {
$fs = new Filesystem();
$fs->remove($this->rootDir);
}
$fs->mkdir($this->rootDir);
$tempDir = $this->rootDir . DIRECTORY_SEPARATOR . 'temp/';
static::copyFixtureFilesTo(__DIR__ . '/../../fixtures/fake_site', $tempDir);
$relative_projects_dir = '../../web/projects';
(new FixtureManipulator())
->addPackage(
@@ -88,7 +101,7 @@ class ComposerUtilityTest extends KernelTestBase {
// not match the project or package. Only the project key in this file
// need to match.
->addProjectAtPath("web/projects/any_folder_name/any_sub_folder", 'nested_no_match_project', 'any_yml_file.info.yml')
->commitChanges($fixture->url());
->commitChanges($tempDir);
}
/**
@@ -96,21 +109,19 @@ class ComposerUtilityTest extends KernelTestBase {
*/
public function testCreateForDirectoryValidation(): void {
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Composer could not find the config file: vfs://root/composer.json');
$this->expectExceptionMessage('Composer could not find the config file: ' . $this->rootDir . DIRECTORY_SEPARATOR . 'composer.json');
$dir = vfsStream::setup()->url();
ComposerUtility::createForDirectory($dir);
ComposerUtility::createForDirectory($this->rootDir);
}
/**
* Tests that ComposerUtility disables automatic creation of .htaccess files.
*/
public function testHtaccessProtectionDisabled(): void {
$dir = vfsStream::setup()->url();
file_put_contents($dir . '/composer.json', '{}');
file_put_contents($this->rootDir . '/composer.json', '{}');
ComposerUtility::createForDirectory($dir);
$this->assertFileDoesNotExist($dir . '/.htaccess');
ComposerUtility::createForDirectory($this->rootDir);
$this->assertFileDoesNotExist($this->rootDir . '/.htaccess');
}
/**
@@ -124,8 +135,7 @@ class ComposerUtilityTest extends KernelTestBase {
* @dataProvider providerGetProjectForPackage
*/
public function testGetProjectForPackage(string $package, ?string $expected_project): void {
$dir = $this->vfsRoot->getChild('fixture')->url();
$this->assertSame($expected_project, ComposerUtility::createForDirectory($dir)->getProjectForPackage($package));
$this->assertSame($expected_project, ComposerUtility::createForDirectory($this->rootDir . DIRECTORY_SEPARATOR . 'temp')->getProjectForPackage($package));
}
/**
@@ -174,8 +184,7 @@ class ComposerUtilityTest extends KernelTestBase {
* @dataProvider providerGetPackageForProject
*/
public function testGetPackageForProject(string $project, ?string $expected_package): void {
$dir = $this->vfsRoot->getChild('fixture')->url();
$this->assertSame($expected_package, ComposerUtility::createForDirectory($dir)->getPackageForProject($project));
$this->assertSame($expected_package, ComposerUtility::createForDirectory($this->rootDir . DIRECTORY_SEPARATOR . 'temp')->getPackageForProject($project));
}
/**
Loading