123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- """
- ***************************************************************************
- Project Provider tests
- ---------------------
- Date : July 2018
- Copyright : (C) 2018 by Nyall Dawson
- Email : nyall dot dawson at gmail dot com
- ***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************8
- """
- __author__ = 'Nyall Dawson'
- __date__ = 'July 2018'
- __copyright__ = '(C) 2018, Nyall Dawson'
- import unittest
- from qgis.testing import start_app, QgisTestCase
- from qgis.PyQt.QtCore import QTemporaryFile
- from qgis.core import (QgsApplication,
- QgsProcessingModelAlgorithm,
- QgsProject)
- from processing.modeler.ProjectProvider import ProjectProvider
- from processing.modeler.ModelerDialog import ModelerDialog
- start_app()
- class ProjectProviderTest(QgisTestCase):
- def testSaveRestoreFromProject(self):
- p = QgsProject()
- provider = ProjectProvider(p)
- # add some algorithms
- alg = QgsProcessingModelAlgorithm('test name', 'test group')
- provider.add_model(alg)
- alg2 = QgsProcessingModelAlgorithm('test name2', 'test group2')
- provider.add_model(alg2)
- self.assertEqual(len(provider.algorithms()), 2)
- tmp_file = QTemporaryFile()
- tmp_file.open() # fileName is no available until open
- temp_path = tmp_file.fileName()
- tmp_file.close()
- self.assertTrue(p.write(temp_path))
- # restore project
- p2 = QgsProject()
- provider2 = ProjectProvider(p2)
- self.assertTrue(p2.read(temp_path))
- self.assertEqual(len(provider2.model_definitions), 2)
- self.assertEqual(len(provider2.algorithms()), 2)
- self.assertEqual(provider2.algorithms()[0].name(), 'test name')
- self.assertEqual(provider2.algorithms()[0].group(), 'test group')
- self.assertEqual(provider2.algorithms()[1].name(), 'test name2')
- self.assertEqual(provider2.algorithms()[1].group(), 'test group2')
- # clear project should remove algorithms
- p2.clear()
- self.assertFalse(provider2.algorithms())
- def testDelete(self):
- """
- Test deleting a model from the project
- """
- p = QgsProject()
- provider = ProjectProvider(p)
- # add some models
- alg = QgsProcessingModelAlgorithm('test name', 'test group')
- provider.add_model(alg)
- alg2 = QgsProcessingModelAlgorithm('test name2', 'test group2')
- provider.add_model(alg2)
- self.assertEqual(len(provider.algorithms()), 2)
- # try to delete
- provider.remove_model(None)
- self.assertEqual(len(provider.algorithms()), 2)
- # not in provider!
- alg3 = QgsProcessingModelAlgorithm('test name3', 'test group')
- provider.remove_model(alg3)
- self.assertEqual(len(provider.algorithms()), 2)
- # delete model actually in project
- provider.remove_model(alg)
- self.assertEqual(len(provider.algorithms()), 1)
- self.assertEqual(provider.algorithms()[0].name(), 'test name2')
- # overwrite model
- alg2b = QgsProcessingModelAlgorithm('test name2', 'test group2')
- alg2b.setHelpContent({'test': 'test'})
- provider.add_model(alg2b)
- self.assertEqual(len(provider.algorithms()), 1)
- self.assertEqual(provider.algorithms()[0].helpContent(), {'test': 'test'})
- provider.remove_model(alg2)
- self.assertEqual(len(provider.algorithms()), 0)
- def testDialog(self):
- """
- Test saving model to project from dialog
- """
- p = QgsProject().instance()
- provider = ProjectProvider()
- QgsApplication.processingRegistry().addProvider(provider)
- # make an algorithm
- alg = QgsProcessingModelAlgorithm('test name', 'test group')
- dialog = ModelerDialog(alg)
- dialog.saveInProject()
- self.assertEqual(len(provider.model_definitions), 1)
- self.assertEqual(len(provider.algorithms()), 1)
- self.assertEqual(provider.algorithms()[0].name(), 'test name')
- self.assertEqual(provider.algorithms()[0].group(), 'test group')
- if __name__ == '__main__':
- unittest.main()
|