Projet

Général

Profil

0001-ics-add-formdata-digest-to-ics-export-33152.patch

Nicolas Roche, 18 mai 2020 09:52

Télécharger (4,26 ko)

Voir les différences:

Subject: [PATCH] ics: add formdata digest to ics export (#33152)

 tests/test_api.py            | 9 +++++++++
 wcs/backoffice/management.py | 7 ++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)
tests/test_api.py
2361 2361
    formdef = FormDef()
2362 2362
    formdef.url_name = 'test'
2363 2363
    formdef.name = 'testé'
2364 2364
    formdef.workflow_roles = {'_receiver': role.id}
2365 2365
    formdef.fields = [
2366 2366
        fields.StringField(id='0', label='foobar', varname='foobar'),
2367 2367
        fields.StringField(id='1', label='foobar2', varname='foobar2'),
2368 2368
        ]
2369
    formdef.digest_template = 'plöp {{ form_var_foobar }} plÔp'
2369 2370
    formdef.store()
2370 2371

  
2371 2372
    data_class = formdef.data_class()
2372 2373
    data_class.wipe()
2373 2374

  
2374 2375
    date = datetime.datetime(2014, 1, 20, 12, 00)
2375 2376
    for i in range(30):
2376 2377
        formdata = data_class()
......
2424 2425
    # check that description contains form name, display id, workflow status,
2425 2426
    # backoffice url and attached user
2426 2427
    pattern = re.compile(u'DESCRIPTION:testé \| 1-\d+ \| New', re.MULTILINE)
2427 2428
    m = pattern.findall(resp.text)
2428 2429
    assert len(m) == 10
2429 2430
    assert resp.text.count('Jean Darmette') == 10
2430 2431
    assert resp.text.count('DTSTART') == 10
2431 2432

  
2433
    # check formdata digest summary and description contains the formdata digest
2434
    pattern = re.compile(
2435
        r'SUMMARY:testé #1-\d+ - plöp \d{4}-\d{2}-\d{2} \d{2}:\d{2} plÔp',
2436
        re.MULTILINE)
2437
    m = pattern.findall(resp.text)
2438
    assert len(m) == 10
2439
    assert resp.text.count(r'plöp') == 20
2440

  
2432 2441
    # check with a filter
2433 2442
    resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar?filter=done', user=local_user))
2434 2443
    assert resp.text.count('BEGIN:VEVENT') == 20
2435 2444
    pattern = re.compile(u'DESCRIPTION:testé \| 1-\d+ \| Finished', re.MULTILINE)
2436 2445
    m = pattern.findall(resp.text)
2437 2446
    assert len(m) == 20
2438 2447
    assert resp.text.count('Jean Darmette') == 20
2439 2448

  
wcs/backoffice/management.py
2198 2198
                    except ValueError:
2199 2199
                        continue
2200 2200

  
2201 2201
                    vevent = vobject.newFromBehavior('vevent')
2202 2202
                    vevent.add('uid').value = '%s-%s-%s' % (
2203 2203
                            get_request().get_server().lower(),
2204 2204
                            formdef.url_name,
2205 2205
                            formdata.id)
2206
                    vevent.add('summary').value = force_text(formdata.get_display_name(), charset)
2206
                    summary = force_text(formdata.get_display_name(), charset)
2207
                    if formdata.digest:
2208
                        summary += ' - %s' % force_text(formdata.digest, charset)
2209
                    vevent.add('summary').value = summary
2207 2210
                    vevent.add('dtstart').value = dtstart
2208 2211
                    if dtend:
2209 2212
                            vevent.add('dtend').value = dtend
2210 2213
                    vevent.dtstart.value_param = 'DATE'
2211 2214
                    backoffice_url = formdata.get_url(backoffice=True)
2212 2215
                    vevent.add('url').value = backoffice_url
2213 2216
                    form_name = force_text(formdef.name, charset)
2214 2217
                    status_name = force_text(formdata.get_status_label(), charset)
2215 2218
                    description = '%s | %s | %s\n'  % (form_name, formdata.get_display_id(), status_name)
2219
                    if formdata.digest:
2220
                        description += '%s\n' % force_text(formdata.digest, charset)
2216 2221
                    description += backoffice_url
2217 2222
                    # TODO: improve performance by loading all users in one
2218 2223
                    # single query before the loop
2219 2224
                    if formdata.user:
2220 2225
                        description += '\n%s' % force_text(formdata.user.get_display_name(), charset)
2221 2226
                    vevent.add('description').value = description
2222 2227
                    cal.add(vevent)
2223 2228

  
2224
-