Projet

Général

Profil

0001-portfolio-don-t-use-PicklableUpload-internals-39919.patch

Frédéric Péters, 16 février 2020 15:15

Télécharger (3,02 ko)

Voir les différences:

Subject: [PATCH] portfolio: don't use PicklableUpload internals (#39919)

 tests/conftest.py        |  2 +-
 tests/test_form_pages.py | 19 ++++++++++++++++++-
 wcs/portfolio.py         |  4 +---
 3 files changed, 20 insertions(+), 5 deletions(-)
tests/conftest.py
30 30

  
31 31
@pytest.fixture
32 32
def fargo_url(request, pub):
33
    return site_options(request, pub, 'options', 'fargo_url', 'http://fargo.example.net')
33
    return site_options(request, pub, 'options', 'fargo_url', 'http://fargo.example.net/')
34 34

  
35 35

  
36 36
@pytest.fixture
tests/test_form_pages.py
2789 2789
    assert 'fargo.js' not in resp.text
2790 2790
    assert 'use-file-from-fargo' not in resp.text
2791 2791

  
2792
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
2792
    app = get_app(pub)
2793
    login(app, username='foo', password='foo')
2794
    resp = app.get('/test/')
2793 2795
    assert 'f0$file' in resp.text
2794 2796
    assert 'fargo.js' in resp.text
2795 2797
    assert 'use-file-from-fargo' in resp.text
2796 2798

  
2799
    fargo_resp = app.get('/fargo/pick')  # display file picker
2800
    assert fargo_resp.location == 'http://fargo.example.net/pick?pick=http%3A//example.net/fargo/pick'
2801
    with mock.patch('wcs.portfolio.urlopen') as urlopen:
2802
        urlopen.side_effect = lambda *args: BytesIO(b'...')
2803
        fargo_resp = app.get('/fargo/pick?url=http://www.example.org/...')
2804
        assert 'window.top.document.fargo_set_token' in fargo_resp.text
2805
    resp.form['f0$file'] = None
2806
    resp.form['f0$token'] = re.findall(r'fargo_set_token\("(.*?)"', fargo_resp.text)[0]
2807
    resp = resp.form.submit('submit')
2808
    assert 'Check values then click submit.' in resp.text
2809
    resp = resp.form.submit('submit')
2810
    assert formdef.data_class().count() == 1
2811
    formdata = formdef.data_class().select()[0]
2812
    assert formdata.data['0'].get_content() == b'...'
2813

  
2797 2814
    file_field.allow_portfolio_picking = False
2798 2815
    formdef.store()
2799 2816

  
wcs/portfolio.py
134 134
            name = urllib.unquote(path[-1])
135 135
            from .qommon.form import PicklableUpload
136 136
            download = PicklableUpload(name, content_type='application/pdf')
137
            download.__setstate__({
138
                'data': document,
139
            })
137
            download.receive([document])
140 138
            tempfile = get_session().add_tempfile(download)
141 139
            return self.set_token(tempfile.get('token'), name)
142 140
        else:
143
-