diff --git a/tests/src/Functional/FileSystemOperationsTest.php b/tests/src/Functional/FileSystemOperationsTest.php deleted file mode 100644 index 4e812a080b423fe3f2c8e8b9c5381dada270467c..0000000000000000000000000000000000000000 --- a/tests/src/Functional/FileSystemOperationsTest.php +++ /dev/null @@ -1,148 +0,0 @@ -<?php - -namespace Drupal\Tests\automatic_updates\Functional; - -use Drupal\automatic_updates\Updater; -use Drupal\Core\Site\Settings; -use Drupal\package_manager\PathLocator; - -/** - * Tests handling of files and directories during an update. - * - * @group automatic_updates - */ -class FileSystemOperationsTest extends AutomaticUpdatesFunctionalTestBase { - - /** - * {@inheritdoc} - */ - protected static $modules = ['automatic_updates_test']; - - /** - * {@inheritdoc} - */ - protected $defaultTheme = 'stark'; - - /** - * The updater service under test. - * - * @var \Drupal\Tests\automatic_updates\Functional\TestUpdater - */ - private $updater; - - /** - * The full path of the staging directory. - * - * @var string - */ - protected $stageDir; - - /** - * {@inheritdoc} - */ - protected function setUp(): void { - parent::setUp(); - - // Create a mocked path locator that uses the fake site fixture as its - // active directory, and has a staging area within the site directory for - // this test. - $drupal_root = $this->getDrupalRoot(); - /** @var \Drupal\package_manager\PathLocator|\Prophecy\Prophecy\ObjectProphecy $locator */ - $locator = $this->prophesize(PathLocator::class); - $locator->getActiveDirectory()->willReturn(__DIR__ . '/../../fixtures/fake-site'); - $this->stageDir = implode(DIRECTORY_SEPARATOR, [ - $drupal_root, - $this->siteDirectory, - 'stage', - ]); - $locator->getProjectRoot()->willReturn($drupal_root); - $locator->getWebRoot()->willReturn(''); - - $this->updater = new TestUpdater( - $locator->reveal(), - $this->container->get('package_manager.beginner'), - $this->container->get('package_manager.stager'), - $this->container->get('package_manager.committer'), - $this->container->get('file_system'), - $this->container->get('event_dispatcher'), - $this->container->get('tempstore.shared') - ); - $this->updater::$stagingRoot = $this->stageDir; - - // Use the public and private files directories in the fake site fixture. - $settings = Settings::getAll(); - $settings['file_public_path'] = 'files/public'; - $settings['file_private_path'] = 'files/private'; - new Settings($settings); - - // Updater::begin() will trigger update validators, such as - // \Drupal\automatic_updates\Validator\UpdateVersionValidator, that need to - // fetch release metadata. We need to ensure that those HTTP request(s) - // succeed, so set them up to point to our fake release metadata. - $this->setReleaseMetadata(__DIR__ . '/../../fixtures/release-history/drupal.9.8.1-security.xml'); - $this->setCoreVersion('9.8.0'); - - $this->drupalLogin($this->rootUser); - $this->checkForUpdates(); - $this->drupalLogout(); - } - - /** - * Tests that certain files and directories are not staged. - * - * @covers \Drupal\automatic_updates\Updater::getExclusions - */ - public function testExclusions(): void { - $stage_id = $this->updater->begin(['drupal' => '9.8.1']); - $this->assertFileDoesNotExist("$this->stageDir/$stage_id/sites/default/settings.php"); - $this->assertFileDoesNotExist("$this->stageDir/$stage_id/sites/default/settings.local.php"); - $this->assertFileDoesNotExist("$this->stageDir/$stage_id/sites/default/services.yml"); - // A file in sites/default, that isn't one of the site-specific settings - // files, should be staged. - $this->assertFileExists("$this->stageDir/$stage_id/sites/default/staged.txt"); - $this->assertDirectoryDoesNotExist("$this->stageDir/$stage_id/sites/simpletest"); - $this->assertDirectoryDoesNotExist("$this->stageDir/$stage_id/files/public"); - $this->assertDirectoryDoesNotExist("$this->stageDir/$stage_id/files/private"); - // A file that's in the general files directory, but not in the public or - // private directories, should be staged. - $this->assertFileExists("$this->stageDir/$stage_id/files/staged.txt"); - } - - /** - * Tests that the staging directory is properly cleaned up. - * - * @covers \Drupal\automatic_updates\Cleaner - */ - public function testClean(): void { - $stage_id = $this->updater->begin(['drupal' => '9.8.1']); - // Make the staged site directory read-only, so we can test that it will be - // made writable on clean-up. - $this->assertTrue(chmod("$this->stageDir/$stage_id/sites/default", 0400)); - $this->assertIsNotWritable("$this->stageDir/$stage_id/sites/default/staged.txt"); - // If the site directory is not writable, this will throw an exception. - $this->updater->destroy(); - $this->assertDirectoryDoesNotExist($this->stageDir); - } - -} - -/** - * A test-only version of the updater. - */ -class TestUpdater extends Updater { - - /** - * The directory where staging areas will be created. - * - * @var string - */ - public static $stagingRoot; - - /** - * {@inheritdoc} - */ - protected static function getStagingRoot(): string { - return static::$stagingRoot ?: parent::getStagingRoot(); - } - -}