summaryrefslogtreecommitdiff
path: root/tests/test_using.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_using.py')
-rw-r--r--tests/test_using.py551
1 files changed, 398 insertions, 153 deletions
diff --git a/tests/test_using.py b/tests/test_using.py
index 3979cd0..0a893c1 100644
--- a/tests/test_using.py
+++ b/tests/test_using.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright (c) 2011-2013 Raphaël Barrois
+# Copyright (c) 2011-2015 Raphaël Barrois
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -69,6 +69,9 @@ class FakeModel(object):
def order_by(self, *args, **kwargs):
return [1]
+ def using(self, db):
+ return self
+
objects = FakeModelManager()
def __init__(self, **kwargs):
@@ -78,11 +81,12 @@ class FakeModel(object):
class FakeModelFactory(factory.Factory):
- ABSTRACT_FACTORY = True
+ class Meta:
+ abstract = True
@classmethod
- def _create(cls, target_class, *args, **kwargs):
- return target_class.create(**kwargs)
+ def _create(cls, model_class, *args, **kwargs):
+ return model_class.create(**kwargs)
class TestModel(FakeModel):
@@ -292,17 +296,19 @@ class SimpleBuildTestCase(unittest.TestCase):
class UsingFactoryTestCase(unittest.TestCase):
def test_attribute(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'one'
test_object = TestObjectFactory.build()
self.assertEqual(test_object.one, 'one')
- def test_inheriting_target_class(self):
+ def test_inheriting_model_class(self):
@factory.use_strategy(factory.BUILD_STRATEGY)
class TestObjectFactory(factory.Factory, TestObject):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'one'
@@ -311,18 +317,22 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_abstract(self):
class SomeAbstractFactory(factory.Factory):
- ABSTRACT_FACTORY = True
+ class Meta:
+ abstract = True
+
one = 'one'
class InheritedFactory(SomeAbstractFactory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
test_object = InheritedFactory.build()
self.assertEqual(test_object.one, 'one')
def test_sequence(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: 'one%d' % n)
two = factory.Sequence(lambda n: 'two%d' % n)
@@ -337,7 +347,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_sequence_custom_begin(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@classmethod
def _setup_next_sequence(cls):
@@ -356,7 +367,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_sequence_override(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: 'one%d' % n)
@@ -372,13 +384,14 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_custom_create(self):
class TestModelFactory(factory.Factory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
two = 2
@classmethod
- def _create(cls, target_class, *args, **kwargs):
- obj = target_class.create(**kwargs)
+ def _create(cls, model_class, *args, **kwargs):
+ obj = model_class.create(**kwargs)
obj.properly_created = True
return obj
@@ -395,7 +408,8 @@ class UsingFactoryTestCase(unittest.TestCase):
self.y = y
class NonDjangoFactory(factory.Factory):
- FACTORY_FOR = NonDjango
+ class Meta:
+ model = NonDjango
x = 3
@@ -405,7 +419,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_sequence_batch(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: 'one%d' % n)
two = factory.Sequence(lambda n: 'two%d' % n)
@@ -420,7 +435,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_lazy_attribute(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.LazyAttribute(lambda a: 'abc' )
two = factory.LazyAttribute(lambda a: a.one + ' xyz')
@@ -431,7 +447,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_lazy_attribute_sequence(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.LazyAttributeSequence(lambda a, n: 'abc%d' % n)
two = factory.LazyAttributeSequence(lambda a, n: a.one + ' xyz%d' % n)
@@ -446,7 +463,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_lazy_attribute_decorator(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@factory.lazy_attribute
def one(a):
@@ -460,7 +478,8 @@ class UsingFactoryTestCase(unittest.TestCase):
n = 3
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'xx'
two = factory.SelfAttribute('one')
@@ -479,12 +498,14 @@ class UsingFactoryTestCase(unittest.TestCase):
pass
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 3
three = factory.SelfAttribute('..bar')
class TestModel2Factory(FakeModelFactory):
- FACTORY_FOR = TestModel2
+ class Meta:
+ model = TestModel2
bar = 4
two = factory.SubFactory(TestModelFactory, one=1)
@@ -493,7 +514,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_sequence_decorator(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@factory.sequence
def one(n):
@@ -504,7 +526,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_lazy_attribute_sequence_decorator(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@factory.lazy_attribute_sequence
def one(a, n):
@@ -519,7 +542,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_build_with_parameters(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: 'one%d' % n)
two = factory.Sequence(lambda n: 'two%d' % n)
@@ -535,7 +559,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_create(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -545,7 +570,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_create_batch(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -561,7 +587,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_generate_build(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -571,7 +598,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_generate_create(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -581,7 +609,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_generate_stub(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -591,7 +620,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_generate_batch_build(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -607,7 +637,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_generate_batch_create(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -623,7 +654,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_generate_batch_stub(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -639,7 +671,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_simple_generate_build(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -649,7 +682,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_simple_generate_create(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -659,7 +693,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_simple_generate_batch_build(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -675,7 +710,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_simple_generate_batch_create(self):
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 'one'
@@ -691,7 +727,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_stub_batch(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'one'
two = factory.LazyAttribute(lambda a: a.one + ' two')
@@ -710,13 +747,15 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_inheritance(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'one'
two = factory.LazyAttribute(lambda a: a.one + ' two')
class TestObjectFactory2(TestObjectFactory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
three = 'three'
four = factory.LazyAttribute(lambda a: a.three + ' four')
@@ -730,15 +769,48 @@ class UsingFactoryTestCase(unittest.TestCase):
test_object_alt = TestObjectFactory.build()
self.assertEqual(None, test_object_alt.three)
+ def test_override_inherited(self):
+ """Overriding inherited declarations"""
+ class TestObjectFactory(factory.Factory):
+ class Meta:
+ model = TestObject
+
+ one = 'one'
+
+ class TestObjectFactory2(TestObjectFactory):
+ one = 'two'
+
+ test_object = TestObjectFactory2.build()
+ self.assertEqual('two', test_object.one)
+
+ def test_override_inherited_deep(self):
+ """Overriding inherited declarations"""
+ class TestObjectFactory(factory.Factory):
+ class Meta:
+ model = TestObject
+
+ one = 'one'
+
+ class TestObjectFactory2(TestObjectFactory):
+ one = 'two'
+
+ class TestObjectFactory3(TestObjectFactory2):
+ pass
+
+ test_object = TestObjectFactory3.build()
+ self.assertEqual('two', test_object.one)
+
def test_inheritance_and_sequences(self):
"""Sequence counters should be kept within an inheritance chain."""
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: n)
class TestObjectFactory2(TestObjectFactory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
to1a = TestObjectFactory()
self.assertEqual(0, to1a.one)
@@ -755,12 +827,14 @@ class UsingFactoryTestCase(unittest.TestCase):
pass
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: n)
class TestObjectFactory2(TestObjectFactory):
- FACTORY_FOR = TestObject2
+ class Meta:
+ model = TestObject2
to1a = TestObjectFactory()
self.assertEqual(0, to1a.one)
@@ -785,12 +859,14 @@ class UsingFactoryTestCase(unittest.TestCase):
self.one = one
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: n)
class TestObjectFactory2(TestObjectFactory):
- FACTORY_FOR = TestObject2
+ class Meta:
+ model = TestObject2
to1a = TestObjectFactory()
self.assertEqual(0, to1a.one)
@@ -804,7 +880,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_inheritance_with_inherited_class(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'one'
two = factory.LazyAttribute(lambda a: a.one + ' two')
@@ -821,12 +898,14 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_dual_inheritance(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 'one'
class TestOtherFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
two = 'two'
four = 'four'
@@ -841,7 +920,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_class_method_accessible(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@classmethod
def alt_create(cls, **kwargs):
@@ -851,7 +931,8 @@ class UsingFactoryTestCase(unittest.TestCase):
def test_static_method_accessible(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@staticmethod
def alt_create(**kwargs):
@@ -859,15 +940,16 @@ class UsingFactoryTestCase(unittest.TestCase):
self.assertEqual(TestObjectFactory.alt_create(foo=1), {"foo": 1})
- def test_arg_parameters(self):
+ def test_inline_args(self):
class TestObject(object):
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
- FACTORY_ARG_PARAMETERS = ('x', 'y')
+ class Meta:
+ model = TestObject
+ inline_args = ('x', 'y')
x = 1
y = 2
@@ -878,15 +960,16 @@ class UsingFactoryTestCase(unittest.TestCase):
self.assertEqual((42, 2), obj.args)
self.assertEqual({'z': 5, 't': 4}, obj.kwargs)
- def test_hidden_args(self):
+ def test_exclude(self):
class TestObject(object):
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
- FACTORY_HIDDEN_ARGS = ('x', 'z')
+ class Meta:
+ model = TestObject
+ exclude = ('x', 'z')
x = 1
y = 2
@@ -897,16 +980,17 @@ class UsingFactoryTestCase(unittest.TestCase):
self.assertEqual((), obj.args)
self.assertEqual({'y': 2, 't': 4}, obj.kwargs)
- def test_hidden_args_and_arg_parameters(self):
+ def test_exclude_and_inline_args(self):
class TestObject(object):
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
- FACTORY_HIDDEN_ARGS = ('x', 'z')
- FACTORY_ARG_PARAMETERS = ('y',)
+ class Meta:
+ model = TestObject
+ exclude = ('x', 'z')
+ inline_args = ('y',)
x = 1
y = 2
@@ -927,8 +1011,9 @@ class NonKwargParametersTestCase(unittest.TestCase):
self.kwargs = kwargs
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
- FACTORY_ARG_PARAMETERS = ('one', 'two',)
+ class Meta:
+ model = TestObject
+ inline_args = ('one', 'two',)
one = 1
two = 2
@@ -952,16 +1037,17 @@ class NonKwargParametersTestCase(unittest.TestCase):
return inst
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
- FACTORY_ARG_PARAMETERS = ('one', 'two')
+ class Meta:
+ model = TestObject
+ inline_args = ('one', 'two')
one = 1
two = 2
three = 3
@classmethod
- def _create(cls, target_class, *args, **kwargs):
- return target_class.create(*args, **kwargs)
+ def _create(cls, model_class, *args, **kwargs):
+ return model_class.create(*args, **kwargs)
obj = TestObjectFactory.create()
self.assertEqual((1, 2), obj.args)
@@ -978,7 +1064,8 @@ class KwargAdjustTestCase(unittest.TestCase):
self.kwargs = kwargs
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@classmethod
def _adjust_kwargs(cls, **kwargs):
@@ -989,6 +1076,21 @@ class KwargAdjustTestCase(unittest.TestCase):
self.assertEqual({'x': 1, 'y': 2, 'z': 3, 'foo': 3}, obj.kwargs)
self.assertEqual((), obj.args)
+ def test_rename(self):
+ class TestObject(object):
+ def __init__(self, attributes=None):
+ self.attributes = attributes
+
+ class TestObjectFactory(factory.Factory):
+ class Meta:
+ model = TestObject
+ rename = {'attributes_': 'attributes'}
+
+ attributes_ = 42
+
+ obj = TestObjectFactory.build()
+ self.assertEqual(42, obj.attributes)
+
class SubFactoryTestCase(unittest.TestCase):
def test_sub_factory(self):
@@ -996,11 +1098,13 @@ class SubFactoryTestCase(unittest.TestCase):
pass
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 3
class TestModel2Factory(FakeModelFactory):
- FACTORY_FOR = TestModel2
+ class Meta:
+ model = TestModel2
two = factory.SubFactory(TestModelFactory, one=1)
test_model = TestModel2Factory(two__one=4)
@@ -1013,10 +1117,12 @@ class SubFactoryTestCase(unittest.TestCase):
pass
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
class TestModel2Factory(FakeModelFactory):
- FACTORY_FOR = TestModel2
+ class Meta:
+ model = TestModel2
two = factory.SubFactory(TestModelFactory,
one=factory.Sequence(lambda n: 'x%dx' % n),
two=factory.LazyAttribute(lambda o: '%s%s' % (o.one, o.one)),
@@ -1033,12 +1139,14 @@ class SubFactoryTestCase(unittest.TestCase):
setattr(self, k, v)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Sequence(lambda n: int(n))
class WrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrapped = factory.SubFactory(TestObjectFactory)
@@ -1054,7 +1162,8 @@ class SubFactoryTestCase(unittest.TestCase):
setattr(self, k, v)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
class OtherTestObject(object):
@@ -1063,7 +1172,8 @@ class SubFactoryTestCase(unittest.TestCase):
setattr(self, k, v)
class WrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = OtherTestObject
+ class Meta:
+ model = OtherTestObject
wrapped = factory.SubFactory(TestObjectFactory, two=2, four=4)
wrapped__two = 4
@@ -1083,16 +1193,19 @@ class SubFactoryTestCase(unittest.TestCase):
setattr(self, k, v)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
class WrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrapped = factory.SubFactory(TestObjectFactory)
wrapped_bis = factory.SubFactory(TestObjectFactory, one=1)
class OuterWrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrap = factory.SubFactory(WrappingTestObjectFactory, wrapped__two=2)
@@ -1109,17 +1222,20 @@ class SubFactoryTestCase(unittest.TestCase):
setattr(self, k, v)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
two = 'two'
class WrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrapped = factory.SubFactory(TestObjectFactory)
friend = factory.LazyAttribute(lambda o: o.wrapped.two.four + 1)
class OuterWrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrap = factory.SubFactory(WrappingTestObjectFactory,
wrapped__two=factory.SubFactory(TestObjectFactory, four=4))
@@ -1139,12 +1255,14 @@ class SubFactoryTestCase(unittest.TestCase):
# Innermost factory
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
two = 'two'
# Intermediary factory
class WrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrapped = factory.SubFactory(TestObjectFactory)
wrapped__two = 'three'
@@ -1162,11 +1280,13 @@ class SubFactoryTestCase(unittest.TestCase):
setattr(self, k, v)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
two = 'two'
class WrappingTestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
wrapped = factory.SubFactory(TestObjectFactory)
friend = factory.LazyAttribute(lambda o: o.wrapped.two + 1)
@@ -1200,20 +1320,24 @@ class SubFactoryTestCase(unittest.TestCase):
self.side_b = side_b
class InnerMostFactory(factory.Factory):
- FACTORY_FOR = InnerMost
+ class Meta:
+ model = InnerMost
a = 15
b = 20
class SideAFactory(factory.Factory):
- FACTORY_FOR = SideA
+ class Meta:
+ model = SideA
inner_from_a = factory.SubFactory(InnerMostFactory, a=20)
class SideBFactory(factory.Factory):
- FACTORY_FOR = SideB
+ class Meta:
+ model = SideB
inner_from_b = factory.SubFactory(InnerMostFactory, b=15)
class OuterMostFactory(factory.Factory):
- FACTORY_FOR = OuterMost
+ class Meta:
+ model = OuterMost
foo = 30
side_a = factory.SubFactory(SideAFactory,
@@ -1238,12 +1362,14 @@ class SubFactoryTestCase(unittest.TestCase):
pass
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 3
two = factory.ContainerAttribute(lambda obj, containers: len(containers or []), strict=False)
class TestModel2Factory(FakeModelFactory):
- FACTORY_FOR = TestModel2
+ class Meta:
+ model = TestModel2
one = 1
two = factory.SubFactory(TestModelFactory, one=1)
@@ -1261,12 +1387,14 @@ class SubFactoryTestCase(unittest.TestCase):
pass
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 3
two = factory.ContainerAttribute(lambda obj, containers: len(containers or []), strict=True)
class TestModel2Factory(FakeModelFactory):
- FACTORY_FOR = TestModel2
+ class Meta:
+ model = TestModel2
one = 1
two = factory.SubFactory(TestModelFactory, one=1)
@@ -1282,7 +1410,8 @@ class SubFactoryTestCase(unittest.TestCase):
pass
class TestModelFactory(FakeModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
one = 3
@factory.container_attribute
@@ -1292,7 +1421,8 @@ class SubFactoryTestCase(unittest.TestCase):
return 42
class TestModel2Factory(FakeModelFactory):
- FACTORY_FOR = TestModel2
+ class Meta:
+ model = TestModel2
one = 1
two = factory.SubFactory(TestModelFactory, one=1)
@@ -1310,7 +1440,8 @@ class IteratorTestCase(unittest.TestCase):
def test_iterator(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Iterator(range(10, 30))
@@ -1323,7 +1454,8 @@ class IteratorTestCase(unittest.TestCase):
@tools.disable_warnings
def test_iterator_list_comprehension_scope_bleeding(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Iterator([j * 3 for j in range(5)])
@@ -1334,7 +1466,8 @@ class IteratorTestCase(unittest.TestCase):
@tools.disable_warnings
def test_iterator_list_comprehension_protected(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Iterator([_j * 3 for _j in range(5)])
@@ -1347,7 +1480,8 @@ class IteratorTestCase(unittest.TestCase):
def test_iterator_decorator(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
@factory.iterator
def one():
@@ -1359,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):
@@ -1374,12 +1540,9 @@ class BetterFakeModelManager(object):
instance.id = 2
return instance, True
- def values_list(self, *args, **kwargs):
+ def using(self, db):
return self
- def order_by(self, *args, **kwargs):
- return [1]
-
class BetterFakeModel(object):
@classmethod
@@ -1397,7 +1560,8 @@ class BetterFakeModel(object):
class DjangoModelFactoryTestCase(unittest.TestCase):
def test_simple(self):
class FakeModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = FakeModel
+ class Meta:
+ model = FakeModel
obj = FakeModelFactory(one=1)
self.assertEqual(1, obj.one)
@@ -1411,8 +1575,9 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
objects = BetterFakeModelManager({'x': 1}, prev)
class MyFakeModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = MyFakeModel
- FACTORY_DJANGO_GET_OR_CREATE = ('x',)
+ class Meta:
+ model = MyFakeModel
+ django_get_or_create = ('x',)
x = 1
y = 4
z = 6
@@ -1432,8 +1597,9 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
objects = BetterFakeModelManager({'x': 1, 'y': 2, 'z': 3}, prev)
class MyFakeModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = MyFakeModel
- FACTORY_DJANGO_GET_OR_CREATE = ('x', 'y', 'z')
+ class Meta:
+ model = MyFakeModel
+ django_get_or_create = ('x', 'y', 'z')
x = 1
y = 4
z = 6
@@ -1453,8 +1619,9 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
objects = BetterFakeModelManager({'x': 1}, prev)
class MyFakeModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = MyFakeModel
- FACTORY_DJANGO_GET_OR_CREATE = ('x',)
+ class Meta:
+ model = MyFakeModel
+ django_get_or_create = ('x',)
x = 1
y = 4
z = 6
@@ -1474,8 +1641,9 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
objects = BetterFakeModelManager({'x': 1, 'y': 2, 'z': 3}, prev)
class MyFakeModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = MyFakeModel
- FACTORY_DJANGO_GET_OR_CREATE = ('x', 'y', 'z')
+ class Meta:
+ model = MyFakeModel
+ django_get_or_create = ('x', 'y', 'z')
x = 1
y = 4
z = 6
@@ -1489,37 +1657,40 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
def test_sequence(self):
class TestModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
a = factory.Sequence(lambda n: 'foo_%s' % n)
o1 = TestModelFactory()
o2 = TestModelFactory()
- self.assertEqual('foo_2', o1.a)
- self.assertEqual('foo_3', o2.a)
+ self.assertEqual('foo_0', o1.a)
+ self.assertEqual('foo_1', o2.a)
o3 = TestModelFactory.build()
o4 = TestModelFactory.build()
- self.assertEqual('foo_4', o3.a)
- self.assertEqual('foo_5', o4.a)
+ self.assertEqual('foo_2', o3.a)
+ self.assertEqual('foo_3', o4.a)
def test_no_get_or_create(self):
class TestModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = TestModel
+ class Meta:
+ model = TestModel
a = factory.Sequence(lambda n: 'foo_%s' % n)
o = TestModelFactory()
self.assertEqual(None, o._defaults)
- self.assertEqual('foo_2', o.a)
+ self.assertEqual('foo_0', o.a)
self.assertEqual(2, o.id)
def test_get_or_create(self):
class TestModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = TestModel
- FACTORY_DJANGO_GET_OR_CREATE = ('a', 'b')
+ class Meta:
+ model = TestModel
+ django_get_or_create = ('a', 'b')
a = factory.Sequence(lambda n: 'foo_%s' % n)
b = 2
@@ -1528,7 +1699,7 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
o = TestModelFactory()
self.assertEqual({'c': 3, 'd': 4}, o._defaults)
- self.assertEqual('foo_2', o.a)
+ self.assertEqual('foo_0', o.a)
self.assertEqual(2, o.b)
self.assertEqual(3, o.c)
self.assertEqual(4, o.d)
@@ -1537,8 +1708,9 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
def test_full_get_or_create(self):
"""Test a DjangoModelFactory with all fields in get_or_create."""
class TestModelFactory(factory.django.DjangoModelFactory):
- FACTORY_FOR = TestModel
- FACTORY_DJANGO_GET_OR_CREATE = ('a', 'b', 'c', 'd')
+ class Meta:
+ model = TestModel
+ django_get_or_create = ('a', 'b', 'c', 'd')
a = factory.Sequence(lambda n: 'foo_%s' % n)
b = 2
@@ -1547,7 +1719,7 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
o = TestModelFactory()
self.assertEqual({}, o._defaults)
- self.assertEqual('foo_2', o.a)
+ self.assertEqual('foo_0', o.a)
self.assertEqual(2, o.b)
self.assertEqual(3, o.c)
self.assertEqual(4, o.d)
@@ -1557,7 +1729,8 @@ class DjangoModelFactoryTestCase(unittest.TestCase):
class PostGenerationTestCase(unittest.TestCase):
def test_post_generation(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 1
@@ -1575,7 +1748,8 @@ class PostGenerationTestCase(unittest.TestCase):
def test_post_generation_hook(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 1
@@ -1596,7 +1770,8 @@ class PostGenerationTestCase(unittest.TestCase):
def test_post_generation_extraction(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 1
@@ -1621,7 +1796,8 @@ class PostGenerationTestCase(unittest.TestCase):
self.assertEqual(kwargs, {'foo': 13})
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
bar = factory.PostGeneration(my_lambda)
@@ -1640,7 +1816,8 @@ class PostGenerationTestCase(unittest.TestCase):
self.extra = (args, kwargs)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 3
two = 2
post_call = factory.PostGenerationMethodCall('call', one=1)
@@ -1664,15 +1841,17 @@ class PostGenerationTestCase(unittest.TestCase):
self.three = obj
class TestRelatedObjectFactory(factory.Factory):
- FACTORY_FOR = TestRelatedObject
+ class Meta:
+ model = TestRelatedObject
one = 1
two = factory.LazyAttribute(lambda o: o.one + 1)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 3
two = 2
- three = factory.RelatedFactory(TestRelatedObjectFactory, name='obj')
+ three = factory.RelatedFactory(TestRelatedObjectFactory, 'obj')
obj = TestObjectFactory.build()
# Normal fields
@@ -1709,12 +1888,14 @@ class PostGenerationTestCase(unittest.TestCase):
self.three = obj
class TestRelatedObjectFactory(factory.Factory):
- FACTORY_FOR = TestRelatedObject
+ class Meta:
+ model = TestRelatedObject
one = 1
two = factory.LazyAttribute(lambda o: o.one + 1)
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 3
two = 2
three = factory.RelatedFactory(TestRelatedObjectFactory)
@@ -1743,6 +1924,36 @@ class PostGenerationTestCase(unittest.TestCase):
self.assertEqual(3, related.one)
self.assertEqual(4, related.two)
+ def test_related_factory_selfattribute(self):
+ class TestRelatedObject(object):
+ def __init__(self, obj=None, one=None, two=None):
+ obj.related = self
+ self.one = one
+ self.two = two
+ self.three = obj
+
+ class TestRelatedObjectFactory(factory.Factory):
+ class Meta:
+ model = TestRelatedObject
+ one = 1
+ two = factory.LazyAttribute(lambda o: o.one + 1)
+
+ class TestObjectFactory(factory.Factory):
+ class Meta:
+ model = TestObject
+ one = 3
+ two = 2
+ three = factory.RelatedFactory(TestRelatedObjectFactory, 'obj',
+ two=factory.SelfAttribute('obj.two'),
+ )
+
+ obj = TestObjectFactory.build(two=4)
+ self.assertEqual(3, obj.one)
+ self.assertEqual(4, obj.two)
+ self.assertEqual(1, obj.related.one)
+ self.assertEqual(4, obj.related.two)
+
+
class RelatedFactoryExtractionTestCase(unittest.TestCase):
def setUp(self):
@@ -1755,10 +1966,12 @@ class RelatedFactoryExtractionTestCase(unittest.TestCase):
obj.related = subself
class TestRelatedObjectFactory(factory.Factory):
- FACTORY_FOR = TestRelatedObject
+ class Meta:
+ model = TestRelatedObject
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.RelatedFactory(TestRelatedObjectFactory, 'obj')
self.TestRelatedObject = TestRelatedObject
@@ -1802,10 +2015,28 @@ class CircularTestCase(unittest.TestCase):
self.assertIsNone(b.foo.bar.foo.bar)
+class SelfReferentialTests(unittest.TestCase):
+ def test_no_parent(self):
+ from .cyclic import self_ref
+
+ obj = self_ref.TreeElementFactory(parent=None)
+ self.assertIsNone(obj.parent)
+
+ def test_deep(self):
+ from .cyclic import self_ref
+
+ obj = self_ref.TreeElementFactory(parent__parent__parent__parent=None)
+ self.assertIsNotNone(obj.parent)
+ self.assertIsNotNone(obj.parent.parent)
+ self.assertIsNotNone(obj.parent.parent.parent)
+ self.assertIsNone(obj.parent.parent.parent.parent)
+
+
class DictTestCase(unittest.TestCase):
def test_empty_dict(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Dict({})
o = TestObjectFactory()
@@ -1813,7 +2044,8 @@ class DictTestCase(unittest.TestCase):
def test_naive_dict(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Dict({'a': 1})
o = TestObjectFactory()
@@ -1821,7 +2053,8 @@ class DictTestCase(unittest.TestCase):
def test_sequence_dict(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Dict({'a': factory.Sequence(lambda n: n + 2)})
o1 = TestObjectFactory()
@@ -1832,7 +2065,8 @@ class DictTestCase(unittest.TestCase):
def test_dict_override(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Dict({'a': 1})
o = TestObjectFactory(one__a=2)
@@ -1840,7 +2074,8 @@ class DictTestCase(unittest.TestCase):
def test_dict_extra_key(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.Dict({'a': 1})
o = TestObjectFactory(one__b=2)
@@ -1848,7 +2083,8 @@ class DictTestCase(unittest.TestCase):
def test_dict_merged_fields(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
two = 13
one = factory.Dict({
'one': 1,
@@ -1861,7 +2097,8 @@ class DictTestCase(unittest.TestCase):
def test_nested_dicts(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = 1
two = factory.Dict({
'one': 3,
@@ -1889,7 +2126,8 @@ class DictTestCase(unittest.TestCase):
class ListTestCase(unittest.TestCase):
def test_empty_list(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.List([])
o = TestObjectFactory()
@@ -1897,7 +2135,8 @@ class ListTestCase(unittest.TestCase):
def test_naive_list(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.List([1])
o = TestObjectFactory()
@@ -1905,7 +2144,8 @@ class ListTestCase(unittest.TestCase):
def test_sequence_list(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.List([factory.Sequence(lambda n: n + 2)])
o1 = TestObjectFactory()
@@ -1916,7 +2156,8 @@ class ListTestCase(unittest.TestCase):
def test_list_override(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.List([1])
o = TestObjectFactory(one__0=2)
@@ -1924,7 +2165,8 @@ class ListTestCase(unittest.TestCase):
def test_list_extra_key(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
one = factory.List([1])
o = TestObjectFactory(one__1=2)
@@ -1932,7 +2174,8 @@ class ListTestCase(unittest.TestCase):
def test_list_merged_fields(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
two = 13
one = factory.List([
1,
@@ -1945,7 +2188,9 @@ class ListTestCase(unittest.TestCase):
def test_nested_lists(self):
class TestObjectFactory(factory.Factory):
- FACTORY_FOR = TestObject
+ class Meta:
+ model = TestObject
+
one = 1
two = factory.List([
3,