From 5f901886979c8a3d4591abb39459cc8a36d5542f Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Wed, 14 May 2025 08:29:12 +0100 Subject: [PATCH] Issue #3366862 by mondrake, daffie: Refactor InstallerNonDefaultDatabaseDriverTest to avoid asserting content of settings.php (cherry picked from commit c8a7a5894c9b7d4a2cd3928481c5fdb027d21c22) --- .../InstallerNonDefaultDatabaseDriverTest.php | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/core/tests/Drupal/FunctionalTests/Installer/InstallerNonDefaultDatabaseDriverTest.php b/core/tests/Drupal/FunctionalTests/Installer/InstallerNonDefaultDatabaseDriverTest.php index 3bd0fe48af73..d33d7c4942ab 100644 --- a/core/tests/Drupal/FunctionalTests/Installer/InstallerNonDefaultDatabaseDriverTest.php +++ b/core/tests/Drupal/FunctionalTests/Installer/InstallerNonDefaultDatabaseDriverTest.php @@ -63,25 +63,20 @@ public function testInstalled(): void { // Assert that in the settings.php the database connection array has the // correct values set. - $contents = file_get_contents($this->container->getParameter('app.root') . '/' . $this->siteDirectory . '/settings.php'); - $this->assertStringContainsString("'namespace' => 'Drupal\\\\driver_test\\\\Driver\\\\Database\\\\{$this->testDriverName}',", $contents); - $this->assertStringContainsString("'driver' => '{$this->testDriverName}',", $contents); - $this->assertStringContainsString("'autoload' => 'core/modules/system/tests/modules/driver_test/src/Driver/Database/{$this->testDriverName}/',", $contents); - - $dependencies = "'dependencies' => " . PHP_EOL . - " array (" . PHP_EOL . - " 'mysql' => " . PHP_EOL . - " array (" . PHP_EOL . - " 'namespace' => 'Drupal\\\\mysql'," . PHP_EOL . - " 'autoload' => 'core/modules/mysql/src/'," . PHP_EOL . - " )," . PHP_EOL . - " 'pgsql' => " . PHP_EOL . - " array (" . PHP_EOL . - " 'namespace' => 'Drupal\\\\pgsql'," . PHP_EOL . - " 'autoload' => 'core/modules/pgsql/src/'," . PHP_EOL . - " )," . PHP_EOL . - " )," . PHP_EOL; - $this->assertStringContainsString($dependencies, $contents); + $installedDatabaseSettings = $this->getInstalledDatabaseSettings(); + $this->assertSame("Drupal\\driver_test\\Driver\\Database\\{$this->testDriverName}", $installedDatabaseSettings['default']['default']['namespace']); + $this->assertSame($this->testDriverName, $installedDatabaseSettings['default']['default']['driver']); + $this->assertSame("core/modules/system/tests/modules/driver_test/src/Driver/Database/{$this->testDriverName}/", $installedDatabaseSettings['default']['default']['autoload']); + $this->assertEquals([ + 'mysql' => [ + 'namespace' => 'Drupal\\mysql', + 'autoload' => 'core/modules/mysql/src/', + ], + 'pgsql' => [ + 'namespace' => 'Drupal\\pgsql', + 'autoload' => 'core/modules/pgsql/src/', + ], + ], $installedDatabaseSettings['default']['default']['dependencies']); // Assert that the module "driver_test" and its dependencies have been // installed. @@ -99,4 +94,22 @@ public function testInstalled(): void { $this->assertSession()->elementTextContains('xpath', '//tr[@data-drupal-selector="edit-pgsql"]', "The following reason prevents PostgreSQL from being uninstalled: Required by: driver_test"); } + /** + * Returns the databases setup from the SUT's settings.php. + * + * @return array<string,mixed> + * The value of the $databases variable. + */ + protected function getInstalledDatabaseSettings(): array { + // The $app_root and $site_path variables are required by the settings.php + // file to be parsed correctly. The $databases variable is set in the + // included file, we need to inform PHPStan about that since PHPStan itself + // is unable to determine it. + $app_root = $this->container->getParameter('app.root'); + $site_path = $this->siteDirectory; + include $app_root . '/' . $site_path . '/settings.php'; + assert(isset($databases)); + return $databases; + } + } -- GitLab