5 require_once(CONST_BasePath.'/lib/lib.php');
 
   6 require_once(CONST_BasePath.'/lib/DB.php');
 
   8 // subclassing so we can set the protected connection variable
 
   9 class NominatimSubClassedDB extends \Nominatim\DB
 
  11     public function setConnection($oConnection)
 
  13         $this->connection = $oConnection;
 
  17 // phpcs:ignore PSR1.Classes.ClassDeclaration.MultipleClasses
 
  18 class DBTest extends \PHPUnit\Framework\TestCase
 
  20     public function testReusingConnection()
 
  22         $oDB = new NominatimSubClassedDB('');
 
  23         $oDB->setConnection('anything');
 
  24         $this->assertTrue($oDB->connect());
 
  27     public function testDatabaseExists()
 
  29         $oDB = new \Nominatim\DB('');
 
  30         $this->assertFalse($oDB->databaseExists());
 
  33     public function testErrorHandling()
 
  35         $this->expectException(DatabaseError::class);
 
  36         $this->expectExceptionMessage('Failed to establish database connection');
 
  38         $oDB = new \Nominatim\DB('pgsql:dbname=abc');
 
  42     public function testErrorHandling2()
 
  44         $this->expectException(DatabaseError::class);
 
  45         $this->expectExceptionMessage('Database query failed');
 
  47         $oPDOStub = $this->getMockBuilder(PDO::class)
 
  48                          ->setMethods(array('query', 'quote'))
 
  51         $oPDOStub->method('query')
 
  52                  ->will($this->returnCallback(function ($sVal) {
 
  56         $oPDOStub->method('query')
 
  57                  ->will($this->returnCallback(function () {
 
  58                      throw new \PDOException('ERROR:  syntax error at or near "FROM"');
 
  61         $oDB = new NominatimSubClassedDB('');
 
  62         $oDB->setConnection($oPDOStub);
 
  63         $oDB->getOne('SELECT name FROM');
 
  66     public function testGetPostgresVersion()
 
  68         $oDBStub = $this->getMockBuilder(\Nominatim\DB::class)
 
  69                         ->disableOriginalConstructor()
 
  70                         ->setMethods(array('getOne'))
 
  73         $oDBStub->method('getOne')
 
  74                 ->willReturn('100006');
 
  76         $this->assertEquals(10, $oDBStub->getPostgresVersion());
 
  79     public function testGetPostgisVersion()
 
  81         $oDBStub = $this->getMockBuilder(\Nominatim\DB::class)
 
  82                         ->disableOriginalConstructor()
 
  83                         ->setMethods(array('getOne'))
 
  86         $oDBStub->method('getOne')
 
  87                 ->willReturn('2.4.4');
 
  89         $this->assertEquals(2.4, $oDBStub->getPostgisVersion());
 
  92     public function testParseDSN()
 
  96             \Nominatim\DB::parseDSN('')
 
 101              'hostspec' => 'machine1'
 
 103             \Nominatim\DB::parseDSN('pgsql:dbname=db1;host=machine1')
 
 108              'hostspec' => 'machine1',
 
 110              'username' => 'john',
 
 111              'password' => 'secret'
 
 113             \Nominatim\DB::parseDSN('pgsql:dbname=db1;host=machine1;port=1234;user=john;password=secret')