From 5843ae19b5f33a6f9c3ec93d84222a3cdfb9e36d Mon Sep 17 00:00:00 2001 From: sirex Date: Thu, 19 May 2011 15:41:21 +0300 Subject: [PATCH] Fixes https://github.com/sorl/django-mockups/issues/7 --- mockups/base.py | 3 ++- mockups/generators.py | 3 ++- mockups/tests/mockups_test/tests.py | 12 ++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/mockups/base.py b/mockups/base.py index b568797..a502b66 100644 --- a/mockups/base.py +++ b/mockups/base.py @@ -100,7 +100,8 @@ def __init__(self, model, constraints=None, follow_fk=None, ``generate_fk``: A boolean which indicates if related models should also be created with random values. The *follow_fk* parameter will - be ignored if *generate_fk* is set to ``True``. + be ignored if *generate_fk* is set to ``True`` or foreign field is + unique. ``follow_m2m``: A tuple containing minium and maximum of model instances that are assigned to ``ManyToManyField``. No new diff --git a/mockups/generators.py b/mockups/generators.py index 7ce6a2a..ae37625 100644 --- a/mockups/generators.py +++ b/mockups/generators.py @@ -526,7 +526,8 @@ def get_generator(self, field, *args, **kwargs): class ForeignKeyFieldGenerator(FieldGenerator): def get_generator(self, field, generate_fk=None, follow_fk=None, **kwargs): # if generate_fk is set, follow_fk is ignored. - if field.name in generate_fk: + # also generate fk if field is unique to ensure uniqueness. + if field.name in generate_fk or self.field.unique: mockup = get_mockup( field.rel.to, follow_fk=follow_fk.get_deep_links(field.name), diff --git a/mockups/tests/mockups_test/tests.py b/mockups/tests/mockups_test/tests.py index 26b886c..017ebf1 100644 --- a/mockups/tests/mockups_test/tests.py +++ b/mockups/tests/mockups_test/tests.py @@ -145,15 +145,15 @@ def test_follow_only_some_foreignkeys(self): self.assertEqual(obj.related, related) self.assertEqual(obj.limitedfk, None) - def test_follow_fk_for_o2o(self): + def test_unique_fk_for_o2o(self): # OneToOneField is the same as a ForeignKey with unique=True - filler = Mockup(O2OModel, follow_fk=True) + filler = Mockup(O2OModel) - simple = SimpleModel.objects.create() - obj = filler.create()[0] - self.assertEqual(obj.o2o, simple) + all_o2o = set() + for obj in filler.create(10): + all_o2o.add(obj.o2o) - self.assertRaises(CreateInstanceError, filler.create) + self.assertEqual(set(SimpleModel.objects.all()), all_o2o) def test_generate_fk_for_o2o(self): # OneToOneField is the same as a ForeignKey with unique=True