Issue #3222577 by alexpott, podarok, daffie: ServiceNotFoundException You have requested a non-existent service "language_negotiator" - hook_modules_installed()

merge-requests/984/head
Lee Rowlands 2021-07-28 16:53:57 +10:00
parent d2462e3d01
commit fd58fbe7ee
No known key found for this signature in database
GPG Key ID: 2B829A3DF9204DC4
4 changed files with 69 additions and 3 deletions

View File

@ -515,6 +515,7 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
}
$this->container->get('stream_wrapper_manager')->unregister();
$this->booted = FALSE;
$this->configStorage = NULL;
$this->container = NULL;
$this->moduleList = NULL;
$this->moduleData = [];

View File

@ -292,7 +292,11 @@ trait FunctionalTestSetupTrait {
*/
protected function doInstall() {
require_once DRUPAL_ROOT . '/core/includes/install.core.inc';
install_drupal($this->classLoader, $this->installParameters());
$parameters = $this->installParameters();
// Simulate a real install which does not start with the any connections set
// in \Drupal\Core\Database\Database::$connections.
Database::removeConnection('default');
install_drupal($this->classLoader, $parameters);
}
/**

View File

@ -0,0 +1,61 @@
<?php
namespace Drupal\FunctionalTests\Installer;
use Drupal\Core\Serialization\Yaml;
use Drupal\Tests\BrowserTestBase;
/**
* Tests drupal_flush_all_caches() during an install.
*
* @group Installer
*/
class DrupalFlushAllCachesInInstallerTest extends BrowserTestBase {
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected $profile = 'cache_flush_test';
/**
* {@inheritdoc}
*/
protected function prepareEnvironment() {
parent::prepareEnvironment();
$info = [
'type' => 'profile',
'core_version_requirement' => '*',
'name' => 'Cache flush test',
'install' => ['language'],
];
// File API functions are not available yet.
$path = $this->siteDirectory . '/profiles/cache_flush_test';
mkdir($path, 0777, TRUE);
file_put_contents("$path/cache_flush_test.info.yml", Yaml::encode($info));
$php_code = <<<EOF
<?php
function cache_flush_test_install() {
// Note it is bad practice to call this method during hook_install() as it
// results in an additional expensive container rebuild.
drupal_flush_all_caches();
// Ensure services are available after calling drupal_flush_all_caches().
\Drupal::state()->set('cache_flush_test', \Drupal::hasService('language_negotiator'));
}
EOF;
file_put_contents("$path/cache_flush_test.install", $php_code);
}
/**
* Confirms that the installation succeeded.
*/
public function testInstalled() {
$this->assertTrue(\Drupal::state()->get('cache_flush_test'));
}
}

View File

@ -92,9 +92,9 @@ class InstallerTranslationTest extends InstallerTestBase {
$this->rebuildContainer();
/** @var \Drupal\user\Entity\User $account */
$account = User::load(0);
$this->assertEquals('en', $account->language()->getId(), 'Anonymous user is English.');
$this->assertEquals('de', $account->language()->getId(), 'Anonymous user is German.');
$account = User::load(1);
$this->assertEquals('en', $account->language()->getId(), 'Administrator user is English.');
$this->assertEquals('de', $account->language()->getId(), 'Administrator user is German.');
$account = $this->drupalCreateUser();
$this->assertEquals('de', $account->language()->getId(), 'New user is German.');