diff options
author | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2013-11-25 00:51:31 +0100 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2013-11-25 00:51:31 +0100 |
commit | ccd6a9927483b8789dee13c2d68a4407e2d37f94 (patch) | |
tree | f4824ea76bdf370f71be124dad2f61b32f666728 /tests | |
parent | 689b06c59788dedfce0af444760a3e5966761016 (diff) | |
download | factory-boy-ccd6a9927483b8789dee13c2d68a4407e2d37f94.tar factory-boy-ccd6a9927483b8789dee13c2d68a4407e2d37f94.tar.gz |
django: Fix lazy loading of 'son' factories (Closes #109).
Diffstat (limited to 'tests')
-rw-r--r-- | tests/djapp/models.py | 4 | ||||
-rw-r--r-- | tests/test_django.py | 43 |
2 files changed, 40 insertions, 7 deletions
diff --git a/tests/djapp/models.py b/tests/djapp/models.py index 3f25fbb..e98279d 100644 --- a/tests/djapp/models.py +++ b/tests/djapp/models.py @@ -55,6 +55,10 @@ class ConcreteSon(AbstractBase): pass +class StandardSon(StandardModel): + pass + + WITHFILE_UPLOAD_TO = 'django' WITHFILE_UPLOAD_DIR = os.path.join(settings.MEDIA_ROOT, WITHFILE_UPLOAD_TO) diff --git a/tests/test_django.py b/tests/test_django.py index 94101e9..e4bbc2b 100644 --- a/tests/test_django.py +++ b/tests/test_django.py @@ -64,6 +64,7 @@ else: # pragma: no cover models = Fake() models.StandardModel = Fake + models.StandardSon = None models.AbstractBase = Fake models.ConcreteSon = Fake models.NonIntegerPk = Fake @@ -211,7 +212,7 @@ class DjangoModelLoadingTestCase(django_test.TestCase): class ExampleFactory(factory.DjangoModelFactory): FACTORY_FOR = 'djapp.StandardModel' - self.assertEqual(models.StandardModel, ExampleFactory._load_target_class()) + self.assertEqual(models.StandardModel, ExampleFactory._get_target_class()) def test_building(self): class ExampleFactory(factory.DjangoModelFactory): @@ -220,16 +221,44 @@ class DjangoModelLoadingTestCase(django_test.TestCase): e = ExampleFactory.build() self.assertEqual(models.StandardModel, e.__class__) - def test_cache(self): + def test_inherited_loading(self): + """Proper loading of a model within 'child' factories. + + See https://github.com/rbarrois/factory_boy/issues/109. + """ + class ExampleFactory(factory.DjangoModelFactory): + FACTORY_FOR = 'djapp.StandardModel' + + class Example2Factory(ExampleFactory): + pass + + e = Example2Factory.build() + self.assertEqual(models.StandardModel, e.__class__) + + def test_inherited_loading_and_sequence(self): + """Proper loading of a model within 'child' factories. + + See https://github.com/rbarrois/factory_boy/issues/109. + """ class ExampleFactory(factory.DjangoModelFactory): FACTORY_FOR = 'djapp.StandardModel' - self.assertEqual('djapp.StandardModel', ExampleFactory._associated_class) - self.assertIsNone(ExampleFactory._associated_model) + foo = factory.Sequence(lambda n: n) + + class Example2Factory(ExampleFactory): + FACTORY_FOR = 'djapp.StandardSon' + + self.assertEqual(models.StandardSon, Example2Factory._get_target_class()) - self.assertEqual(models.StandardModel, ExampleFactory._load_target_class()) - self.assertEqual('djapp.StandardModel', ExampleFactory._associated_class) - self.assertEqual(models.StandardModel, ExampleFactory._associated_model) + e1 = ExampleFactory.build() + e2 = Example2Factory.build() + e3 = ExampleFactory.build() + self.assertEqual(models.StandardModel, e1.__class__) + self.assertEqual(models.StandardSon, e2.__class__) + self.assertEqual(models.StandardModel, e3.__class__) + self.assertEqual(1, e1.foo) + self.assertEqual(2, e2.foo) + self.assertEqual(3, e3.foo) @unittest.skipIf(django is None, "Django not installed.") |