class DrupalInstalledTest

Tests DrupalInstalled.php hash changes when scaffolding is run.

Attributes

#[Group('Scaffold')] #[Group('#slow')]

Hierarchy

Expanded class hierarchy of DrupalInstalledTest

File

core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/DrupalInstalledTest.php, line 15

Namespace

Drupal\Tests\Composer\Plugin\Scaffold\Functional
View source
class DrupalInstalledTest extends BuildTestBase {
  use ExecTrait;
  
  /**
   * Directory to perform the tests in.
   *
   * @var string
   */
  protected $fixturesDir;
  
  /**
   * The Fixtures object.
   *
   * @var \Drupal\Tests\Composer\Plugin\Scaffold\Fixtures
   */
  protected $fixtures;
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->fixtures = new Fixtures();
    $this->fixtures
      ->createIsolatedComposerCacheDir();
    $this->fixturesDir = $this->fixtures
      ->tmpDir($this->name());
    $replacements = [
      'SYMLINK' => 'false',
      'PROJECT_ROOT' => $this->fixtures
        ->projectRoot(),
    ];
    $this->fixtures
      ->cloneFixtureProjects($this->fixturesDir, $replacements);
  }
  
  /**
   * {@inheritdoc}
   */
  protected function tearDown() : void {
    // Remove any temporary directories et. al. that were created.
    $this->fixtures
      ->tearDown();
    parent::tearDown();
  }
  
  /**
   * Tests DrupalInstalled.php hash changes when scaffolding is run.
   */
  public function testDrupalInstalledHash() : void {
    $topLevelProjectDir = 'drupal-installed-fixture';
    $sut = $this->fixturesDir . '/' . $topLevelProjectDir;
    $this->mustExec("composer install --no-ansi", $sut);
    $original_version_hash = sha1_file($sut . '/vendor/drupal/DrupalInstalled.php');
    // Require two fixtures and ensure that the DrupalInstalled.php file is
    // updated.
    $this->mustExec("composer require --no-ansi --no-interaction fixtures/empty-file:dev-main fixtures/scaffold-override-fixture:dev-main", $sut);
    $two_fixtures_hash = sha1_file($sut . '/vendor/drupal/DrupalInstalled.php');
    $this->assertNotEquals($original_version_hash, $two_fixtures_hash);
    // Remove one fixture and ensure the hash is not equal to the original or
    // the hash with two fixtures.
    $this->mustExec("composer remove --no-ansi --no-interaction fixtures/empty-file", $sut);
    $one_fixture_hash = sha1_file($sut . '/vendor/drupal/DrupalInstalled.php');
    $this->assertNotEquals($original_version_hash, $one_fixture_hash);
    $this->assertNotEquals($two_fixtures_hash, $one_fixture_hash);
    // Add the fixture back and ensure the hash is changed and equal to the
    // previous hash for two fixtures.
    $this->mustExec("composer require --no-ansi --no-interaction fixtures/empty-file:dev-main", $sut);
    $this->assertEquals($two_fixtures_hash, sha1_file($sut . '/vendor/drupal/DrupalInstalled.php'));
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
BuildTestBase::$commandProcess private property The most recent command process.
BuildTestBase::$destroyBuild protected property Default to destroying build artifacts after a test finishes.
BuildTestBase::$hostName private static property Our native host name, used by PHP when it starts up the server.
BuildTestBase::$hostPort private property Port that will be tested.
BuildTestBase::$mink private property The Mink session manager.
BuildTestBase::$phpFinder private property The PHP executable finder.
BuildTestBase::$portLocks private property A list of ports used by the test.
BuildTestBase::$serverDocroot private property The docroot for the server process.
BuildTestBase::$serverProcess private property The process that's running the HTTP server.
BuildTestBase::$workspaceDir private property The working directory where this test will manipulate files.
BuildTestBase::assertCommandExitCode public function Asserts that the last command returned the specified exit code.
BuildTestBase::assertCommandOutputContains public function Assert that text is present in the output of the most recent command.
BuildTestBase::assertCommandSuccessful public function Asserts that the last command ran without error.
BuildTestBase::assertDrupalVisit public function Helper function to assert that the last visit was a Drupal site.
BuildTestBase::assertErrorOutputContains public function Assert that text is present in the error output of the most recent command.
BuildTestBase::assertErrorOutputNotContains public function Assert text is not present in the error output of the most recent command.
BuildTestBase::checkPortIsAvailable protected function Checks whether a port is available.
BuildTestBase::copyCodebase public function Copy the current working codebase into a workspace. 1
BuildTestBase::executeCommand public function Run a command.
BuildTestBase::findAvailablePort protected function Discover an available port number.
BuildTestBase::getCodebaseFinder public function Get a default Finder object for a Drupal codebase.
BuildTestBase::getComposerRoot public function Gets the path to the Composer root directory.
BuildTestBase::getDrupalRoot public function Get the root path of this Drupal codebase.
BuildTestBase::getDrupalRootStatic public static function Get the root path of this Drupal codebase.
BuildTestBase::getMink public function Get the Mink instance.
BuildTestBase::getPortNumber protected function Get the port number for requests.
BuildTestBase::getWorkingPath protected function Get the working directory within the workspace, creating if necessary.
BuildTestBase::getWorkingPathDrupalRoot public function Gets the working path for Drupal core.
BuildTestBase::getWorkspaceDirectory public function Full path to the workspace where this test can build.
BuildTestBase::getWorkspaceDrupalRoot public function Gets the path to Drupal root in the workspace directory.
BuildTestBase::initMink protected function Set up the Mink session manager.
BuildTestBase::instantiateServer protected function Do the work of making a server process. 1
BuildTestBase::standUpServer protected function Makes a local test server using PHP's internal HTTP server.
BuildTestBase::stopServer protected function Stop the HTTP server, zero out all necessary variables.
BuildTestBase::visit public function Visit a URI on the HTTP server. 1
DrupalInstalledTest::$fixtures protected property The Fixtures object.
DrupalInstalledTest::$fixturesDir protected property Directory to perform the tests in.
DrupalInstalledTest::setUp protected function Overrides BuildTestBase::setUp
DrupalInstalledTest::tearDown protected function Overrides BuildTestBase::tearDown
DrupalInstalledTest::testDrupalInstalledHash public function Tests DrupalInstalled.php hash changes when scaffolding is run.
ExecTrait::mustExec protected function Runs an arbitrary command.
RequiresComposerTrait::requiresComposer public static function #[BeforeClass]

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.