DrupalInstalledTest.php

Namespace

Drupal\Tests\Composer\Plugin\Scaffold\Functional

File

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

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\Composer\Plugin\Scaffold\Functional;

use Drupal\BuildTests\Framework\BuildTestBase;
use Drupal\Tests\Composer\Plugin\ExecTrait;
use Drupal\Tests\Composer\Plugin\Scaffold\Fixtures;
use PHPUnit\Framework\Attributes\Group;

/**
 * Tests DrupalInstalled.php hash changes when scaffolding is run.
 */
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'));
  }

}

Classes

Title Deprecated Summary
DrupalInstalledTest Tests DrupalInstalled.php hash changes when scaffolding is run.

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