diff --git a/tests/cyclic/self_ref.py b/tests/cyclic/self_ref.py index b0111b07..49a85ba3 100644 --- a/tests/cyclic/self_ref.py +++ b/tests/cyclic/self_ref.py @@ -17,3 +17,41 @@ class Meta: name = factory.Sequence(lambda n: "tree%s" % n) parent = factory.SubFactory('tests.cyclic.self_ref.TreeElementFactory') + + +class TreeElementRelatedFactory(factory.Factory): + class Meta: + model = TreeElement + + name = factory.Sequence(lambda n: "tree%s" % n) + parent = factory.RelatedFactory('tests.cyclic.self_ref.TreeElementFactory') + + +class TreeElementTraitFactory(factory.Factory): + class Meta: + model = TreeElement + + name = factory.Sequence(lambda n: "tree%s" % n) + parent = None + + class Params: + with_parent = factory.Trait( + parent=factory.SubFactory( + 'tests.cyclic.self_ref.TreeElementFactory', parent=None + ) + ) + + +class TreeElementTraitRelatedFactory(factory.Factory): + class Meta: + model = TreeElement + + name = factory.Sequence(lambda n: "tree%s" % n) + parent = None + + class Params: + with_parent = factory.Trait( + parent=factory.RelatedFactory( + 'tests.cyclic.self_ref.TreeElementFactory', parent=None + ) + ) diff --git a/tests/test_using.py b/tests/test_using.py index 07dfbb47..c691480c 100644 --- a/tests/test_using.py +++ b/tests/test_using.py @@ -2771,6 +2771,36 @@ def test_deep(self): self.assertIsNotNone(obj.parent.parent.parent) self.assertIsNone(obj.parent.parent.parent.parent) + def test_no_parent_related(self): + from .cyclic import self_ref + + obj = self_ref.TreeElementRelatedFactory(parent__parent__parent=None) + self.assertIsNone(obj.parent.parent.parent) + + def test_without_trait(self): + from .cyclic import self_ref + + obj = self_ref.TreeElementTraitFactory() + self.assertIsNone(obj.parent) + + def test_with_trait(self): + from .cyclic import self_ref + + obj = self_ref.TreeElementTraitFactory(with_parent=True) + self.assertIsNotNone(obj.parent) + + def test_without_related_trait(self): + from .cyclic import self_ref + + obj = self_ref.TreeElementTraitRelatedFactory() + self.assertIsNone(obj.parent) + + def test_with_related_trait(self): + from .cyclic import self_ref + + obj = self_ref.TreeElementTraitRelatedFactory(with_parent=True) + self.assertIsNotNone(obj.parent) + class DictTestCase(unittest.TestCase): def test_empty_dict(self):