misc: make sure draft formdata id is saved in session (#86277) #1348
|
@ -857,3 +857,25 @@ def test_draft_store_page_id_when_no_page_and_no_confirmation(pub):
|
|||
assert formdef.data_class().count() == 1
|
||||
formdata = formdef.data_class().select()[0]
|
||||
assert formdata.status == 'wf-new'
|
||||
|
||||
|
||||
def test_draft_error_then_autosave(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.enable_tracking_codes = True
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page'),
|
||||
fields.StringField(id='1', label='string 1'),
|
||||
fields.PageField(id='2', label='2nd page'),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
app = get_app(pub)
|
||||
resp = app.get('/test/')
|
||||
resp = resp.form.submit('submit') # error
|
||||
assert formdef.data_class().count() == 1 # server roundtrip -> draft
|
||||
|
||||
resp.form['f1'] = 'test'
|
||||
app.post('/test/autosave', params=resp.form.submit_fields())
|
||||
assert formdef.data_class().count() == 1 # make sure same draft got reused
|
||||
assert formdef.data_class().select()[0].data['1'] == 'test'
|
||||
|
|
|
@ -1372,6 +1372,9 @@ class FormPage(Directory, TempfileDirectoryMixin, FormTemplateMixin):
|
|||
# a new ConditionsVars will get added to the substitution
|
||||
# variables.
|
||||
form_data = copy.copy(session.get_by_magictoken(magictoken, {}))
|
||||
if form_data:
|
||||
# keep new copy in session
|
||||
session.add_magictoken(magictoken, form_data)
|
||||
|
||||
try:
|
||||
with get_publisher().substitutions.temporary_feed(transient_formdata, force_mode='lazy'):
|
||||
data = self.formdef.get_data(form, raise_on_error=True)
|
||||
|
|
Loading…
Reference in New Issue
Comme on faisait une copie, au moment du save_draft(),
le dictionnaire enregistré n'était pas celui avec l'info draft_formdata_id :/