Projet

Général

Profil

0001-api-add-backoffice-agent-info-in-formdata-result-687.patch

Lauréline Guérin, 13 septembre 2022 11:02

Télécharger (4,63 ko)

Voir les différences:

Subject: [PATCH] api: add backoffice agent info in formdata result (#68753)

 tests/api/test_formdata.py   | 52 +++++++++++++++++++++++++++++++++++-
 wcs/backoffice/management.py | 10 ++++---
 wcs/formdata.py              |  9 +++++++
 3 files changed, 67 insertions(+), 4 deletions(-)
tests/api/test_formdata.py
206 206
    ]
207 207
    assert resp.json['workflow']['status']['name'] == 'New'
208 208
    assert resp.json['workflow']['real_status']['name'] == 'New'
209
    assert resp.json['submission']['channel'] == 'web'
209
    assert resp.json['submission'] == {'backoffice': False, 'channel': 'web'}
210 210
    assert resp.json['geolocations']['base']['lon'] == 10
211 211
    assert resp.json['geolocations']['base']['lat'] == -12
212 212

  
......
284 284
    }
285 285

  
286 286

  
287
def test_formdata_submission_fields(pub, local_user):
288
    agent = pub.user_class(name='agent')
289
    agent.store()
290

  
291
    pub.role_class.wipe()
292
    role = pub.role_class(name='test')
293
    role.id = '123'
294
    role.store()
295
    local_user.roles = [role.id]
296
    local_user.store()
297

  
298
    user_formdef = UserFieldsFormDef(pub)
299
    user_formdef.fields = [
300
        fields.StringField(id='3', label='test', type='string', varname='var1'),
301
        fields.StringField(id='9', label='noop', type='string', varname='var2'),
302
        fields.StringField(id='42', label='no varname', type='string'),
303
    ]
304
    user_formdef.store()
305
    local_user.form_data = {'3': 'toto', '9': 'nono'}
306
    local_user.store()
307

  
308
    FormDef.wipe()
309
    formdef = FormDef()
310
    formdef.name = 'test'
311
    formdef.workflow_roles = {'_receiver': role.id}
312
    formdef.store()
313

  
314
    formdef.data_class().wipe()
315
    formdata = formdef.data_class()()
316
    formdata.user_id = local_user.id
317
    formdata.submission_agent_id = agent.id
318
    formdata.just_created()
319
    formdata.store()
320

  
321
    resp = get_app(pub).get(sign_uri('/api/forms/test/list', user=local_user))
322
    assert 'submission' not in resp.json[0]
323
    resp = get_app(pub).get(sign_uri('/api/forms/test/list?full=on', user=local_user))
324
    assert resp.json[0]['submission'] == {
325
        'backoffice': False,
326
        'channel': 'web',
327
        'agent': {'id': agent.id, 'name': 'agent'},
328
    }
329
    resp = get_app(pub).get(sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user))
330
    assert resp.json['submission'] == {
331
        'backoffice': False,
332
        'channel': 'web',
333
        'agent': {'id': agent.id, 'name': 'agent'},
334
    }
335

  
336

  
287 337
def test_formdata_backoffice_fields(pub, local_user):
288 338
    test_formdata(pub, local_user)
289 339
    Workflow.wipe()
wcs/backoffice/management.py
4281 4281
        formdef = self.kwargs['formdef_class'].get(self.kwargs['formdef_id'])
4282 4282
        prefetched_users = None
4283 4283
        prefetched_roles = None
4284
        user_ids = list(
4285
            set(
4286
                [x.user_id for x in items if x.user_id]
4287
                + [x.submission_agent_id for x in items if x.submission_agent_id]
4288
            )
4289
        )
4284 4290
        prefetched_users = {
4285 4291
            str(x.id): x
4286
            for x in get_publisher().user_class.get_ids(
4287
                [x.user_id for x in items if x.user_id], ignore_errors=True
4288
            )
4292
            for x in get_publisher().user_class.get_ids(user_ids, ignore_errors=True)
4289 4293
            if x is not None
4290 4294
        }
4291 4295
        if include_roles:
wcs/formdata.py
1434 1434
            'backoffice': self.backoffice_submission,
1435 1435
            'channel': self.submission_channel or 'web',
1436 1436
        }
1437
        try:
1438
            if prefetched_users is not None:
1439
                agent = prefetched_users.get(str(self.submission_agent_id))
1440
            else:
1441
                agent = get_publisher().user_class.get(self.submission_agent_id)
1442
        except KeyError:
1443
            agent = None
1444
        if agent:
1445
            data['submission']['agent'] = agent.get_json_export_dict()
1437 1446
        parent = self.get_parent()
1438 1447
        if parent:
1439 1448
            data['submission']['parent'] = {
1440
-