Projet

Général

Profil

0001-api-include-URL-for-files-in-block-fields-50993.patch

Frédéric Péters, 03 août 2022 00:18

Télécharger (3,53 ko)

Voir les différences:

Subject: [PATCH] api: include URL for files in block fields (#50993)

 tests/form_pages/test_block.py | 14 +++++++++++---
 wcs/fields.py                  |  7 +++++--
 2 files changed, 16 insertions(+), 5 deletions(-)
tests/form_pages/test_block.py
14 14
from wcs.workflows import Workflow
15 15

  
16 16
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
17
from .test_all import create_user
17
from .test_all import create_user, create_user_and_admin
18 18

  
19 19

  
20 20
def pytest_generate_tests(metafunc):
......
1090 1090
    block.name = 'foobar'
1091 1091
    block.fields = [
1092 1092
        fields.StringField(id='123', required=True, label='Test', type='string'),
1093
        fields.FileField(id='234', required=True, label='Test2', type='file'),
1093
        fields.FileField(id='234', required=True, label='Test2', type='file', varname='test2'),
1094 1094
    ]
1095 1095
    block.store()
1096 1096

  
......
1098 1098
    formdef.name = 'form title'
1099 1099
    formdef.fields = [
1100 1100
        fields.PageField(id='0', label='1st page', type='page'),
1101
        fields.BlockField(id='1', label='test', type='block:foobar', max_items=3),
1101
        fields.BlockField(id='1', label='test', type='block:foobar', max_items=3, varname='block'),
1102 1102
        fields.PageField(id='2', label='2nd page', type='page'),
1103 1103
    ]
1104 1104
    formdef.store()
1105
    formdef.data_class().wipe()
1105 1106

  
1106 1107
    app = get_app(pub)
1107 1108
    resp = app.get(formdef.get_url())
......
1138 1139
    assert '>foo2<' in resp
1139 1140
    assert 'test2.txt' in resp
1140 1141

  
1142
    # check they appear in API
1143
    create_user_and_admin(pub)
1144
    app = login(get_app(pub), username='admin', password='admin')
1145
    resp = app.get(formdef.get_api_url() + 'list?full=on')
1146
    assert app.get(resp.json[0]['fields']['block_raw'][0]['test2']['url']).body == b'foobar1'
1147
    assert app.get(resp.json[0]['fields']['block_raw'][1]['test2']['url']).body == b'foobar2'
1148

  
1141 1149

  
1142 1150
@pytest.mark.parametrize('removed_line', [0, 1, 2])
1143 1151
def test_block_repeated_remove_line(pub, removed_line):
wcs/fields.py
1677 1677
    def get_json_value(self, value, formdata=None, include_file_content=True, **kwargs):
1678 1678
        out = value.get_json_value(include_file_content=include_file_content)
1679 1679
        if formdata:
1680
            out['url'] = self.get_download_url(formdata, **kwargs)
1680
            out['url'] = self.get_download_url(formdata, file_value=value, **kwargs)
1681 1681
        out['field_id'] = self.id
1682 1682
        return out
1683 1683

  
......
3856 3856
        for subvalue_data in value.get('data'):
3857 3857
            result.append(
3858 3858
                FormData.get_json_data_dict(
3859
                    subvalue_data, self.block.fields, include_files=kwargs.get('include_file_content')
3859
                    subvalue_data,
3860
                    self.block.fields,
3861
                    formdata=kwargs.get('formdata'),
3862
                    include_files=kwargs.get('include_file_content'),
3860 3863
                )
3861 3864
            )
3862 3865
        return result
3863
-