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