def test_transfer_all(self):
    sources = [
      FMSource("McGonagall, Minerva", 40, "Gryffindor"),
      FMSource("Flitwick, Filius", 40, "Ravenclaw"),
      FMSource("Sprout, Pomona", 40, "Hufflepuff"),
      FMSource("Snape, Severus", 40, "Slytherin")
    ]
    fms = [fn_fm, ln_fm, age_fm, house_fm]

    d1 = list(FieldMapping.transfer_all(fms, sources, lambda d: FMDest(**d)))
    self.assertEqual(len(d1), 4)
    self.assertIsInstance(d1[0], FMDest)
    self.assertEqual(d1[0].first_name, "Minerva")

    d2 = list(FieldMapping.transfer_all(fms, sources))
    self.assertEqual(len(d2), 4)
    self.assertIsInstance(d2[0], dict)
    self.assertEqual(d2[-1]["last_name"], "Snape")

    d3 = list(FieldMapping.transfer_all(fms, sources, FieldMapping.get_namedtuple_factory(fms)))
    self.assertEqual(len(d3), 4)
    self.assertEqual(d3[0].first_name, "Minerva")
 def test_get_namedtuple_factory(self):
   fms = [fn_fm, ln_fm, age_fm, house_fm]
   ntf = FieldMapping.get_namedtuple_factory(fms)
   nt = ntf(dict(first_name="Vernon", last_name="Dursley", age=35, house_name="Privet Drive"))
   for fm in fms:
     self.assertTrue(hasattr(nt, fm.destination_name))