Projet

Général

Profil

0001-gesbac-get-demand-response-by-gesbac-id-instead-of-f.patch

Serghei Mihai (congés, retour 15/05), 23 janvier 2020 14:58

Télécharger (5,73 ko)

Voir les différences:

Subject: [PATCH] gesbac: get demand response by gesbac id instead of form id
 (#39134)

 .../gesbac/migrations/0002_form_gesbac_id.py  | 21 +++++++++++++++++++
 passerelle/apps/gesbac/models.py              | 19 ++++++++++-------
 tests/test_gesbac.py                          |  6 ++++--
 3 files changed, 37 insertions(+), 9 deletions(-)
 create mode 100644 passerelle/apps/gesbac/migrations/0002_form_gesbac_id.py
passerelle/apps/gesbac/migrations/0002_form_gesbac_id.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.20 on 2020-01-23 13:39
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('gesbac', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='form',
17
            name='gesbac_id',
18
            field=models.CharField(default='', max_length=64),
19
            preserve_default=False,
20
        ),
21
    ]
passerelle/apps/gesbac/models.py
355 355
        form.demand_data = data
356 356
        form.save()
357 357
        self.add_job('send_demand', form_id=form.id)
358
        return {'data': {'filename': form.get_filename()}}
358
        return {'data': {'filename': form.get_filename(),
359
                         'gesbac_id': form.get_gesbac_id()}}
359 360

  
360 361
    @endpoint(name='get-response', perm='can_access',
361 362
              description=_('Get response'),
362 363
              parameters={
363
                  'form_id': {
364
                      'description': _('Form identifier'),
365
                      'example_value': '42-01'
364
                  'gesbac_id': {
365
                      'description': _('Gesbac demand identifier'),
366
                      'example_value': '420001'
366 367
                  }
367 368
              }
368 369
    )
369
    def get_response(self, request, form_id):
370
    def get_response(self, request, gesbac_id):
370 371
        try:
371 372
            response = self.form_set.filter(status='closed',
372
                                            form_id=form_id).latest()
373
                                            gesbac_id=gesbac_id).latest()
373 374
            return {'data': response.card_data}
374 375
        except Form.DoesNotExist:
375 376
            raise Http404('No response found')
......
385 386
class Form(models.Model):
386 387
    resource = models.ForeignKey(Gesbac, on_delete=models.CASCADE)
387 388
    form_id = models.CharField(max_length=64)
389
    gesbac_id = models.CharField(max_length=64)
388 390
    creation_datetime = models.DateTimeField(auto_now_add=True)
389 391
    filename = models.CharField(max_length=128, null=True)
390 392
    status = models.CharField(max_length=8, default='new',
......
397 399
        get_latest_by = 'creation_datetime'
398 400

  
399 401
    def get_gesbac_id(self):
400
        return self.form_id.replace('-', '%03d' % self.id)
402
        if not self.gesbac_id:
403
            self.gesbac_id = self.form_id.replace('-', '%03d' % self.id)
404
            self.save()
405
        return self.gesbac_id
401 406

  
402 407
    def get_filename(self):
403 408
        if not self.filename:
tests/test_gesbac.py
82 82
                                         timestamp.strftime('%y%m%d-%H%M%S'),
83 83
                                         form.get_gesbac_id())
84 84
    assert response.json['data']['filename'] == expected_filename
85
    assert response.json['data']['gesbac_id'] == form.gesbac_id
85 86
    assert resource.form_set.filter(status='new').count() == 1
86 87
    with sftpserver.serve_content({'output': {expected_filename: 'content'}}):
87 88
        resource.jobs()
......
96 97
                                         timestamp.strftime('%y%m%d-%H%M%S'),
97 98
                                         form.get_gesbac_id())
98 99
    assert response.json['data']['filename'] == expected_filename
100
    assert response.json['data']['gesbac_id'] == form.gesbac_id
99 101
    with sftpserver.serve_content({'output': {response.json['data']['filename']: 'content'}}):
100 102
        resource.jobs()
101 103
    assert resource.form_set.filter(status='sent').count() == 2
......
103 105

  
104 106
def test_get_demand_response(app, resource, freezer, sftpserver):
105 107
    response = app.get('/gesbac/test/get-response/',
106
                       params={'form_id': '42-43'}, status=404)
108
                       params={'gesbac_id': '42043'}, status=404)
107 109
    timestamp = now()
108 110
    payload = {
109 111
        'form_id': '42-43',
......
154 156
    assert response.card_data == ['CARTE', gesbac_id, '3', '2', '1234', '', '',
155 157
                                  '', '', '', '', '', force_text(comment, 'latin-1')]
156 158
    response = app.get('/gesbac/test/get-response/',
157
                       params={'form_id': '42-43'})
159
                       params={'gesbac_id': gesbac_id})
158 160
    assert response.json['err'] == 0
159 161
    assert response.json['data'] == ['CARTE', gesbac_id, '3', '2', '1234', '',
160 162
                                     '', '', '', '', '', '', force_text(comment, 'latin-1')]
161
-