diff --git a/setup.py b/setup.py index 64d93a9e..38c77fe8 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ def load_module(module_name, script_file): except: pass -test_requirements = ['coverage', 'flake8', 'mongomock', 'nose', 'rednose'] +test_requirements = ['coverage', 'mongomock', 'nose', 'rednose'] setup( name='flask-mongoengine', diff --git a/tests/test_forms.py b/tests/test_forms.py index 8690859d..8950f0c5 100644 --- a/tests/test_forms.py +++ b/tests/test_forms.py @@ -243,7 +243,9 @@ class Dog(db.Document): class DogOwner(db.Document): dog = db.ReferenceField(Dog) - DogOwnerForm = model_form(DogOwner) + DogOwnerForm = model_form(DogOwner, field_args={ + 'dog': { 'allow_blank': True } + }) dog = Dog(name="fido") dog.save() @@ -254,6 +256,15 @@ class DogOwner(db.Document): self.assertEqual(wtforms.widgets.Select, type(form.dog.widget)) self.assertFalse(form.dog.widget.multiple) + # Validate the options - should contain a dog (selected) and a + # blank option there should be an extra blank option. + choices = list(form.dog) + self.assertEqual(len(choices), 2) + self.assertFalse(choices[0].checked) + self.assertEqual(choices[0].data, '__None') + self.assertTrue(choices[1].checked) + self.assertEqual(choices[1].data, dog.pk) + # Validate selecting one item form = DogOwnerForm(MultiDict({ 'dog': dog.id, @@ -276,7 +287,9 @@ class Dog(db.Document): class DogOwner(db.Document): dogs = db.ListField(db.ReferenceField(Dog)) - DogOwnerForm = model_form(DogOwner) + DogOwnerForm = model_form(DogOwner, field_args={ + 'dogs': { 'allow_blank': True } + }) dogs = [Dog(name="fido"), Dog(name="rex")] for dog in dogs: @@ -288,11 +301,16 @@ class DogOwner(db.Document): self.assertEqual(wtforms.widgets.Select, type(form.dogs.widget)) self.assertTrue(form.dogs.widget.multiple) - # Validate if both dogs are selected + # Validate the options - both dogs should be selected and + # there should be an extra blank option. choices = list(form.dogs) - self.assertEqual(len(choices), 2) - self.assertTrue(choices[0].checked) + self.assertEqual(len(choices), 3) + self.assertFalse(choices[0].checked) + self.assertEqual(choices[0].data, '__None') self.assertTrue(choices[1].checked) + self.assertEqual(choices[1].data, dogs[0].pk) + self.assertTrue(choices[2].checked) + self.assertEqual(choices[2].data, dogs[1].pk) # Validate selecting two items form = DogOwnerForm(MultiDict({ @@ -302,7 +320,7 @@ class DogOwner(db.Document): # Validate selecting none actually empties the list form = DogOwnerForm(MultiDict({ - 'dogs': [], + 'dogs': '__None', }), dogs=dogs) self.assertEqual(form.dogs.data, None)