/tests/src/python/test_qgsdatabaseschemamodel.py

https://github.com/ricardogsilva/Quantum-GIS · Python · 211 lines · 174 code · 23 blank · 14 comment · 12 complexity · da94294fcc22a730cb7902a21108c5b1 MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. """QGIS Unit tests for QgsDatabaseSchemaModel
  3. .. note:: This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. """
  8. __author__ = 'Nyall Dawson'
  9. __date__ = '07/03/2020'
  10. __copyright__ = 'Copyright 2020, The QGIS Project'
  11. # This will get replaced with a git SHA1 when you do a git archive
  12. __revision__ = '$Format:%H$'
  13. import os
  14. from qgis.core import (
  15. QgsDatabaseSchemaModel,
  16. QgsProviderRegistry,
  17. )
  18. from qgis.PyQt.QtCore import (
  19. QCoreApplication,
  20. QModelIndex,
  21. Qt
  22. )
  23. from qgis.testing import unittest, start_app
  24. class TestPyQgsDatabaseSchemaModel(unittest.TestCase):
  25. # Provider test cases must define the string URI for the test
  26. uri = ''
  27. # Provider test cases must define the provider name (e.g. "postgres" or "ogr")
  28. providerKey = 'postgres'
  29. @classmethod
  30. def setUpClass(cls):
  31. """Run before all tests"""
  32. QCoreApplication.setOrganizationName("QGIS_Test")
  33. QCoreApplication.setOrganizationDomain(cls.__name__)
  34. QCoreApplication.setApplicationName(cls.__name__)
  35. start_app()
  36. cls.postgres_conn = "service='qgis_test'"
  37. if 'QGIS_PGTEST_DB' in os.environ:
  38. cls.postgres_conn = os.environ['QGIS_PGTEST_DB']
  39. cls.uri = cls.postgres_conn + ' sslmode=disable'
  40. def testModel(self):
  41. conn = QgsProviderRegistry.instance().providerMetadata('postgres').createConnection(self.uri, {})
  42. self.assertTrue(conn)
  43. model = QgsDatabaseSchemaModel(conn)
  44. self.assertGreaterEqual(model.rowCount(), 3)
  45. old_count = model.rowCount()
  46. self.assertEqual(model.columnCount(), 1)
  47. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  48. self.assertIn('public', schemas)
  49. self.assertIn('CamelCaseSchema', schemas)
  50. self.assertIn('qgis_test', schemas)
  51. self.assertEqual(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), Qt.ToolTipRole), 'qgis_test')
  52. self.assertIsNone(model.data(model.index(model.rowCount(), 0, QModelIndex()), Qt.DisplayRole))
  53. model.refresh()
  54. self.assertEqual(model.rowCount(), old_count)
  55. conn.createSchema('myNewSchema')
  56. self.assertEqual(model.rowCount(), old_count)
  57. model.refresh()
  58. self.assertEqual(model.rowCount(), old_count + 1)
  59. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  60. self.assertIn('public', schemas)
  61. self.assertIn('CamelCaseSchema', schemas)
  62. self.assertIn('qgis_test', schemas)
  63. self.assertIn('myNewSchema', schemas)
  64. conn.createSchema('myNewSchema2')
  65. conn.createSchema('myNewSchema3')
  66. model.refresh()
  67. self.assertEqual(model.rowCount(), old_count + 3)
  68. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  69. self.assertIn('public', schemas)
  70. self.assertIn('CamelCaseSchema', schemas)
  71. self.assertIn('qgis_test', schemas)
  72. self.assertIn('myNewSchema', schemas)
  73. self.assertIn('myNewSchema2', schemas)
  74. self.assertIn('myNewSchema3', schemas)
  75. conn.createSchema('myNewSchema4')
  76. conn.dropSchema('myNewSchema2')
  77. conn.dropSchema('myNewSchema')
  78. model.refresh()
  79. self.assertEqual(model.rowCount(), old_count + 2)
  80. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  81. self.assertIn('public', schemas)
  82. self.assertIn('CamelCaseSchema', schemas)
  83. self.assertIn('qgis_test', schemas)
  84. self.assertNotIn('myNewSchema', schemas)
  85. self.assertNotIn('myNewSchema2', schemas)
  86. self.assertIn('myNewSchema3', schemas)
  87. self.assertIn('myNewSchema4', schemas)
  88. conn.dropSchema('myNewSchema3')
  89. conn.dropSchema('myNewSchema4')
  90. model.refresh()
  91. self.assertEqual(model.rowCount(), old_count)
  92. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  93. self.assertIn('public', schemas)
  94. self.assertIn('CamelCaseSchema', schemas)
  95. self.assertIn('qgis_test', schemas)
  96. self.assertNotIn('myNewSchema3', schemas)
  97. self.assertNotIn('myNewSchema4', schemas)
  98. def test_model_allow_empty(self):
  99. """Test model with empty entry"""
  100. conn = QgsProviderRegistry.instance().providerMetadata('postgres').createConnection(self.uri, {})
  101. self.assertTrue(conn)
  102. model = QgsDatabaseSchemaModel(conn)
  103. self.assertGreaterEqual(model.rowCount(), 3)
  104. old_count = model.rowCount()
  105. model.setAllowEmptySchema(True)
  106. self.assertEqual(model.rowCount(), old_count + 1)
  107. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  108. self.assertIn('public', schemas)
  109. self.assertIn('CamelCaseSchema', schemas)
  110. self.assertIn('qgis_test', schemas)
  111. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  112. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  113. self.assertFalse(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  114. self.assertIsNone(model.data(model.index(model.rowCount(), 0, QModelIndex()), Qt.DisplayRole))
  115. model.refresh()
  116. self.assertEqual(model.rowCount(), old_count + 1)
  117. conn.createSchema('myNewSchema')
  118. self.assertEqual(model.rowCount(), old_count + 1)
  119. model.refresh()
  120. self.assertEqual(model.rowCount(), old_count + 2)
  121. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  122. self.assertIn('public', schemas)
  123. self.assertIn('CamelCaseSchema', schemas)
  124. self.assertIn('qgis_test', schemas)
  125. self.assertIn('myNewSchema', schemas)
  126. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  127. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  128. self.assertFalse(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  129. model.setAllowEmptySchema(False)
  130. self.assertEqual(model.rowCount(), old_count + 1)
  131. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  132. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  133. model.setAllowEmptySchema(True)
  134. self.assertEqual(model.rowCount(), old_count + 2)
  135. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  136. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  137. self.assertFalse(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  138. conn.createSchema('myNewSchema2')
  139. conn.createSchema('myNewSchema3')
  140. model.refresh()
  141. self.assertEqual(model.rowCount(), old_count + 4)
  142. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  143. self.assertIn('public', schemas)
  144. self.assertIn('CamelCaseSchema', schemas)
  145. self.assertIn('qgis_test', schemas)
  146. self.assertIn('myNewSchema', schemas)
  147. self.assertIn('myNewSchema2', schemas)
  148. self.assertIn('myNewSchema3', schemas)
  149. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  150. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  151. self.assertFalse(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  152. conn.createSchema('myNewSchema4')
  153. conn.dropSchema('myNewSchema2')
  154. conn.dropSchema('myNewSchema')
  155. model.refresh()
  156. self.assertEqual(model.rowCount(), old_count + 3)
  157. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  158. self.assertIn('public', schemas)
  159. self.assertIn('CamelCaseSchema', schemas)
  160. self.assertIn('qgis_test', schemas)
  161. self.assertNotIn('myNewSchema', schemas)
  162. self.assertNotIn('myNewSchema2', schemas)
  163. self.assertIn('myNewSchema3', schemas)
  164. self.assertIn('myNewSchema4', schemas)
  165. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  166. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  167. self.assertFalse(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  168. conn.dropSchema('myNewSchema3')
  169. conn.dropSchema('myNewSchema4')
  170. model.refresh()
  171. self.assertEqual(model.rowCount(), old_count + 1)
  172. schemas = [model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount())]
  173. self.assertIn('public', schemas)
  174. self.assertIn('CamelCaseSchema', schemas)
  175. self.assertIn('qgis_test', schemas)
  176. self.assertNotIn('myNewSchema3', schemas)
  177. self.assertNotIn('myNewSchema4', schemas)
  178. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  179. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  180. self.assertFalse(model.data(model.index(schemas.index('qgis_test'), 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  181. model.setAllowEmptySchema(False)
  182. self.assertEqual(model.rowCount(), old_count)
  183. self.assertTrue(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
  184. self.assertFalse(model.data(model.index(0, 0, QModelIndex()), QgsDatabaseSchemaModel.RoleEmpty))
  185. if __name__ == '__main__':
  186. unittest.main()