0001-misc-thumbnail-param-when-serving-cards-file-fields-.patch
tests/api/test_carddata.py | ||
---|---|---|
1 |
import hashlib |
|
1 | 2 |
import os |
2 | 3 | |
3 | 4 |
import pytest |
5 |
from django.utils.encoding import force_bytes |
|
6 |
from webtest import Upload |
|
4 | 7 | |
5 | 8 |
from wcs import fields |
6 | 9 |
from wcs.admin.settings import UserFieldsFormDef |
... | ... | |
287 | 290 |
'var1': 'toto', |
288 | 291 |
'var2': 'nono', |
289 | 292 |
} |
293 | ||
294 | ||
295 |
def test_card_get_file(pub): |
|
296 |
pub.role_class.wipe() |
|
297 | ||
298 |
CardDef.wipe() |
|
299 |
carddef = CardDef() |
|
300 |
carddef.name = 'test' |
|
301 |
carddef.fields = [ |
|
302 |
fields.StringField(id='0', label='foobar', varname='foobar'), |
|
303 |
fields.FileField(id='3', label='foobar4', varname='file'), |
|
304 |
] |
|
305 |
carddef.store() |
|
306 | ||
307 |
upload = PicklableUpload('test.txt', 'text/plain', 'ascii') |
|
308 |
upload.receive([b'file content']) |
|
309 | ||
310 |
carddef.data_class().wipe() |
|
311 |
formdata = carddef.data_class()() |
|
312 |
formdata.data = {'0': 'blah', '3': upload} |
|
313 |
formdata.just_created() |
|
314 |
formdata.store() |
|
315 | ||
316 |
resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id)) |
|
317 |
file_url = resp.json['fields']['file']['url'] |
|
318 |
assert get_app(pub).get(file_url, status=403) |
|
319 | ||
320 |
resp = get_app(pub).get(sign_uri(file_url), status=200) |
|
321 |
assert resp.text == 'file content' |
|
322 | ||
323 |
upload = PicklableUpload('test.jpeg', 'image/jpeg') |
|
324 |
with open(os.path.join(os.path.dirname(__file__), '../image-with-gps-data.jpeg'), 'rb') as fd: |
|
325 |
upload.receive([fd.read()]) |
|
326 |
formdata.data = {'0': 'blah', '3': upload} |
|
327 |
formdata.store() |
|
328 | ||
329 |
resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id)) |
|
330 |
file_url = resp.json['fields']['file']['url'] |
|
331 |
assert upload.can_thumbnail() is True |
|
332 |
thumbs_dir = os.path.join(pub.app_dir, 'thumbs') |
|
333 |
thumb_filepath = os.path.join( |
|
334 |
thumbs_dir, hashlib.sha256(force_bytes(upload.get_fs_filename())).hexdigest() |
|
335 |
) |
|
336 |
assert os.path.exists(thumbs_dir) is False |
|
337 |
assert os.path.exists(thumb_filepath) is False |
|
338 |
get_app(pub).get(sign_uri(file_url + '&thumbnail=1'), status=200) |
|
339 |
assert os.path.exists(thumbs_dir) is True |
|
340 |
assert os.path.exists(thumb_filepath) is True |
|
341 |
# again, thumbs_dir already exists |
|
342 |
get_app(pub).get(sign_uri(file_url + '&thumbnail=1'), status=200) |
tests/api/test_carddef.py | ||
---|---|---|
882 | 882 |
assert resp.json['err_desc'] == 'unsufficient roles' |
883 | 883 | |
884 | 884 | |
885 |
def test_card_get_file(pub): |
|
886 |
pub.role_class.wipe() |
|
887 | ||
888 |
CardDef.wipe() |
|
889 |
carddef = CardDef() |
|
890 |
carddef.name = 'test' |
|
891 |
carddef.fields = [ |
|
892 |
fields.StringField(id='0', label='foobar', varname='foobar'), |
|
893 |
fields.FileField(id='3', label='foobar4', varname='file'), |
|
894 |
] |
|
895 |
carddef.store() |
|
896 | ||
897 |
upload = PicklableUpload('test.txt', 'text/plain', 'ascii') |
|
898 |
upload.receive([b'file content']) |
|
899 | ||
900 |
carddef.data_class().wipe() |
|
901 |
formdata = carddef.data_class()() |
|
902 |
formdata.data = {'0': 'blah', '3': upload} |
|
903 |
formdata.just_created() |
|
904 |
formdata.store() |
|
905 | ||
906 |
resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id)) |
|
907 |
file_url = resp.json['fields']['file']['url'] |
|
908 |
assert get_app(pub).get(file_url, status=403) |
|
909 | ||
910 |
resp = get_app(pub).get(sign_uri(file_url), status=200) |
|
911 |
assert resp.text == 'file content' |
|
912 | ||
913 | ||
914 | 885 |
def test_post_invalid_json(pub, local_user): |
915 | 886 |
resp = get_app(pub).post( |
916 | 887 |
'/api/cards/test/submit', params='not a json payload', content_type='application/json', status=400 |
wcs/forms/common.py | ||
---|---|---|
772 | 772 |
if not hasattr(field_data, 'file_digest'): |
773 | 773 |
continue |
774 | 774 |
if field_data.file_digest() == file_digest: |
775 |
return FileDirectory.serve_file(field_data) |
|
775 |
return FileDirectory.serve_file( |
|
776 |
field_data, |
|
777 |
thumbnail=bool(get_request().form.get('thumbnail') and field_data.can_thumbnail()), |
|
778 |
) |
|
776 | 779 |
elif get_request().form and get_request().form.get('f'): |
777 | 780 |
try: |
778 | 781 |
fn = get_request().form['f'] |
779 |
- |