8058 |
8058 |
|
8059 |
8059 |
data = formdef.data_class().select()[0].data
|
8060 |
8060 |
assert '1' not in data or (data['1'] is not None and data['1_display'] is not None)
|
|
8061 |
|
|
8062 |
|
|
8063 |
def test_autosave_never_overwrite(mocker, pub, settings):
|
|
8064 |
create_user(pub)
|
|
8065 |
|
|
8066 |
formdef = create_formdef()
|
|
8067 |
formdef.data_class().wipe()
|
|
8068 |
|
|
8069 |
formdef.fields = [
|
|
8070 |
fields.PageField(id='0', label='1st page', type='page'),
|
|
8071 |
fields.StringField(id='1', label='string1'),
|
|
8072 |
fields.PageField(id='2', label='2nd page', type='page'),
|
|
8073 |
fields.StringField(id='3', label='string2'),
|
|
8074 |
]
|
|
8075 |
formdef.store()
|
|
8076 |
|
|
8077 |
app = get_app(pub)
|
|
8078 |
login(app, username='foo', password='foo')
|
|
8079 |
|
|
8080 |
resp = app.get('/test/')
|
|
8081 |
resp.form.set('f1', '1')
|
|
8082 |
# go to the second page
|
|
8083 |
resp = resp.form.submit('submit')
|
|
8084 |
resp.form.set('f3', '1')
|
|
8085 |
# autosave wrong data
|
|
8086 |
autosave_data = dict(resp.form.submit_fields())
|
|
8087 |
autosave_data['f3'] = 'wtf!'
|
|
8088 |
resp_autosave = app.post('/test/autosave', params=autosave_data)
|
|
8089 |
assert resp_autosave.json == {'result': 'success'}
|
|
8090 |
# check the draft is fucked
|
|
8091 |
data = formdef.data_class().select()[0].data
|
|
8092 |
assert data['3'] == 'wtf!'
|
|
8093 |
# now finish submitting
|
|
8094 |
resp = resp.form.submit('submit') # -> validation page
|
|
8095 |
# autosave wrong data
|
|
8096 |
# _ajax_form_token is just a form_token, so take the current one to
|
|
8097 |
# simulate a rogue autosave from the second page
|
|
8098 |
autosave_data['_ajax_form_token'] = resp.form['_form_id'].value
|
|
8099 |
resp_autosave = app.post('/test/autosave', params=autosave_data)
|
|
8100 |
assert resp_autosave.json == {'result': 'success'}
|
|
8101 |
data = formdef.data_class().select()[0].data
|
|
8102 |
assert data['3'] == 'wtf!'
|
|
8103 |
# validate
|
|
8104 |
resp = resp.form.submit('submit') # -> submit
|
|
8105 |
|
|
8106 |
# great everything is still fine in the end
|
|
8107 |
assert formdef.data_class().select()[0].data == {'1': '1', '3': '1'}
|