Loading core/tests/Drupal/BuildTests/TestSiteApplication/InstallTest.php 0 → 100644 +50 −0 Original line number Diff line number Diff line <?php namespace Drupal\BuildTests\TestSiteApplication; use Drupal\BuildTests\Framework\BuildTestBase; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Process\PhpExecutableFinder; /** * @group Build * @group TestSiteApplication */ class InstallTest extends BuildTestBase { public function testInstall() { $this->copyCodebase(); $fs = new Filesystem(); $fs->chmod($this->getWorkspaceDirectory() . '/sites/default', 0700, 0000); // Composer tells you stuff in error output. $this->executeCommand('COMPOSER_DISCARD_CHANGES=true composer install --no-interaction'); $this->assertErrorOutputContains('Generating autoload files'); // We have to stand up the server first so we can know the port number to // pass along to the install command. $this->standUpServer(); $php_finder = new PhpExecutableFinder(); $install_command = [ $php_finder->find(), './core/scripts/test-site.php', 'install', '--base-url=http://localhost:' . $this->getPortNumber(), '--db-url=sqlite://localhost/foo.sqlite', '--install-profile=minimal', '--json', ]; $this->assertNotEmpty($output_json = $this->executeCommand(implode(' ', $install_command))->getOutput()); $this->assertCommandSuccessful(); $connection_details = json_decode($output_json, TRUE); foreach (['db_prefix', 'user_agent', 'site_path'] as $key) { $this->assertArrayHasKey($key, $connection_details); } // Visit paths with expectations. $this->visit(); $this->assertDrupalVisit(); } } core/tests/Drupal/TestSite/Commands/TestSiteInstallCommand.php +13 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Filesystem\Filesystem; /** * Command to create a test Drupal site. Loading Loading @@ -121,6 +122,18 @@ protected function execute(InputInterface $input, OutputInterface $output): int // Manage site fixture. $this->setup($input->getOption('install-profile'), $class_name, $input->getOption('langcode')); // Make sure there is an entry in sites.php for the new site. $fs = new Filesystem(); if (!$fs->exists($root . '/sites/sites.php')) { $fs->copy($root . '/sites/example.sites.php', $root . '/sites/sites.php'); } $parsed = parse_url($base_url); $port = $parsed['port'] ?? 80; $host = $parsed['host'] ?? 'localhost'; // Remove 'sites/' from the beginning of the path. $site_path = substr($this->siteDirectory, 6); $fs->appendToFile($root . '/sites/sites.php', "\$sites['$port.$host'] = '$site_path';"); $user_agent = drupal_generate_test_ua($this->databasePrefix); if ($input->getOption('json')) { $output->writeln(json_encode([ Loading Loading
core/tests/Drupal/BuildTests/TestSiteApplication/InstallTest.php 0 → 100644 +50 −0 Original line number Diff line number Diff line <?php namespace Drupal\BuildTests\TestSiteApplication; use Drupal\BuildTests\Framework\BuildTestBase; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Process\PhpExecutableFinder; /** * @group Build * @group TestSiteApplication */ class InstallTest extends BuildTestBase { public function testInstall() { $this->copyCodebase(); $fs = new Filesystem(); $fs->chmod($this->getWorkspaceDirectory() . '/sites/default', 0700, 0000); // Composer tells you stuff in error output. $this->executeCommand('COMPOSER_DISCARD_CHANGES=true composer install --no-interaction'); $this->assertErrorOutputContains('Generating autoload files'); // We have to stand up the server first so we can know the port number to // pass along to the install command. $this->standUpServer(); $php_finder = new PhpExecutableFinder(); $install_command = [ $php_finder->find(), './core/scripts/test-site.php', 'install', '--base-url=http://localhost:' . $this->getPortNumber(), '--db-url=sqlite://localhost/foo.sqlite', '--install-profile=minimal', '--json', ]; $this->assertNotEmpty($output_json = $this->executeCommand(implode(' ', $install_command))->getOutput()); $this->assertCommandSuccessful(); $connection_details = json_decode($output_json, TRUE); foreach (['db_prefix', 'user_agent', 'site_path'] as $key) { $this->assertArrayHasKey($key, $connection_details); } // Visit paths with expectations. $this->visit(); $this->assertDrupalVisit(); } }
core/tests/Drupal/TestSite/Commands/TestSiteInstallCommand.php +13 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Filesystem\Filesystem; /** * Command to create a test Drupal site. Loading Loading @@ -121,6 +122,18 @@ protected function execute(InputInterface $input, OutputInterface $output): int // Manage site fixture. $this->setup($input->getOption('install-profile'), $class_name, $input->getOption('langcode')); // Make sure there is an entry in sites.php for the new site. $fs = new Filesystem(); if (!$fs->exists($root . '/sites/sites.php')) { $fs->copy($root . '/sites/example.sites.php', $root . '/sites/sites.php'); } $parsed = parse_url($base_url); $port = $parsed['port'] ?? 80; $host = $parsed['host'] ?? 'localhost'; // Remove 'sites/' from the beginning of the path. $site_path = substr($this->siteDirectory, 6); $fs->appendToFile($root . '/sites/sites.php', "\$sites['$port.$host'] = '$site_path';"); $user_agent = drupal_generate_test_ua($this->databasePrefix); if ($input->getOption('json')) { $output->writeln(json_encode([ Loading