diff --git a/package_manager/tests/src/Kernel/SymlinkValidatorTest.php b/package_manager/tests/src/Kernel/SymlinkValidatorTest.php index 184f2a1f06f33a425eae1fa36122181f6e11d382..9811cb35284c261abb4951a4d101dd46d67b06f0 100644 --- a/package_manager/tests/src/Kernel/SymlinkValidatorTest.php +++ b/package_manager/tests/src/Kernel/SymlinkValidatorTest.php @@ -7,7 +7,9 @@ namespace Drupal\Tests\package_manager\Kernel; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\Url; use Drupal\package_manager\Event\CollectIgnoredPathsEvent; +use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreCreateEvent; +use Drupal\package_manager\Event\StatusCheckEvent; use Drupal\package_manager\ValidationResult; use PhpTuf\ComposerStager\Domain\Exception\PreconditionException; use PhpTuf\ComposerStager\Domain\Service\Precondition\CodebaseContainsNoSymlinksInterface; @@ -55,18 +57,22 @@ class SymlinkValidatorTest extends PackageManagerKernelTestBase { * The test cases. */ public function providerSymlink(): array { - return [ - 'no symlinks' => [ + $test_cases = []; + foreach ([PreApplyEvent::class, PreCreateEvent::class, StatusCheckEvent::class] as $event) { + $test_cases["$event event with no symlinks"] = [ FALSE, [], - ], - 'symlinks' => [ + $event, + ]; + $test_cases["$event event with symlinks"] = [ TRUE, [ ValidationResult::createError(['Symlinks were found.']), ], - ], - ]; + $event, + ]; + } + return $test_cases; } /** @@ -76,10 +82,12 @@ class SymlinkValidatorTest extends PackageManagerKernelTestBase { * Whether or not the precondition will detect symlinks. * @param \Drupal\package_manager\ValidationResult[] $expected_results * The expected validation results. + * @param string $event + * The event to test. * * @dataProvider providerSymlink */ - public function testSymlink(bool $symlinks_exist, array $expected_results): void { + public function testSymlink(bool $symlinks_exist, array $expected_results, string $event): void { $add_ignored_path = function (CollectIgnoredPathsEvent $event): void { $event->add(['ignore/me']); }; @@ -90,23 +98,40 @@ class SymlinkValidatorTest extends PackageManagerKernelTestBase { Argument::type(PathInterface::class), Argument::type(PathListInterface::class), ]; - $this->precondition->assertIsFulfilled(...$arguments) - ->will(function (array $arguments) use ($symlinks_exist): void { - Assert::assertContains('ignore/me', $arguments[2]->getAll()); - - if ($symlinks_exist) { - throw new PreconditionException($this->reveal(), 'Symlinks were found.'); - } - }) - ->shouldBeCalled(); - - $this->assertStatusCheckResults($expected_results); - $this->assertResults($expected_results, PreCreateEvent::class); + $listener = function () use ($arguments, $symlinks_exist): void { + $this->precondition->assertIsFulfilled(...$arguments) + ->will(function (array $arguments) use ($symlinks_exist): void { + Assert::assertContains('ignore/me', $arguments[2]->getAll()); + + if ($symlinks_exist) { + throw new PreconditionException($this->reveal(), 'Symlinks were found.'); + } + }) + ->shouldBeCalled(); + }; + $this->addEventTestListener($listener, $event); + if ($event === StatusCheckEvent::class) { + $this->assertStatusCheckResults($expected_results); + } + else { + $this->assertResults($expected_results, $event); + } + } + /** + * Tests the Composer Stager's symlink precondition with richer help. + * + * @param bool $symlinks_exist + * Whether or not the precondition will detect symlinks. + * @param array $expected_results + * The expected validation results. + * @param string $event + * The event to test. + * + * @dataProvider providerSymlink + */ + public function testHelpLink(bool $symlinks_exist, array $expected_results, string $event): void { $this->enableModules(['help']); - // Enabling Help rebuilt the container, so we need to re-add our event - // listener. - $this->addEventTestListener($add_ignored_path, CollectIgnoredPathsEvent::class); $url = Url::fromRoute('help.page', ['name' => 'package_manager']) ->setOption('fragment', 'package-manager-faq-symlinks-found') @@ -121,8 +146,7 @@ class SymlinkValidatorTest extends PackageManagerKernelTestBase { $messages = array_map($map, $result->getMessages()); $expected_results[$index] = ValidationResult::createError($messages); } - $this->assertStatusCheckResults($expected_results); - $this->assertResults($expected_results, PreCreateEvent::class); + $this->testSymlink($symlinks_exist, $expected_results, $event); } }