1# -*- coding: utf-8 -*- 2 3""" 4*************************************************************************** 5 connector_test.py 6 --------------------- 7 Date : May 2017 8 Copyright : (C) 2017, Sandro Santilli 9 Email : strk at kbt dot io 10*************************************************************************** 11* * 12* This program is free software; you can redistribute it and/or modify * 13* it under the terms of the GNU General Public License as published by * 14* the Free Software Foundation; either version 2 of the License, or * 15* (at your option) any later version. * 16* * 17*************************************************************************** 18""" 19 20__author__ = 'Sandro Santilli' 21__date__ = 'May 2017' 22__copyright__ = '(C) 2017, Sandro Santilli' 23 24import os 25import qgis 26from qgis.testing import start_app, unittest 27from qgis.core import QgsDataSourceUri 28from qgis.utils import iface 29from qgis.PyQt.QtCore import QObject 30 31start_app() 32 33from db_manager.db_plugins.postgis.connector import PostGisDBConnector 34 35 36class TestDBManagerPostgisConnector(unittest.TestCase): 37 38 # def setUpClass(): 39 40 def _getUser(self, connector): 41 r = connector._execute(None, "SELECT USER") 42 val = connector._fetchone(r)[0] 43 connector._close_cursor(r) 44 return val 45 46 def _getDatabase(self, connector): 47 r = connector._execute(None, "SELECT current_database()") 48 val = connector._fetchone(r)[0] 49 connector._close_cursor(r) 50 return val 51 52 # See https://github.com/qgis/QGIS/issues/24525 53 # and https://github.com/qgis/QGIS/issues/19005 54 def test_dbnameLessURI(self): 55 obj = QObject() # needs to be kept alive 56 obj.connectionName = lambda: 'fake' 57 obj.providerName = lambda: 'postgres' 58 59 c = PostGisDBConnector(QgsDataSourceUri(), obj) 60 self.assertIsInstance(c, PostGisDBConnector) 61 uri = c.uri() 62 63 # No username was passed, so we expect it to be taken 64 # from PGUSER or USER environment variables 65 expected_user = os.environ.get('PGUSER') or os.environ.get('USER') 66 actual_user = self._getUser(c) 67 self.assertEqual(actual_user, expected_user) 68 69 # No database was passed, so we expect it to be taken 70 # from PGDATABASE or expected user 71 expected_db = os.environ.get('PGDATABASE') or expected_user 72 actual_db = self._getDatabase(c) 73 self.assertEqual(actual_db, expected_db) 74 75 # TODO: add service-only test (requires a ~/.pg_service.conf file) 76 77 78if __name__ == '__main__': 79 unittest.main() 80