3 namespace Drupal\Tests\Core\Database;
5 use Drupal\Core\Database\Database;
6 use Drupal\Tests\UnitTestCase;
9 * @coversDefaultClass \Drupal\Core\Database\Database
13 class UrlConversionTest extends UnitTestCase {
16 * @covers ::convertDbUrlToConnectionInfo
18 * @dataProvider providerConvertDbUrlToConnectionInfo
20 public function testDbUrltoConnectionConversion($root, $url, $database_array) {
21 $result = Database::convertDbUrlToConnectionInfo($url, $root);
22 $this->assertEquals($database_array, $result);
26 * Dataprovider for testDbUrltoConnectionConversion().
29 * Array of arrays with the following elements:
30 * - root: The baseroot string, only used with sqlite drivers.
31 * - url: The full URL string to be tested.
32 * - database_array: An array containing the expected results.
34 public function providerConvertDbUrlToConnectionInfo() {
35 // Some valid datasets.
37 $url1 = 'mysql://test_user:test_pass@test_host:3306/test_database';
40 'username' => 'test_user',
41 'password' => 'test_pass',
42 'host' => 'test_host',
43 'database' => 'test_database',
46 $root2 = '/var/www/d8';
47 $url2 = 'sqlite://test_user:test_pass@test_host:3306/test_database';
50 'username' => 'test_user',
51 'password' => 'test_pass',
52 'host' => 'test_host',
53 'database' => $root2 . '/test_database',
57 [$root1, $url1, $database_array1],
58 [$root2, $url2, $database_array2],
63 * Test ::convertDbUrlToConnectionInfo() exception for invalid arguments.
65 * @dataProvider providerInvalidArgumentsUrlConversion
67 public function testGetInvalidArgumentExceptionInUrlConversion($url, $root) {
68 $this->setExpectedException(\InvalidArgumentException::class);
69 Database::convertDbUrlToConnectionInfo($url, $root);
73 * Dataprovider for testGetInvalidArgumentExceptionInUrlConversion().
76 * Array of arrays with the following elements:
77 * - An invalid Url string.
78 * - Drupal root string.
80 public function providerInvalidArgumentsUrlConversion() {
86 ['foo://bar:port', 'baz'],
87 ['foo/bar/baz', 'bar2'],
88 ['foo://bar:baz@test1', 'test2'],
93 * @covers ::convertDbUrlToConnectionInfo
95 * @dataProvider providerGetConnectionInfoAsUrl
97 public function testGetConnectionInfoAsUrl(array $info, $expected_url) {
99 Database::addConnectionInfo('default', 'default', $info);
100 $url = Database::getConnectionInfoAsUrl();
102 // Remove the connection to not pollute subsequent datasets being tested.
103 Database::removeConnection('default');
105 $this->assertEquals($expected_url, $url);
109 * Dataprovider for testGetConnectionInfoAsUrl().
112 * Array of arrays with the following elements:
113 * - An array mocking the database connection info. Possible keys are
114 * database, username, password, prefix, host, port, namespace and driver.
115 * - The expected URL after conversion.
117 public function providerGetConnectionInfoAsUrl() {
119 'database' => 'test_database',
120 'username' => 'test_user',
121 'password' => 'test_pass',
123 'host' => 'test_host',
125 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
128 $expected_url1 = 'mysql://test_user:test_pass@test_host:3306/test_database';
131 'database' => 'test_database',
132 'username' => 'test_user',
133 'password' => 'test_pass',
135 'host' => 'test_host',
139 $expected_url2 = 'mysql://test_user:test_pass@test_host:3306/test_database#pre';
142 'database' => 'test_database',
143 'driver' => 'sqlite',
145 $expected_url3 = 'sqlite://localhost/test_database';
148 [$info1, $expected_url1],
149 [$info2, $expected_url2],
150 [$info3, $expected_url3],