diff --git a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php index 80cc70f575c388306f822d25f077cd08c67a3234..64a276ec8860a758e84c5b6c61a15fe0f9185c3d 100644 --- a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php +++ b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php @@ -3,12 +3,9 @@ namespace Drupal\Tests\automatic_updates_extensions\Kernel; use Drupal\automatic_updates_extensions\ExtensionUpdater; -use Drupal\package_manager\Event\StageEvent; -use Drupal\package_manager\Exception\StageException; use Drupal\package_manager\Exception\StageValidationException; -use Drupal\package_manager\Stage; use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase; -use Drupal\Tests\package_manager\Kernel\TestStage; +use Drupal\Tests\package_manager\Kernel\TestStageTrait; use GuzzleHttp\Client; use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; @@ -124,29 +121,6 @@ abstract class AutomaticUpdatesExtensionsKernelTestBase extends AutomaticUpdates */ class TestExtensionUpdater extends ExtensionUpdater { - /** - * {@inheritdoc} - */ - public function __construct(...$arguments) { - parent::__construct(...$arguments); - - $mirror = new \ReflectionClass(Stage::class); - $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), TestStage::$stagingRoot); - } - - /** - * {@inheritdoc} - */ - protected function dispatch(StageEvent $event, callable $on_error = NULL): void { - try { - parent::dispatch($event, $on_error); - } - catch (StageException $e) { - // Attach the event object to the exception so that test code can verify - // that the exception was thrown when a specific event was dispatched. - $e->event = $event; - throw $e; - } - } + use TestStageTrait; } diff --git a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php index 793253504af5a7d24ad090397b5760bf5b6a4459..cc2e2e4d4eb347aa2a6b61ab576bf657ab906502 100644 --- a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php +++ b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php @@ -31,6 +31,17 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { 'package_manager_bypass', ]; + /** + * The test staging root. + * + * This value must be set before creating a test stage instance. + * + * @var string + * + * @see \Drupal\Tests\package_manager\Kernel\TestStageTrait::__construct() + */ + public static $testStagingRoot; + /** * The service IDs of any validators to disable. * @@ -175,7 +186,7 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { // Create a staging root directory alongside the active directory. $stage_dir = vfsStream::newDirectory('stage'); $this->vfsRoot->addChild($stage_dir); - TestStage::$stagingRoot = $stage_dir->url(); + static::$testStagingRoot = $stage_dir->url(); $path_locator = $this->mockPathLocator($active_dir->url()); @@ -230,9 +241,9 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { } /** - * Defines a stage specifically for testing purposes. + * Common functions for test stages. */ -class TestStage extends Stage { +trait TestStageTrait { /** * The directory where staging areas will be created. @@ -246,9 +257,8 @@ class TestStage extends Stage { */ public function __construct(...$arguments) { parent::__construct(...$arguments); - - $mirror = new \ReflectionClass(parent::class); - $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), static::$stagingRoot); + $mirror = new \ReflectionClass(Stage::class); + $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), PackageManagerKernelTestBase::$testStagingRoot); } /** @@ -266,6 +276,14 @@ class TestStage extends Stage { } } +} +/** + * Defines a stage specifically for testing purposes. + */ +class TestStage extends Stage { + + use TestStageTrait; + } /** diff --git a/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php b/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php index 1679f69b628a82d806f2072e653b3b5d115333dc..de4baeb504a3eafeb72cbb7bdb630d2b3ffdcbd9 100644 --- a/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php +++ b/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php @@ -5,10 +5,9 @@ namespace Drupal\Tests\automatic_updates\Kernel; use Drupal\automatic_updates\CronUpdater; use Drupal\automatic_updates\Updater; use Drupal\Core\DependencyInjection\ContainerBuilder; -use Drupal\package_manager\Stage; use Drupal\Tests\automatic_updates\Traits\ValidationTestTrait; use Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase; -use Drupal\Tests\package_manager\Kernel\TestStage; +use Drupal\Tests\package_manager\Kernel\TestStageTrait; use GuzzleHttp\Client; use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; @@ -151,15 +150,7 @@ abstract class AutomaticUpdatesKernelTestBase extends PackageManagerKernelTestBa */ class TestUpdater extends Updater { - /** - * {@inheritdoc} - */ - public function __construct(...$arguments) { - parent::__construct(...$arguments); - - $mirror = new \ReflectionClass(Stage::class); - $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), TestStage::$stagingRoot); - } + use TestStageTrait; } @@ -168,14 +159,6 @@ class TestUpdater extends Updater { */ class TestCronUpdater extends CronUpdater { - /** - * {@inheritdoc} - */ - public function __construct(...$arguments) { - parent::__construct(...$arguments); - - $mirror = new \ReflectionClass(Stage::class); - $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), TestStage::$stagingRoot); - } + use TestStageTrait; } diff --git a/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php b/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php index 142d7d9e214c9cc56a9337397b8084bcd84fc4b9..ff06b1a4eb5d8de54422b4b25e23ffc58b410515 100644 --- a/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php +++ b/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php @@ -5,7 +5,6 @@ namespace Drupal\Tests\automatic_updates\Kernel\ReadinessValidation; use Drupal\package_manager\Exception\StageValidationException; use Drupal\package_manager\ValidationResult; use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase; -use Drupal\Tests\package_manager\Kernel\TestStage; /** * @covers \Drupal\automatic_updates\Validator\StagedDatabaseUpdateValidator @@ -36,7 +35,7 @@ class StagedDatabaseUpdateValidatorTest extends AutomaticUpdatesKernelTestBase { $this->disableValidators[] = 'package_manager.validator.lock_file'; parent::setUp(); - TestStage::$stagingRoot = $this->vfsRoot->url(); + static::$testStagingRoot = $this->vfsRoot->url(); /** @var \Drupal\Tests\automatic_updates\Kernel\TestCronUpdater $updater */ $updater = $this->container->get('automatic_updates.cron_updater'); diff --git a/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php b/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php index 1bddb5dcd01a4a3143078b7703d8457838603c51..1ea2231aa6500739436726e2a95d2912b62ffd87 100644 --- a/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php +++ b/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php @@ -5,7 +5,6 @@ namespace Drupal\Tests\automatic_updates\Kernel\ReadinessValidation; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Exception\StageValidationException; use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase; -use Drupal\Tests\package_manager\Kernel\TestStage; use org\bovigo\vfs\vfsStream; use Symfony\Component\Filesystem\Filesystem; @@ -52,12 +51,12 @@ class StagedProjectsValidatorTest extends AutomaticUpdatesKernelTestBase { // subdirectory using the stage ID after it is created below. $stage_vfs_dir = vfsStream::newDirectory('au_stage'); $this->vfsRoot->addChild($stage_vfs_dir); - TestStage::$stagingRoot = $stage_vfs_dir->url(); + static::$testStagingRoot = $stage_vfs_dir->url(); } else { // If we are testing non-existent staging directory we can use the path // directly. - TestStage::$stagingRoot = $stage_dir; + static::$testStagingRoot = $stage_dir; } $updater = $this->container->get('automatic_updates.updater');