def test_algorithm(self): geocoder = TestGeocoder() alg = TestGeocoderAlgorithm(geocoder) alg.initParameters() fields = QgsFields() fields.append(QgsField('some_pk', QVariant.Int)) fields.append(QgsField('address', QVariant.String)) f = QgsFeature(fields) f.initAttributes(2) f['some_pk'] = 17 params = {'FIELD': 'address'} context = QgsProcessingContext() feedback = QgsProcessingFeedback() self.assertTrue(alg.prepareAlgorithm(params, context, feedback)) output_fields = alg.outputFields(fields) self.assertEqual([f.name() for f in output_fields], ['some_pk', 'address']) self.assertEqual([f.type() for f in output_fields], [QVariant.Int, QVariant.String]) # empty field res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertTrue(res[0].geometry().isNull()) self.assertEqual(res[0].attributes(), [17, NULL]) # no result f['address'] = 'c' res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertTrue(res[0].geometry().isNull()) self.assertEqual(res[0].attributes(), [17, 'c']) f['address'] = 'a' res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertEqual(res[0].geometry().asWkt(), 'Point (1 2)') self.assertEqual(res[0].attributes(), [17, 'a']) f['address'] = 'b' res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertEqual(res[0].geometry().asWkt(), 'Point (11 12)') self.assertEqual(res[0].attributes(), [17, 'b'])