def testSetSourceFields(self): """Test that changing source fields also empty expressions are updated""" model = QgsAggregateMappingModel(self.source_fields) self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole), '"source_field1"') self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole), 'source_field1') self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole), '"source_field2"') self.assertEqual(model.data(model.index(1, 3), Qt.DisplayRole), 'source_field2') f = QgsField('source_field3', QVariant.String) fields = self.source_fields fields.append(f) model.setSourceFields(fields) self.assertEqual(model.rowCount(), 3) self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole), '"source_field1"') self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole), 'source_field1') self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole), '"source_field2"') self.assertEqual(model.data(model.index(1, 3), Qt.DisplayRole), 'source_field2') self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole), '"source_field3"') self.assertEqual(model.data(model.index(2, 3), Qt.DisplayRole), 'source_field3')
def testModel(self): """Test the mapping model""" model = QgsAggregateMappingModel(self.source_fields) self.assertEqual(model.rowCount(QModelIndex()), 2) self.assertIsNone(model.data(model.index(9999, 0), Qt.DisplayRole)) self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole), '"source_field1"') self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole), 'concatenate') self.assertEqual(model.data(model.index(0, 2), Qt.DisplayRole), ',') self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole), 'source_field1') self.assertEqual(model.data(model.index(0, 4), Qt.DisplayRole), QVariant.String) self.assertEqual(model.data(model.index(0, 5), Qt.DisplayRole), 0) self.assertEqual(model.data(model.index(0, 6), Qt.DisplayRole), 0) self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole), '"source_field2"') self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'sum') self.assertEqual(model.data(model.index(1, 2), Qt.DisplayRole), ',') self.assertEqual(model.data(model.index(1, 3), Qt.DisplayRole), 'source_field2') self.assertEqual(model.data(model.index(1, 4), Qt.DisplayRole), QVariant.Int) self.assertEqual(model.data(model.index(1, 5), Qt.DisplayRole), 10) self.assertEqual(model.data(model.index(1, 6), Qt.DisplayRole), 8) # Test expression scope ctx = model.contextGenerator().createExpressionContext() self.assertTrue('source_field1' in ctx.fields().names()) # Test add fields model.appendField(QgsField('field3', QVariant.String), 'upper("field3")', 'first_value') self.assertEqual(model.rowCount(QModelIndex()), 3) self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole), 'upper("field3")') self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole), 'first_value') self.assertEqual(model.data(model.index(2, 2), Qt.DisplayRole), ',') self.assertEqual(model.data(model.index(2, 3), Qt.DisplayRole), 'field3') self.assertEqual(model.data(model.index(2, 4), Qt.DisplayRole), QVariant.String) self.assertEqual(model.data(model.index(2, 5), Qt.DisplayRole), 0) self.assertEqual(model.data(model.index(2, 6), Qt.DisplayRole), 0) # Test remove field model.removeField(model.index(1, 0)) self.assertEqual(model.rowCount(QModelIndex()), 2) self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole), '"source_field1"') self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole), 'upper("field3")') # Test edit fields mapping = model.mapping() self.assertEqual(mapping[0].field.name(), 'source_field1') self.assertEqual(mapping[0].aggregate, 'concatenate') self.assertEqual(mapping[0].delimiter, ',') self.assertEqual(mapping[0].source, '"source_field1"') self.assertEqual(mapping[1].field.name(), 'field3') self.assertEqual(mapping[1].aggregate, 'first_value') self.assertEqual(mapping[1].delimiter, ',') self.assertEqual(mapping[1].source, 'upper("field3")') # Test move up or down self.assertFalse(model.moveUp(model.index(0, 0))) self.assertFalse(model.moveUp(model.index(100, 0))) self.assertFalse(model.moveDown(model.index(1, 0))) self.assertFalse(model.moveDown(model.index(100, 0))) self.assertTrue(model.moveDown(model.index(0, 0))) mapping = model.mapping() self.assertEqual(mapping[0].field.name(), 'field3') self.assertEqual(mapping[1].field.name(), 'source_field1') self.assertTrue(model.moveUp(model.index(1, 0))) mapping = model.mapping() self.assertEqual(mapping[0].field.name(), 'source_field1') self.assertEqual(mapping[1].field.name(), 'field3')