import form
import field
import validator

def test_basic():
    f = form.form('basic',
        [field.line('id', 'id',
                    validators=(validator.minsize(5), validator.id())),
         field.line('name', 'name'),
         field.line('email', 'email', mandatory=False,
                    validators=(validator.email(),)),
         field.password('password', 'password',
                        validators=(validator.minsize(5),)),
         field.radio('sex', 'sex', values=(('m', 'male'), ('f', 'female'))),
         field.text('message', 'message'),
    ])

    html, errors = f.render()
    assert not errors
    assert '<form action="."' in html
    assert '<input type="text" name="id"' in html
    assert '<input type="radio" name="sex"' in html
    assert '<input type="submit"' in html

    data1 = {
        'basic': 'submit',
        'id': 'johnny',
        'name': 'Johnny deBris',
        'email': 'johnny@johnnydebris.net',
        'password': 'foobar',
        'sex': 'm',
        'message': 'Hello there!',
    }
    html, errors = f.render(data1)
    assert not errors

    data2 = {
        'basic': 'submit',
        'id': 'johnny',
        'name': 'Johnny deBris',
        'email': '',
        'password': '',
        'sex': 'm',
        'message': 'Look ma, no password!',
    }
    print html
    html, errors = f.render(data2)
    assert errors
    print [(f.id, e) for (f, e) in errors]
    assert len(errors) == 1
    assert errors[0][0].id == 'password'
    assert errors[0][1] == 'field is mandatory'

