def testProperties(self): model = QgsAggregateMappingModel(self.source_fields) mapping = model.mapping() self.assertEqual(mapping[0].field.name(), 'source_field1') self.assertEqual(mapping[0].source, '"source_field1"') self.assertEqual(mapping[0].aggregate, 'concatenate') self.assertEqual(mapping[0].delimiter, ',') self.assertEqual(mapping[1].field.name(), 'source_field2') self.assertEqual(mapping[1].source, '"source_field2"') self.assertEqual(mapping[1].aggregate, 'sum') self.assertEqual(mapping[1].delimiter, ',') mapping[0].source = 'upper("source_field2")' mapping[0].aggregate = 'first_value' mapping[0].delimiter = '|' new_aggregate = QgsAggregateMappingModel.Aggregate() new_aggregate.field = QgsField('output_field3', QVariant.Double, len=4, prec=2) new_aggregate.source = 'randf(1,2)' new_aggregate.aggregate = 'mean' new_aggregate.delimiter = '*' mapping.append(new_aggregate) model.setMapping(mapping) self.assertEqual(model.rowCount(), 3) self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole), 'upper("source_field2")') self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole), 'first_value') 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) self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole), 'randf(1,2)') self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole), 'mean') self.assertEqual(model.data(model.index(2, 2), Qt.DisplayRole), '*') self.assertEqual(model.data(model.index(2, 3), Qt.DisplayRole), 'output_field3') self.assertEqual(model.data(model.index(2, 4), Qt.DisplayRole), QVariant.Double) self.assertEqual(model.data(model.index(2, 5), Qt.DisplayRole), 4) self.assertEqual(model.data(model.index(2, 6), Qt.DisplayRole), 2)
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')