summaryrefslogtreecommitdiff
path: root/tests/test_base.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_base.py')
-rw-r--r--tests/test_base.py353
1 files changed, 51 insertions, 302 deletions
diff --git a/tests/test_base.py b/tests/test_base.py
index 68451f3..8da655e 100644
--- a/tests/test_base.py
+++ b/tests/test_base.py
@@ -21,8 +21,9 @@
# THE SOFTWARE.
import unittest
+import warnings
-from factory.base import BaseFactory, Factory, StubFactory, BUILD_STRATEGY, CREATE_STRATEGY, STUB_STRATEGY
+from factory import base
from factory import declarations
class TestObject(object):
@@ -52,174 +53,26 @@ class TestModel(FakeDjangoModel):
class SafetyTestCase(unittest.TestCase):
def testBaseFactory(self):
- self.assertRaises(RuntimeError, BaseFactory)
+ self.assertRaises(RuntimeError, base.BaseFactory)
class FactoryTestCase(unittest.TestCase):
- def testAttribute(self):
- class TestObjectFactory(Factory):
- one = 'one'
-
- test_object = TestObjectFactory.build()
- self.assertEqual(test_object.one, 'one')
-
- def testSequence(self):
- class TestObjectFactory(Factory):
- one = declarations.Sequence(lambda n: 'one' + n)
- two = declarations.Sequence(lambda n: 'two' + n)
-
- test_object0 = TestObjectFactory.build()
- self.assertEqual(test_object0.one, 'one0')
- self.assertEqual(test_object0.two, 'two0')
-
- test_object1 = TestObjectFactory.build()
- self.assertEqual(test_object1.one, 'one1')
- self.assertEqual(test_object1.two, 'two1')
-
- def testSequenceCustomBegin(self):
- class TestObjectFactory(Factory):
- @classmethod
- def _setup_next_sequence(cls):
- return 42
-
- one = declarations.Sequence(lambda n: 'one' + n)
- two = declarations.Sequence(lambda n: 'two' + n)
-
- test_object0 = TestObjectFactory.build()
- self.assertEqual('one42', test_object0.one)
- self.assertEqual('two42', test_object0.two)
-
- test_object1 = TestObjectFactory.build()
- self.assertEqual('one43', test_object1.one)
- self.assertEqual('two43', test_object1.two)
+ def testDisplay(self):
+ class TestObjectFactory(base.Factory):
+ FACTORY_FOR = FakeDjangoModel
- def testLazyAttribute(self):
- class TestObjectFactory(Factory):
- one = declarations.LazyAttribute(lambda a: 'abc' )
- two = declarations.LazyAttribute(lambda a: a.one + ' xyz')
-
- test_object = TestObjectFactory.build()
- self.assertEqual(test_object.one, 'abc')
- self.assertEqual(test_object.two, 'abc xyz')
+ self.assertIn('TestObjectFactory', str(TestObjectFactory))
+ self.assertIn('FakeDjangoModel', str(TestObjectFactory))
def testLazyAttributeNonExistentParam(self):
- class TestObjectFactory(Factory):
+ class TestObjectFactory(base.Factory):
one = declarations.LazyAttribute(lambda a: a.does_not_exist )
self.assertRaises(AttributeError, TestObjectFactory)
- def testLazyAttributeSequence(self):
- class TestObjectFactory(Factory):
- one = declarations.LazyAttributeSequence(lambda a, n: 'abc' + n)
- two = declarations.LazyAttributeSequence(lambda a, n: a.one + ' xyz' + n)
-
- test_object0 = TestObjectFactory.build()
- self.assertEqual(test_object0.one, 'abc0')
- self.assertEqual(test_object0.two, 'abc0 xyz0')
-
- test_object1 = TestObjectFactory.build()
- self.assertEqual(test_object1.one, 'abc1')
- self.assertEqual(test_object1.two, 'abc1 xyz1')
-
- def testLazyAttributeDecorator(self):
- class TestObjectFactory(Factory):
- @declarations.lazy_attribute
- def one(a):
- return 'one'
-
- test_object = TestObjectFactory.build()
- self.assertEqual(test_object.one, 'one')
-
- def testSelfAttribute(self):
- class TestObjectFactory(Factory):
- one = 'xx'
- two = declarations.SelfAttribute('one')
-
- test_object = TestObjectFactory.build(one=1)
- self.assertEqual(1, test_object.two)
-
- def testSequenceDecorator(self):
- class TestObjectFactory(Factory):
- @declarations.sequence
- def one(n):
- return 'one' + n
-
- test_object = TestObjectFactory.build()
- self.assertEqual(test_object.one, 'one0')
-
- def testLazyAttributeSequenceDecorator(self):
- class TestObjectFactory(Factory):
- @declarations.lazy_attribute_sequence
- def one(a, n):
- return 'one' + n
- @declarations.lazy_attribute_sequence
- def two(a, n):
- return a.one + ' two' + n
-
- test_object = TestObjectFactory.build()
- self.assertEqual(test_object.one, 'one0')
- self.assertEqual(test_object.two, 'one0 two0')
-
- def testBuildWithParameters(self):
- class TestObjectFactory(Factory):
- one = declarations.Sequence(lambda n: 'one' + n)
- two = declarations.Sequence(lambda n: 'two' + n)
-
- test_object0 = TestObjectFactory.build(three='three')
- self.assertEqual(test_object0.one, 'one0')
- self.assertEqual(test_object0.two, 'two0')
- self.assertEqual(test_object0.three, 'three')
-
- test_object1 = TestObjectFactory.build(one='other')
- self.assertEqual(test_object1.one, 'other')
- self.assertEqual(test_object1.two, 'two1')
-
- def testCreate(self):
- class TestModelFactory(Factory):
- one = 'one'
-
- test_model = TestModelFactory.create()
- self.assertEqual(test_model.one, 'one')
- self.assertTrue(test_model.id)
-
- def testInheritance(self):
- class TestObjectFactory(Factory):
- one = 'one'
- two = declarations.LazyAttribute(lambda a: a.one + ' two')
-
- class TestObjectFactory2(TestObjectFactory):
- FACTORY_FOR = TestObject
-
- three = 'three'
- four = declarations.LazyAttribute(lambda a: a.three + ' four')
-
- test_object = TestObjectFactory2.build()
- self.assertEqual(test_object.one, 'one')
- self.assertEqual(test_object.two, 'one two')
- self.assertEqual(test_object.three, 'three')
- self.assertEqual(test_object.four, 'three four')
-
- test_object_alt = TestObjectFactory.build()
- self.assertEqual(None, test_object_alt.three)
-
- def testInheritanceWithInheritedClass(self):
- class TestObjectFactory(Factory):
- one = 'one'
- two = declarations.LazyAttribute(lambda a: a.one + ' two')
-
- class TestFactory(TestObjectFactory):
- three = 'three'
- four = declarations.LazyAttribute(lambda a: a.three + ' four')
-
- test_object = TestFactory.build()
- self.assertEqual(test_object.one, 'one')
- self.assertEqual(test_object.two, 'one two')
- self.assertEqual(test_object.three, 'three')
- self.assertEqual(test_object.four, 'three four')
-
def testInheritanceWithSequence(self):
"""Tests that sequence IDs are shared between parent and son."""
- class TestObjectFactory(Factory):
+ class TestObjectFactory(base.Factory):
one = declarations.Sequence(lambda a: a)
class TestSubFactory(TestObjectFactory):
@@ -232,47 +85,17 @@ class FactoryTestCase(unittest.TestCase):
ones = set([x.one for x in (parent, alt_parent, sub, alt_sub)])
self.assertEqual(4, len(ones))
- def testDualInheritance(self):
- class TestObjectFactory(Factory):
- one = 'one'
-
- class TestOtherFactory(Factory):
- FACTORY_FOR = TestObject
- two = 'two'
- four = 'four'
-
- class TestFactory(TestObjectFactory, TestOtherFactory):
- three = 'three'
-
- obj = TestFactory.build(two=2)
- self.assertEqual('one', obj.one)
- self.assertEqual(2, obj.two)
- self.assertEqual('three', obj.three)
- self.assertEqual('four', obj.four)
-
- def testSetCreationFunction(self):
- def creation_function(class_to_create, **kwargs):
- return "This doesn't even return an instance of {0}".format(class_to_create.__name__)
-
- class TestModelFactory(Factory):
- pass
-
- TestModelFactory.set_creation_function(creation_function)
-
- test_object = TestModelFactory.create()
- self.assertEqual(test_object, "This doesn't even return an instance of TestModel")
-
class FactoryDefaultStrategyTestCase(unittest.TestCase):
def setUp(self):
- self.default_strategy = Factory.default_strategy
+ self.default_strategy = base.Factory.default_strategy
def tearDown(self):
- Factory.default_strategy = self.default_strategy
+ base.Factory.default_strategy = self.default_strategy
def testBuildStrategy(self):
- Factory.default_strategy = BUILD_STRATEGY
+ base.Factory.default_strategy = base.BUILD_STRATEGY
- class TestModelFactory(Factory):
+ class TestModelFactory(base.Factory):
one = 'one'
test_model = TestModelFactory()
@@ -282,106 +105,17 @@ class FactoryDefaultStrategyTestCase(unittest.TestCase):
def testCreateStrategy(self):
# Default default_strategy
- class TestModelFactory(Factory):
+ class TestModelFactory(base.Factory):
one = 'one'
test_model = TestModelFactory()
self.assertEqual(test_model.one, 'one')
self.assertTrue(test_model.id)
- def testSubFactory(self):
- class TestModel2(FakeDjangoModel):
- pass
-
- class TestModelFactory(Factory):
- FACTORY_FOR = TestModel
- one = 3
-
- class TestModel2Factory(Factory):
- FACTORY_FOR = TestModel2
- two = declarations.SubFactory(TestModelFactory, one=1)
-
- test_model = TestModel2Factory(two__one=4)
- self.assertEqual(4, test_model.two.one)
- self.assertEqual(1, test_model.id)
- self.assertEqual(1, test_model.two.id)
-
- def testSubFactoryWithLazyFields(self):
- class TestModel2(FakeDjangoModel):
- pass
-
- class TestModelFactory(Factory):
- FACTORY_FOR = TestModel
-
- class TestModel2Factory(Factory):
- FACTORY_FOR = TestModel2
- two = declarations.SubFactory(TestModelFactory,
- one=declarations.Sequence(lambda n: 'x%sx' % n),
- two=declarations.LazyAttribute(
- lambda o: '%s%s' % (o.one, o.one)))
-
- test_model = TestModel2Factory(one=42)
- self.assertEqual('x0x', test_model.two.one)
- self.assertEqual('x0xx0x', test_model.two.two)
-
- def testNestedSubFactory(self):
- """Test nested sub-factories."""
-
- class TestObject(object):
- def __init__(self, **kwargs):
- for k, v in kwargs.iteritems():
- setattr(self, k, v)
-
- class TestObjectFactory(Factory):
- FACTORY_FOR = TestObject
-
- class WrappingTestObjectFactory(Factory):
- FACTORY_FOR = TestObject
-
- wrapped = declarations.SubFactory(TestObjectFactory)
- wrapped_bis = declarations.SubFactory(TestObjectFactory, one=1)
-
- class OuterWrappingTestObjectFactory(Factory):
- FACTORY_FOR = TestObject
-
- wrap = declarations.SubFactory(WrappingTestObjectFactory, wrapped__two=2)
-
- outer = OuterWrappingTestObjectFactory.build()
- self.assertEqual(outer.wrap.wrapped.two, 2)
- self.assertEqual(outer.wrap.wrapped_bis.one, 1)
-
- def testNestedSubFactoryWithOverriddenSubFactories(self):
- """Test nested sub-factories, with attributes overridden with subfactories."""
-
- class TestObject(object):
- def __init__(self, **kwargs):
- for k, v in kwargs.iteritems():
- setattr(self, k, v)
-
- class TestObjectFactory(Factory):
- FACTORY_FOR = TestObject
- two = 'two'
-
- class WrappingTestObjectFactory(Factory):
- FACTORY_FOR = TestObject
-
- wrapped = declarations.SubFactory(TestObjectFactory)
- friend = declarations.LazyAttribute(lambda o: o.wrapped.two.four + 1)
-
- class OuterWrappingTestObjectFactory(Factory):
- FACTORY_FOR = TestObject
-
- wrap = declarations.SubFactory(WrappingTestObjectFactory,
- wrapped__two=declarations.SubFactory(TestObjectFactory, four=4))
-
- outer = OuterWrappingTestObjectFactory.build()
- self.assertEqual(outer.wrap.wrapped.two.four, 4)
- self.assertEqual(outer.wrap.friend, 5)
-
def testStubStrategy(self):
- Factory.default_strategy = STUB_STRATEGY
+ base.Factory.default_strategy = base.STUB_STRATEGY
- class TestModelFactory(Factory):
+ class TestModelFactory(base.Factory):
one = 'one'
test_model = TestModelFactory()
@@ -389,54 +123,69 @@ class FactoryDefaultStrategyTestCase(unittest.TestCase):
self.assertFalse(hasattr(test_model, 'id')) # We should have a plain old object
def testUnknownStrategy(self):
- Factory.default_strategy = 'unknown'
+ base.Factory.default_strategy = 'unknown'
- class TestModelFactory(Factory):
+ class TestModelFactory(base.Factory):
one = 'one'
- self.assertRaises(Factory.UnknownStrategy, TestModelFactory)
+ self.assertRaises(base.Factory.UnknownStrategy, TestModelFactory)
def testStubWithNonStubStrategy(self):
- class TestModelFactory(StubFactory):
+ class TestModelFactory(base.StubFactory):
one = 'one'
- TestModelFactory.default_strategy = CREATE_STRATEGY
+ TestModelFactory.default_strategy = base.CREATE_STRATEGY
- self.assertRaises(StubFactory.UnsupportedStrategy, TestModelFactory)
+ self.assertRaises(base.StubFactory.UnsupportedStrategy, TestModelFactory)
- TestModelFactory.default_strategy = BUILD_STRATEGY
- self.assertRaises(StubFactory.UnsupportedStrategy, TestModelFactory)
+ TestModelFactory.default_strategy = base.BUILD_STRATEGY
+ self.assertRaises(base.StubFactory.UnsupportedStrategy, TestModelFactory)
class FactoryCreationTestCase(unittest.TestCase):
def testFactoryFor(self):
- class TestFactory(Factory):
+ class TestFactory(base.Factory):
FACTORY_FOR = TestObject
self.assertTrue(isinstance(TestFactory.build(), TestObject))
def testAutomaticAssociatedClassDiscovery(self):
- class TestObjectFactory(Factory):
+ class TestObjectFactory(base.Factory):
pass
self.assertTrue(isinstance(TestObjectFactory.build(), TestObject))
+ def testDeprecationWarning(self):
+ """Make sure the 'auto-discovery' deprecation warning is issued."""
+
+ with warnings.catch_warnings(record=True) as w:
+ # Clear the warning registry.
+ if hasattr(base, '__warningregistry__'):
+ base.__warningregistry__.clear()
+
+ warnings.simplefilter('always')
+ class TestObjectFactory(base.Factory):
+ pass
+
+ self.assertEqual(1, len(w))
+ self.assertIn('deprecated', str(w[0].message))
+
def testStub(self):
- class TestFactory(StubFactory):
+ class TestFactory(base.StubFactory):
pass
- self.assertEqual(TestFactory.default_strategy, STUB_STRATEGY)
+ self.assertEqual(TestFactory.default_strategy, base.STUB_STRATEGY)
def testInheritanceWithStub(self):
- class TestObjectFactory(StubFactory):
+ class TestObjectFactory(base.StubFactory):
pass
class TestFactory(TestObjectFactory):
pass
- self.assertEqual(TestFactory.default_strategy, STUB_STRATEGY)
+ self.assertEqual(TestFactory.default_strategy, base.STUB_STRATEGY)
def testCustomCreation(self):
- class TestModelFactory(Factory):
+ class TestModelFactory(base.Factory):
@classmethod
def _prepare(cls, create, **kwargs):
kwargs['four'] = 4
@@ -456,18 +205,18 @@ class FactoryCreationTestCase(unittest.TestCase):
def testNoAssociatedClassWithAutodiscovery(self):
try:
- class TestFactory(Factory):
+ class TestFactory(base.Factory):
pass
self.fail()
- except Factory.AssociatedClassError as e:
+ except base.Factory.AssociatedClassError as e:
self.assertTrue('autodiscovery' in str(e))
def testNoAssociatedClassWithoutAutodiscovery(self):
try:
- class Test(Factory):
+ class Test(base.Factory):
pass
self.fail()
- except Factory.AssociatedClassError as e:
+ except base.Factory.AssociatedClassError as e:
self.assertTrue('autodiscovery' not in str(e))