1"""QGIS Unit tests for QgsProjectServerValidator 2 3From build dir, run: 4ctest -R PyQgsProjectServerValidator -V 5 6.. note:: This program is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 2 of the License, or 9(at your option) any later version. 10""" 11__author__ = 'Etienne Trimaille' 12__date__ = '27/03/2020' 13__copyright__ = 'Copyright 2020, The QGIS Project' 14 15from qgis.core import ( 16 QgsProject, 17 QgsVectorLayer, 18 QgsProjectServerValidator, 19) 20from qgis.testing import start_app, unittest 21 22app = start_app() 23 24 25class TestQgsprojectServerValidator(unittest.TestCase): 26 27 def test_project_server_validator(self): 28 """Test project server validator.""" 29 project = QgsProject() 30 layer = QgsVectorLayer('Point?field=fldtxt:string', 'layer_1', 'memory') 31 project.addMapLayers([layer]) 32 33 # Valid 34 valid, results = QgsProjectServerValidator.validate(project) 35 self.assertTrue(valid) 36 self.assertFalse(results) 37 38 layer_1 = QgsVectorLayer('Point?field=fldtxt:string', 'layer_1', 'memory') 39 project.addMapLayers([layer_1]) 40 41 # Not valid, same layer name 42 valid, results = QgsProjectServerValidator.validate(project) 43 self.assertFalse(valid) 44 self.assertEqual(1, len(results)) 45 self.assertEqual(QgsProjectServerValidator.DuplicatedNames, results[0].error) 46 47 # Not valid, short name is invalid 48 layer_1.setShortName('layer_1_invalid_#') 49 valid, results = QgsProjectServerValidator.validate(project) 50 self.assertFalse(valid) 51 self.assertEqual(1, len(results)) 52 self.assertEqual(QgsProjectServerValidator.LayerShortName, results[0].error) 53 54 # Not valid, same short name as the first layer name 55 layer_1.setShortName('layer_1') 56 valid, results = QgsProjectServerValidator.validate(project) 57 self.assertFalse(valid) 58 self.assertEqual(1, len(results)) 59 self.assertEqual(QgsProjectServerValidator.DuplicatedNames, results[0].error) 60 61 # Valid 62 layer_1.setShortName('layer_1_bis') 63 valid, results = QgsProjectServerValidator.validate(project) 64 self.assertTrue(valid) 65 self.assertEqual(0, len(results)) 66 67 # Not valid, a group with same name as the first layer 68 group = project.layerTreeRoot().addGroup('layer_1') 69 valid, results = QgsProjectServerValidator.validate(project) 70 self.assertFalse(valid) 71 self.assertEqual(1, len(results)) 72 self.assertEqual(QgsProjectServerValidator.DuplicatedNames, results[0].error) 73 74 # Valid 75 group.setCustomProperty('wmsShortName', 'my_group1') 76 valid, results = QgsProjectServerValidator.validate(project) 77 self.assertTrue(valid) 78 self.assertEqual(0, len(results)) 79 80 # Not valid, the project title is invalid 81 project.setTitle('@ layer 1') 82 valid, results = QgsProjectServerValidator.validate(project) 83 self.assertFalse(valid) 84 self.assertEqual(1, len(results)) 85 self.assertEqual(QgsProjectServerValidator.ProjectShortName, results[0].error) 86 87 # Valid project title 88 project.setTitle('project_title') 89 valid, results = QgsProjectServerValidator.validate(project) 90 self.assertTrue(valid) 91 self.assertEqual(0, len(results)) 92 93 # Valid despite the bad project title, use project short name 94 project.setTitle('@ layer 1') 95 project.writeEntry('WMSRootName', '/', 'project_short_name') 96 valid, results = QgsProjectServerValidator.validate(project) 97 self.assertTrue(valid) 98 self.assertEqual(0, len(results)) 99 100 # Not valid project short name 101 project.setTitle('project_title') 102 project.writeEntry('WMSRootName', '/', 'project with space') 103 valid, results = QgsProjectServerValidator.validate(project) 104 self.assertFalse(valid) 105 self.assertEqual(1, len(results)) 106 self.assertEqual(QgsProjectServerValidator.ProjectShortName, results[0].error) 107 108 # Not valid, duplicated project short name 109 project.writeEntry('WMSRootName', '/', 'layer_1') 110 valid, results = QgsProjectServerValidator.validate(project) 111 self.assertEqual(1, len(results)) 112 self.assertEqual(QgsProjectServerValidator.ProjectRootNameConflict, results[0].error) 113 114 115if __name__ == '__main__': 116 unittest.main() 117