QuickStartTestBase.php in Automatic Updates 8
File
tests/src/Build/QuickStart/QuickStartTestBase.php
View source
<?php
namespace Drupal\Tests\automatic_updates\Build\QuickStart;
use Drupal\BuildTests\Framework\BuildTestBase;
use Drupal\Component\FileSystem\FileSystem as DrupalFilesystem;
use Drupal\Core\Archiver\Zip;
use GuzzleHttp\Client;
use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Process\PhpExecutableFinder;
abstract class QuickStartTestBase extends BuildTestBase {
protected $adminUsername;
protected $adminPassword;
public function installQuickStart($profile, $working_dir = NULL) {
$finder = new PhpExecutableFinder();
$process = $this
->executeCommand($finder
->find() . ' ./core/scripts/drupal install ' . $profile, $working_dir);
$this
->assertCommandSuccessful();
$this
->assertCommandOutputContains('Username:');
preg_match('/Username: (.+)\\vPassword: (.+)/', $process
->getOutput(), $matches);
$this
->assertNotEmpty($this->adminUsername = $matches[1]);
$this
->assertNotEmpty($this->adminPassword = $matches[2]);
}
protected function installCore($starting_version) {
$drupal_tarball = "drupal-{$starting_version}.zip";
$destination = DrupalFileSystem::getOsTemporaryDirectory() . DIRECTORY_SEPARATOR . 'drupal-' . random_int(10000, 99999) . microtime(TRUE);
$fs = new SymfonyFilesystem();
$fs
->mkdir($destination);
$http_client = new Client();
$http_client
->get("https://ftp.drupal.org/files/projects/{$drupal_tarball}", [
'sink' => $destination . DIRECTORY_SEPARATOR . $drupal_tarball,
]);
$zip = new Zip($destination . DIRECTORY_SEPARATOR . $drupal_tarball);
$zip
->extract($destination);
$finder = new Finder();
$finder
->files()
->ignoreUnreadableDirs()
->ignoreDotFiles(FALSE)
->in("{$destination}/drupal-{$starting_version}");
$options = [
'override' => TRUE,
'delete' => FALSE,
];
$fs
->mirror("{$destination}/drupal-{$starting_version}", $this
->getWorkingPath(), $finder
->getIterator(), $options);
$fs
->remove("{$destination}/drupal-{$starting_version}");
$finder = new Finder();
$finder
->files()
->ignoreUnreadableDirs()
->in($this
->getDrupalRoot())
->path('automatic_updates');
$this
->copyCodebase($finder
->getIterator());
$fs
->chmod($this
->getWorkspaceDirectory() . '/sites/default', 0700);
$this
->installQuickStart('minimal');
$settings_php = $this
->getWorkspaceDirectory() . '/sites/default/settings.php';
$fs
->chmod($this
->getWorkspaceDirectory() . '/sites/default', 0755);
$fs
->chmod($settings_php, 0640);
$fs
->appendToFile($settings_php, '$settings[\'extension_discovery_scan_tests\'] = TRUE;' . PHP_EOL);
$this
->formLogin($this->adminUsername, $this->adminPassword);
$this
->moduleInstall('update');
$this
->moduleInstall('automatic_updates');
$this
->moduleInstall('test_automatic_updates');
$finder = new Finder();
$finder
->files()
->in($this
->getWorkspaceDirectory())
->path('core/lib/Drupal.php');
$finder
->contains("/const VERSION = '{$starting_version}'/");
$this
->assertTrue($finder
->hasResults(), "Expected version {$starting_version} does not exist in {$this->getWorkspaceDirectory()}/core/lib/Drupal.php");
$this
->visit();
$this
->assertDrupalVisit();
}
public function formLogin($username, $password, $working_dir = NULL) {
$mink = $this
->visit('/user/login', $working_dir);
$this
->assertEquals(200, $mink
->getSession()
->getStatusCode());
$assert = $mink
->assertSession();
$assert
->fieldExists('edit-name')
->setValue($username);
$assert
->fieldExists('edit-pass')
->setValue($password);
$mink
->getSession()
->getPage()
->findButton('Log in')
->submit();
}
}