summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_django.py2
-rw-r--r--tests/test_using.py32
2 files changed, 33 insertions, 1 deletions
diff --git a/tests/test_django.py b/tests/test_django.py
index 2cfb55c..bde8efe 100644
--- a/tests/test_django.py
+++ b/tests/test_django.py
@@ -21,6 +21,7 @@
"""Tests for factory_boy/Django interactions."""
import os
+from .compat import is_python2, unittest, mock
try:
@@ -64,7 +65,6 @@ except ImportError: # pragma: no cover
import factory
import factory.django
-from .compat import is_python2, unittest, mock
from . import testdata
from . import tools
diff --git a/tests/test_using.py b/tests/test_using.py
index 6d75531..c7d2b85 100644
--- a/tests/test_using.py
+++ b/tests/test_using.py
@@ -1493,6 +1493,38 @@ class IteratorTestCase(unittest.TestCase):
for i, obj in enumerate(objs):
self.assertEqual(i + 10, obj.one)
+ def test_iterator_late_loading(self):
+ """Ensure that Iterator doesn't unroll on class creation.
+
+ This allows, for Django objects, to call:
+ foo = factory.Iterator(models.MyThingy.objects.all())
+ """
+ class DBRequest(object):
+ def __init__(self):
+ self.ready = False
+
+ def __iter__(self):
+ if not self.ready:
+ raise ValueError("Not ready!!")
+ return iter([1, 2, 3])
+
+ # calling __iter__() should crash
+ req1 = DBRequest()
+ with self.assertRaises(ValueError):
+ iter(req1)
+
+ req2 = DBRequest()
+
+ class TestObjectFactory(factory.Factory):
+ class Meta:
+ model = TestObject
+
+ one = factory.Iterator(req2)
+
+ req2.ready = True
+ obj = TestObjectFactory()
+ self.assertEqual(1, obj.one)
+
class BetterFakeModelManager(object):
def __init__(self, keys, instance):