ProjectProvider.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. """
  2. ***************************************************************************
  3. Project Provider tests
  4. ---------------------
  5. Date : July 2018
  6. Copyright : (C) 2018 by Nyall Dawson
  7. Email : nyall dot dawson at gmail dot com
  8. ***************************************************************************
  9. * *
  10. * This program is free software; you can redistribute it and/or modify *
  11. * it under the terms of the GNU General Public License as published by *
  12. * the Free Software Foundation; either version 2 of the License, or *
  13. * (at your option) any later version. *
  14. * *
  15. ***************************************************************************8
  16. """
  17. __author__ = 'Nyall Dawson'
  18. __date__ = 'July 2018'
  19. __copyright__ = '(C) 2018, Nyall Dawson'
  20. import unittest
  21. from qgis.testing import start_app, QgisTestCase
  22. from qgis.PyQt.QtCore import QTemporaryFile
  23. from qgis.core import (QgsApplication,
  24. QgsProcessingModelAlgorithm,
  25. QgsProject)
  26. from processing.modeler.ProjectProvider import ProjectProvider
  27. from processing.modeler.ModelerDialog import ModelerDialog
  28. start_app()
  29. class ProjectProviderTest(QgisTestCase):
  30. def testSaveRestoreFromProject(self):
  31. p = QgsProject()
  32. provider = ProjectProvider(p)
  33. # add some algorithms
  34. alg = QgsProcessingModelAlgorithm('test name', 'test group')
  35. provider.add_model(alg)
  36. alg2 = QgsProcessingModelAlgorithm('test name2', 'test group2')
  37. provider.add_model(alg2)
  38. self.assertEqual(len(provider.algorithms()), 2)
  39. tmp_file = QTemporaryFile()
  40. tmp_file.open() # fileName is no available until open
  41. temp_path = tmp_file.fileName()
  42. tmp_file.close()
  43. self.assertTrue(p.write(temp_path))
  44. # restore project
  45. p2 = QgsProject()
  46. provider2 = ProjectProvider(p2)
  47. self.assertTrue(p2.read(temp_path))
  48. self.assertEqual(len(provider2.model_definitions), 2)
  49. self.assertEqual(len(provider2.algorithms()), 2)
  50. self.assertEqual(provider2.algorithms()[0].name(), 'test name')
  51. self.assertEqual(provider2.algorithms()[0].group(), 'test group')
  52. self.assertEqual(provider2.algorithms()[1].name(), 'test name2')
  53. self.assertEqual(provider2.algorithms()[1].group(), 'test group2')
  54. # clear project should remove algorithms
  55. p2.clear()
  56. self.assertFalse(provider2.algorithms())
  57. def testDelete(self):
  58. """
  59. Test deleting a model from the project
  60. """
  61. p = QgsProject()
  62. provider = ProjectProvider(p)
  63. # add some models
  64. alg = QgsProcessingModelAlgorithm('test name', 'test group')
  65. provider.add_model(alg)
  66. alg2 = QgsProcessingModelAlgorithm('test name2', 'test group2')
  67. provider.add_model(alg2)
  68. self.assertEqual(len(provider.algorithms()), 2)
  69. # try to delete
  70. provider.remove_model(None)
  71. self.assertEqual(len(provider.algorithms()), 2)
  72. # not in provider!
  73. alg3 = QgsProcessingModelAlgorithm('test name3', 'test group')
  74. provider.remove_model(alg3)
  75. self.assertEqual(len(provider.algorithms()), 2)
  76. # delete model actually in project
  77. provider.remove_model(alg)
  78. self.assertEqual(len(provider.algorithms()), 1)
  79. self.assertEqual(provider.algorithms()[0].name(), 'test name2')
  80. # overwrite model
  81. alg2b = QgsProcessingModelAlgorithm('test name2', 'test group2')
  82. alg2b.setHelpContent({'test': 'test'})
  83. provider.add_model(alg2b)
  84. self.assertEqual(len(provider.algorithms()), 1)
  85. self.assertEqual(provider.algorithms()[0].helpContent(), {'test': 'test'})
  86. provider.remove_model(alg2)
  87. self.assertEqual(len(provider.algorithms()), 0)
  88. def testDialog(self):
  89. """
  90. Test saving model to project from dialog
  91. """
  92. p = QgsProject().instance()
  93. provider = ProjectProvider()
  94. QgsApplication.processingRegistry().addProvider(provider)
  95. # make an algorithm
  96. alg = QgsProcessingModelAlgorithm('test name', 'test group')
  97. dialog = ModelerDialog(alg)
  98. dialog.saveInProject()
  99. self.assertEqual(len(provider.model_definitions), 1)
  100. self.assertEqual(len(provider.algorithms()), 1)
  101. self.assertEqual(provider.algorithms()[0].name(), 'test name')
  102. self.assertEqual(provider.algorithms()[0].group(), 'test group')
  103. if __name__ == '__main__':
  104. unittest.main()