def test_binary_field(conn):
    class Binary(Document):
        binary = BinaryField()

    BinaryForm = model_form(Binary)
    form = BinaryForm(MultiDict({'binary': '1'}))
    assert form.validate()
def test_model_select_field_using_model_form(conn):
    class Dog(Document):
        pass

    class DogOwner(Document):
        dog = ReferenceField(Dog)

    DogOwnerForm = model_form(DogOwner)

    dog = Dog()
    dog.save()

    form = DogOwnerForm(dog=dog)

    assert form.validate()
    assert wtforms.widgets.Select == type(form.dog.widget)
    assert not form.dog.widget.multiple
def test_modelselectfield_multiple_selected_elements_must_be_retained(conn):
    class Dog(Document):
        name = StringField()

        def __unicode__(self):
            return self.name

    class DogOwner(Document):
        dogs = ListField(ReferenceField(Dog))

    DogOwnerForm = model_form(DogOwner)

    fido = Dog(name="fido").save()
    Dog(name="rex").save()

    owner = DogOwner(dogs=[fido])
    form = DogOwnerForm(obj=owner)
    html = form.dogs()

    m = re.search("<option selected .+?>(.*?)</option>", html)
    assert m is not None
    assert "fido" == m.group(1)
def test_model_select_multiple_field(conn):
    class Dog(Document):
        name = StringField()

    class DogOwner(Document):
        dogs = ListField(ReferenceField(Dog))

    DogOwnerForm = model_form(DogOwner)

    dogs = [Dog(name="fido"), Dog(name="rex")]
    for dog in dogs:
        dog.save()

    form = DogOwnerForm(dogs=dogs)
    assert form.validate()

    assert wtforms.widgets.Select == type(form.dogs.widget)
    assert form.dogs.widget.multiple

    # Validate if both dogs are selected
    choices = list(form.dogs)
    assert len(choices) == 2
    assert choices[0].checked
    assert choices[1].checked