You are here

class GenerateThemeTest in Drupal 9

Tests the generate-theme commands.

@requires extension pdo_sqlite

@group Command

Hierarchy

Expanded class hierarchy of GenerateThemeTest

File

core/tests/Drupal/Tests/Core/Command/GenerateThemeTest.php, line 17

Namespace

Drupal\Tests\Core\Command
View source
class GenerateThemeTest extends QuickStartTestBase {

  /**
   * The PHP executable path.
   *
   * @var string
   */
  protected $php;

  /**
   * {@inheritdoc}
   */
  public function setUp() : void {
    parent::setUp();
    $php_executable_finder = new PhpExecutableFinder();
    $this->php = $php_executable_finder
      ->find();
    $this
      ->copyCodebase();
    $this
      ->executeCommand('COMPOSER_DISCARD_CHANGES=true composer install --no-dev --no-interaction');
    chdir($this
      ->getWorkingPath());
  }

  /**
   * Tests the generate-theme command.
   */
  public function test() {
    if (version_compare(\SQLite3::version()['versionString'], Tasks::SQLITE_MINIMUM_VERSION) < 0) {
      $this
        ->markTestSkipped();
    }
    $install_command = [
      $this->php,
      'core/scripts/drupal',
      'generate-theme',
      'test_custom_theme',
      '--name="Test custom starterkit theme"',
      '--description="Custom theme generated from a starterkit theme"',
    ];
    $process = new Process($install_command, NULL);
    $process
      ->setTimeout(60);
    $result = $process
      ->run();
    $this
      ->assertEquals('Theme generated successfully to themes/test_custom_theme', trim($process
      ->getOutput()));
    $this
      ->assertSame(0, $result);
    $theme_path_relative = 'themes/test_custom_theme';
    $theme_path_absolute = $this
      ->getWorkspaceDirectory() . "/{$theme_path_relative}";
    $this
      ->assertFileExists($theme_path_absolute . '/test_custom_theme.info.yml');

    // Ensure that the generated theme can be installed.
    $this
      ->installQuickStart('minimal');
    $this
      ->formLogin($this->adminUsername, $this->adminPassword);
    $this
      ->visit('/admin/appearance');
    $this
      ->getMink()
      ->assertSession()
      ->pageTextContains('Test custom starterkit');
    $this
      ->getMink()
      ->assertSession()
      ->pageTextContains('Custom theme generated from a starterkit theme');
    $this
      ->getMink()
      ->getSession()
      ->getPage()
      ->clickLink('Install "Test custom starterkit theme" theme');
    $this
      ->getMink()
      ->assertSession()
      ->pageTextContains('The "Test custom starterkit theme" theme has been installed.');
    $this
      ->assertFileExists($theme_path_absolute . '/test_custom_theme.theme');
    unlink($theme_path_absolute . '/test_custom_theme.theme');
    $process = new Process($install_command, NULL);
    $process
      ->setTimeout(60);
    $result = $process
      ->run();
    $this
      ->assertStringContainsString('Theme could not be generated because the destination directory', $process
      ->getErrorOutput());
    $this
      ->assertStringContainsString($theme_path_relative, $process
      ->getErrorOutput());
    $this
      ->assertSame(1, $result);
    $this
      ->assertFileDoesNotExist($theme_path_absolute . '/test_custom_theme.theme');
  }

}

Members

Namesort descending Modifiers Type Description 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::$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::checkPortIsAvailable protected function Checks whether a port is available.
BuildTestBase::copyCodebase public function Copy the current working codebase into a workspace.
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::getDrupalRoot protected 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::getWorkspaceDirectory public function Full path to the workspace where this test can build.
BuildTestBase::initMink protected function Set up the Mink session manager.
BuildTestBase::instantiateServer protected function Do the work of making a server process.
BuildTestBase::setUpBeforeClass public static function
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::tearDown protected function
BuildTestBase::visit public function Visit a URI on the HTTP server.
ExternalCommandRequirementsTrait::$existingCommands private static property A list of existing external commands we've already discovered.
ExternalCommandRequirementsTrait::checkClassCommandRequirements private static function Checks whether required external commands are available per test class.
ExternalCommandRequirementsTrait::checkExternalCommandRequirements private static function Checks missing external command requirements.
ExternalCommandRequirementsTrait::checkMethodCommandRequirements private static function Checks whether required external commands are available per method.
ExternalCommandRequirementsTrait::externalCommandIsAvailable private static function Determine if an external command is available. 3
GenerateThemeTest::$php protected property The PHP executable path.
GenerateThemeTest::setUp public function Overrides BuildTestBase::setUp
GenerateThemeTest::test public function Tests the generate-theme command.
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
QuickStartTestBase::$adminPassword protected property Password of the admin account generated during install.
QuickStartTestBase::$adminUsername protected property User name of the admin account generated during install.
QuickStartTestBase::formLogin public function Helper that uses Drupal's user/login form to log in.
QuickStartTestBase::installQuickStart public function Install a Drupal site using the quick start feature.