diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml index bfcb27a22d665d7165488ba01791b9d7be518f83..a592916bf7584623a500729171f0bbc74f56284b 100644 --- a/automatic_updates.services.yml +++ b/automatic_updates.services.yml @@ -53,10 +53,9 @@ services: tags: - { name: event_subscriber } automatic_updates.disk_space_validator: - class: Drupal\automatic_updates\Validator\DiskSpaceValidator + class: Drupal\automatic_updates\Validator\PackageManagerReadinessCheck arguments: - - '@package_manager.path_locator' - - '@string_translation' + - '@package_manager.validator.disk_space' tags: - { name: event_subscriber } automatic_updates.pending_updates_validator: diff --git a/package_manager/package_manager.services.yml b/package_manager/package_manager.services.yml index 8b207d342e15290d5976db5cf73c45f87482761c..fdcd9d96055a0de162de2cc5837211e8cabd6775 100644 --- a/package_manager/package_manager.services.yml +++ b/package_manager/package_manager.services.yml @@ -93,3 +93,10 @@ services: - '@string_translation' tags: - { name: event_subscriber } + package_manager.validator.disk_space: + class: Drupal\package_manager\EventSubscriber\DiskSpaceValidator + arguments: + - '@package_manager.path_locator' + - '@string_translation' + tags: + - { name: event_subscriber } diff --git a/src/Validator/DiskSpaceValidator.php b/package_manager/src/EventSubscriber/DiskSpaceValidator.php similarity index 88% rename from src/Validator/DiskSpaceValidator.php rename to package_manager/src/EventSubscriber/DiskSpaceValidator.php index 2675a771bdfea788ed5df8685946652048bbc5d8..a9b69c4bf23b02ab0cf7833a35d94a75e4bea528 100644 --- a/src/Validator/DiskSpaceValidator.php +++ b/package_manager/src/EventSubscriber/DiskSpaceValidator.php @@ -1,20 +1,20 @@ <?php -namespace Drupal\automatic_updates\Validator; +namespace Drupal\package_manager\EventSubscriber; -use Drupal\automatic_updates\Event\ReadinessCheckEvent; +use Drupal\package_manager\Event\PreCreateEvent; +use Drupal\package_manager\Event\StageEvent; use Drupal\package_manager\ValidationResult; use Drupal\Component\FileSystem\FileSystem; use Drupal\Component\Utility\Bytes; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslationInterface; use Drupal\package_manager\PathLocator; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Validates that there is enough free disk space to do automatic updates. */ -class DiskSpaceValidator implements EventSubscriberInterface { +class DiskSpaceValidator implements StageValidatorInterface { use StringTranslationTrait; @@ -97,12 +97,9 @@ class DiskSpaceValidator implements EventSubscriberInterface { } /** - * Checks that there is enough free space to perform automatic updates. - * - * @param \Drupal\automatic_updates\Event\ReadinessCheckEvent $event - * The event object. + * {@inheritdoc} */ - public function checkDiskSpace(ReadinessCheckEvent $event): void { + public function validateStage(StageEvent $event): void { $root_path = $this->pathLocator->getProjectRoot(); $vendor_path = $this->pathLocator->getVendorDirectory(); $messages = []; @@ -141,7 +138,7 @@ class DiskSpaceValidator implements EventSubscriberInterface { if ($messages) { $summary = count($messages) > 1 - ? $this->t("There is not enough disk space to perform an automatic update.") + ? $this->t("There is not enough disk space to create a staging area.") : NULL; $error = ValidationResult::createError($messages, $summary); @@ -164,7 +161,7 @@ class DiskSpaceValidator implements EventSubscriberInterface { */ public static function getSubscribedEvents() { return [ - ReadinessCheckEvent::class => 'checkDiskSpace', + PreCreateEvent::class => 'validateStage', ]; } diff --git a/tests/src/Kernel/ReadinessValidation/DiskSpaceValidatorTest.php b/package_manager/tests/src/Kernel/DiskSpaceValidatorTest.php similarity index 75% rename from tests/src/Kernel/ReadinessValidation/DiskSpaceValidatorTest.php rename to package_manager/tests/src/Kernel/DiskSpaceValidatorTest.php index 7ce2d8c65f442c0960d91028a1bfbf4370398eb1..9e33cdc73adaf9fd584571b4c18396674f7a75e6 100644 --- a/tests/src/Kernel/ReadinessValidation/DiskSpaceValidatorTest.php +++ b/package_manager/tests/src/Kernel/DiskSpaceValidatorTest.php @@ -1,29 +1,27 @@ <?php -namespace Drupal\Tests\automatic_updates\Kernel\ReadinessValidation; +namespace Drupal\Tests\package_manager\Kernel; +use Drupal\KernelTests\KernelTestBase; +use Drupal\package_manager\Event\PreCreateEvent; +use Drupal\package_manager\EventSubscriber\DiskSpaceValidator; use Drupal\package_manager\ValidationResult; -use Drupal\automatic_updates\Validator\DiskSpaceValidator; use Drupal\Component\Utility\Bytes; -use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase; -use Drupal\Core\StringTranslation\PluralTranslatableMarkup; -use Drupal\Core\StringTranslation\TranslatableMarkup; -use Drupal\Core\StringTranslation\TranslationInterface; +use Drupal\Tests\package_manager\Traits\ValidationTestTrait; /** - * @covers \Drupal\automatic_updates\Validator\DiskSpaceValidator + * @covers \Drupal\package_manager\EventSubscriber\DiskSpaceValidator * - * @group automatic_updates + * @group package_manager */ -class DiskSpaceValidatorTest extends AutomaticUpdatesKernelTestBase { +class DiskSpaceValidatorTest extends KernelTestBase { + + use ValidationTestTrait; /** * {@inheritdoc} */ - protected static $modules = [ - 'automatic_updates', - 'package_manager', - ]; + protected static $modules = ['package_manager']; /** * Data provider for ::testDiskSpaceValidation(). @@ -35,7 +33,7 @@ class DiskSpaceValidatorTest extends AutomaticUpdatesKernelTestBase { $root_insufficient = t('Drupal root filesystem "root" has insufficient space. There must be at least 1024 megabytes free.'); $vendor_insufficient = t('Vendor filesystem "vendor" has insufficient space. There must be at least 1024 megabytes free.'); $temp_insufficient = t('Directory "temp" has insufficient space. There must be at least 1024 megabytes free.'); - $summary = t("There is not enough disk space to perform an automatic update."); + $summary = t("There is not enough disk space to create a staging area."); return [ 'shared, vendor and temp sufficient, root insufficient' => [ @@ -202,38 +200,12 @@ class DiskSpaceValidatorTest extends AutomaticUpdatesKernelTestBase { }; $validator->sharedDisk = $shared_disk; $validator->freeSpace = array_map([Bytes::class, 'toNumber'], $free_space); - $this->container->set('automatic_updates.disk_space_validator', $validator); - $this->assertCheckerResultsFromManager($expected_results, TRUE); - } -} -/** - * Implements a translation manager in tests. - * - * @todo Copied from core/modules/user/tests/src/Unit/PermissionHandlerTest.php - * when moving to core open an issue consolidate this test class. - */ -class TestTranslationManager implements TranslationInterface { + $stage = $this->prophesize('\Drupal\package_manager\Stage'); + $event = new PreCreateEvent($stage->reveal()); + $validator->validateStage($event); - /** - * {@inheritdoc} - */ - public function translate($string, array $args = [], array $options = []) { - return new TranslatableMarkup($string, $args, $options, $this); - } - - /** - * {@inheritdoc} - */ - public function translateString(TranslatableMarkup $translated_string) { - return $translated_string->getUntranslatedString(); - } - - /** - * {@inheritdoc} - */ - public function formatPlural($count, $singular, $plural, array $args = [], array $options = []) { - return new PluralTranslatableMarkup($count, $singular, $plural, $args, $options, $this); + $this->assertValidationResultsEqual($expected_results, $event->getResults()); } } diff --git a/tests/src/Kernel/ReadinessValidation/ComposerExecutableValidatorTest.php b/tests/src/Kernel/ReadinessValidation/PackageManagerReadinessChecksTest.php similarity index 51% rename from tests/src/Kernel/ReadinessValidation/ComposerExecutableValidatorTest.php rename to tests/src/Kernel/ReadinessValidation/PackageManagerReadinessChecksTest.php index fd7fe341f05912dfc99fb99b718b0454edca0123..003e4ea86b6419a61fe993a4ca6ed5db43774da2 100644 --- a/tests/src/Kernel/ReadinessValidation/ComposerExecutableValidatorTest.php +++ b/tests/src/Kernel/ReadinessValidation/PackageManagerReadinessChecksTest.php @@ -8,13 +8,16 @@ use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase; use Prophecy\Argument; /** - * Tests that the Composer executable is validated during readiness checking. + * Tests that Package Manager validators are invoked during readiness checking. * * @group automatic_updates * + * @covers \Drupal\automatic_updates\Validator\PackageManagerReadinessCheck + * * @see \Drupal\Tests\package_manager\Kernel\ComposerExecutableValidatorTest + * @see \Drupal\Tests\package_manager\Kernel\DiskSpaceValidatorTest */ -class ComposerExecutableValidatorTest extends AutomaticUpdatesKernelTestBase { +class PackageManagerReadinessChecksTest extends AutomaticUpdatesKernelTestBase { /** * {@inheritdoc} @@ -25,16 +28,34 @@ class ComposerExecutableValidatorTest extends AutomaticUpdatesKernelTestBase { ]; /** - * Tests that the Composer executable is validated during readiness checking. + * Data provider for ::testValidatorInvoked(). + * + * @return string[][] + * Sets of arguments to pass to the test method. + */ + public function providerValidatorInvoked(): array { + return [ + ['package_manager.validator.composer_executable'], + ['package_manager.validator.disk_space'], + ]; + } + + /** + * Tests that a Package Manager validator is invoked during readiness checks. + * + * @param string $service_id + * The service ID of the validator that should be invoked. + * + * @dataProvider providerValidatorInvoked */ - public function testComposerExecutableIsValidated(): void { + public function testValidatorInvoked(string $service_id): void { // Set up a mocked version of the Composer executable validator, to prove // that it gets called with a readiness check event, when we run readiness // checks. $event = Argument::type(ReadinessCheckEvent::class); $validator = $this->prophesize(StageValidatorInterface::class); $validator->validateStage($event)->shouldBeCalled(); - $this->container->set('package_manager.validator.composer_executable', $validator->reveal()); + $this->container->set($service_id, $validator->reveal()); $this->container->get('automatic_updates.readiness_validation_manager') ->run(); diff --git a/tests/src/Kernel/UpdaterTest.php b/tests/src/Kernel/UpdaterTest.php index 54289643418be9d780e1e24f5568cf3100b51fbf..add52e11db6df1dd5f1b63c138f735ff54b1adc1 100644 --- a/tests/src/Kernel/UpdaterTest.php +++ b/tests/src/Kernel/UpdaterTest.php @@ -32,8 +32,11 @@ class UpdaterTest extends AutomaticUpdatesKernelTestBase { // Point to a fake site which requires Drupal core via a distribution. The // lock file should be scanned to determine the core packages, which should // result in drupal/core-recommended being updated. + $fixture_dir = __DIR__ . '/../../fixtures/fake-site'; $locator = $this->prophesize(PathLocator::class); - $locator->getActiveDirectory()->willReturn(__DIR__ . '/../../fixtures/fake-site'); + $locator->getActiveDirectory()->willReturn($fixture_dir); + $locator->getProjectRoot()->willReturn($fixture_dir); + $locator->getVendorDirectory()->willReturn($fixture_dir); $locator->getStageDirectory()->willReturn('/tmp'); $this->container->set('package_manager.path_locator', $locator->reveal());