diff --git a/tests/form_pages/test_file_field.py b/tests/form_pages/test_file_field.py index 9be4a6a61..ef01a99ee 100644 --- a/tests/form_pages/test_file_field.py +++ b/tests/form_pages/test_file_field.py @@ -396,3 +396,26 @@ def test_form_file_field_with_wrong_value(pub): assert logged_error.summary == 'Failed to set value on field "file"' assert logged_error.exception_class == 'AttributeError' assert logged_error.exception_message == "'str' object has no attribute 'time'" + + +def test_form_file_field_prefill(pub): + FormDef.wipe() + formdef = FormDef() + formdef.name = 'test' + formdef.fields = [ + fields.FileField( + id='0', + label='file', + prefill={'type': 'string', 'value': '{{ "test"|qrcode }}'}, + ) + ] + formdef.store() + + resp = get_app(pub).get('/test/') + assert resp.form['f0$token'] + assert resp.click('qrcode.png').content_type == 'image/png' + resp = resp.form.submit('submit') # -> validation + resp = resp.form.submit('submit') # -> submit + formdata = formdef.data_class().select()[0] + assert formdata.data['0'].base_filename == 'qrcode.png' + assert formdata.data['0'].get_content().startswith(b'\x89PNG') diff --git a/wcs/fields.py b/wcs/fields.py index 9bc9a20ff..6ab5d7e63 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -1672,6 +1672,9 @@ class FileField(WidgetField): def get_view_short_value(self, value, max_len=30, **kwargs): return self.get_view_value(value, include_image_thumbnail=False, max_len=max_len, **kwargs) + def get_prefill_value(self, user=None, force_string=True): + return super().get_prefill_value(user=user, force_string=False) + def get_download_query_string(self, **kwargs): if kwargs.get('file_value'): return 'hash=%s' % kwargs.get('file_value').file_digest()