0

I have forms:

class EntryForm(CsrfDissableForm):

    id = HiddenField()
    name = StringField(...)
    ...

class FooForm(FlaskForm):
    entries = FieldList(FormField(EntryForm))
    new_name = StringField(...)
    ...

In route:

...
    while len(form.entries) > 0:
        form_entry = form.entries.pop_entry()
        save_changes(form_entry)
    new_inst = form.new_name.data
    save_new(new_inst)
...

I was write some test (Flask-Test used). I save 'new_name' from post data to database and then edit this as 'name' (entry form):

def test_change_name(self):
    with self.client:
        self.client.post(url, data={'new_name': 'Foo'})
        foo = db.get_last_foo()
        self.assertEqual(foo.name, 'Foo')
        self.client.post(url, data={'entries': [{'id': foo.id, name: 'foo1'}]})
        foo = db.get_by_id(foo.id)
        self.assertEqual(foo.name, 'Foo')

I get error on this test:

TypeError: add_file() got an unexpected keyword argument 'id'.

How to correctly test a request from a form fieldlist? Can I to wrong in route?

pirr
  • 445
  • 1
  • 8
  • 15

1 Answers1

-1

You need to post the form values as they would be posted by your application. So, it would look something like data={"entries-0-id": foo.id, "entries-0-name": "foo1"}

You may also need to include a csrf or disable csrf in your testing.

Scott
  • 57
  • 4