Projet

Général

Profil

0003-toulouse-maelis-pass-get-direct-debit-order-paramete.patch

Nicolas Roche, 21 décembre 2022 14:49

Télécharger (9,12 ko)

Voir les différences:

Subject: [PATCH 3/3] toulouse-maelis: pass get-direct-debit order parameters
 in QS (#72563)

 functests/toulouse_maelis/test_invoice.py     |  4 ++--
 .../toulouse_maelis/invoice_schemas.py        | 22 -------------------
 passerelle/contrib/toulouse_maelis/models.py  | 21 +++++++++++++-----
 tests/test_toulouse_maelis.py                 | 15 ++++++++-----
 4 files changed, 26 insertions(+), 36 deletions(-)
functests/toulouse_maelis/test_invoice.py
20 20
        'bank/firstName': 'John Ross',
21 21
    }
22 22
    resp = requests.post(url, json=payload)
23 23
    resp.raise_for_status()
24 24
    res = resp.json()
25 25
    assert res['data'] == 'ok'
26 26

  
27 27
    url = conn + '/get-rl1-direct-debit-order?NameID=%s' % create_data['name_id']
28
    payload = {
28
    params = {
29 29
        'codeRegie': '1',
30 30
        'dateRef': '2023-01-01',
31 31
    }
32
    resp = requests.post(url, json=payload)
32
    resp = requests.get(url, params=params)
33 33
    resp.raise_for_status()
34 34
    res = resp.json()
35 35
    res['data']['numPerson'] = 'N/A'
36 36
    assert diff(res['data'], 'test_get_rl1_direct_debit_order.json')
passerelle/contrib/toulouse_maelis/invoice_schemas.py
69 69
        'codeRegie': {
70 70
            'description': 'Code de la régie',
71 71
            'type': 'string',
72 72
        },
73 73
    },
74 74
    'additionalProperties': False,
75 75
    'unflatten': True,
76 76
}
77

  
78

  
79
GET_DIRECT_DEBIT_ORDER_SCHEMA = {
80
    '$schema': 'http://json-schema.org/draft-04/schema#',
81
    'title': 'Get direct debit order',
82
    'description': "Lecture des informations relatives à l'autorisation de prélèvement en cours à la date de référence",
83
    'type': 'object',
84
    'required': ['codeRegie', 'dateRef'],
85
    'properties': {
86
        'codeRegie': {
87
            'description': 'Code de la régie',
88
            'type': 'string',
89
        },
90
        'dateRef': {
91
            'description': 'Date de référence ',
92
            'type': 'string',
93
            'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
94
        },
95
    },
96
    'additionalProperties': False,
97
    'unflatten': True,
98
}
passerelle/contrib/toulouse_maelis/models.py
1564 1564
        self.call('Invoice', 'addDirectDebitOrder', dossierNumber=family_id, **post_data)
1565 1565
        return {'data': 'ok'}
1566 1566

  
1567 1567
    @endpoint(
1568 1568
        display_category='Facture',
1569 1569
        description="Lecture des informations relatives à l'autorisation de prélèvement en cours à la date de référence",
1570 1570
        name='get-rl1-direct-debit-order',
1571 1571
        perm='can_access',
1572
        parameters={'NameID': {'description': 'Publik NameID'}},
1573
        post={
1574
            'request_body': {'schema': {'application/json': invoice_schemas.GET_DIRECT_DEBIT_ORDER_SCHEMA}}
1572
        parameters={
1573
            'NameID': {'description': 'Publik NameID'},
1574
            'codeRegie': {'description': 'Code de la régie'},
1575
            'dateRef': {
1576
                'description': 'Date de référence',
1577
                'type': 'date',
1578
            },
1575 1579
        },
1576 1580
    )
1577
    def get_rl1_direct_debit_order(self, request, NameID, post_data):
1581
    def get_rl1_direct_debit_order(self, request, NameID, codeRegie, dateRef):
1578 1582
        family_id = self.get_link(NameID).family_id
1579 1583
        family = self.get_family_raw(family_id)
1580 1584

  
1581
        post_data['numPerson'] = family['RL1']['num']
1582
        response = self.call('Invoice', 'getDirectDebitOrder', dossierNumber=family_id, **post_data)
1585
        payload = {
1586
            'dossierNumber': family_id,
1587
            'numPerson': family['RL1']['num'],
1588
            'codeRegie': codeRegie,
1589
            'dateRef': dateRef,
1590
        }
1591
        response = self.call('Invoice', 'getDirectDebitOrder', **payload)
1583 1592
        data = serialize_object(response)
1584 1593
        return {'data': data}
1585 1594

  
1586 1595

  
1587 1596
class Link(models.Model):
1588 1597
    resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE)
1589 1598
    name_id = models.CharField(blank=False, max_length=256)
1590 1599
    family_id = models.CharField(blank=False, max_length=128)
tests/test_toulouse_maelis.py
8 8
# This program is distributed in the hope that it will be useful,
9 9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10 10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 11
# GNU Affero General Public License for more details.
12 12
#
13 13
# You should have received a copy of the GNU Affero General Public License
14 14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15 15

  
16
import datetime
16 17
import logging
17 18
import os
18 19
from unittest import mock
19 20

  
20 21
import pytest
21 22
import responses
22 23
from requests.exceptions import ConnectionError
23 24
from zeep import Settings
......
3268 3269
        resp.json['err_desc']
3269 3270
        == "indicatorList/0/code key value 'plop' do not belong to 'ChildIndicator' required referential"
3270 3271
    )
3271 3272

  
3272 3273

  
3273 3274
def test_add_rl1_direct_debit_order(family_service, invoice_service, con, app):
3274 3275
    def request_check(request):
3275 3276
        assert request.dossierNumber == 1312
3277
        assert request.bank['dateStart'] == datetime.datetime(2023, 1, 1, 0, 0)
3276 3278

  
3277 3279
    family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
3278 3280
    invoice_service.add_soap_response(
3279 3281
        'addDirectDebitOrder',
3280 3282
        get_xml_file('R_add_direct_debit_order.xml'),
3281 3283
        request_check=request_check,
3282 3284
    )
3283 3285
    url = get_endpoint('add-rl1-direct-debit-order')
......
3354 3356
    )
3355 3357
    url = get_endpoint('get-rl1-direct-debit-order')
3356 3358
    params = {
3357 3359
        'codeRegie': '22',
3358 3360
        'dateRef': '2023-01-01',
3359 3361
    }
3360 3362

  
3361 3363
    Link.objects.create(resource=con, family_id='1312', name_id='local')
3362
    resp = app.post_json(url + '?NameID=local', params=params)
3364
    resp = app.get(url + '?NameID=local', params=params)
3365

  
3363 3366
    assert resp.json['err'] == 0
3364 3367
    assert resp.json['data'] == {
3365 3368
        'bankBIC': 'BDFEFR2T',
3366 3369
        'bankIBAN': 'FR7630001007941234567890185',
3367 3370
        'bankRUM': 'xxx',
3368 3371
        'dateStart': '2023-01-01T00:00:00+01:00',
3369 3372
        'bankAddress': '75049 PARIS cedex 01',
3370 3373
        'civility': 'x',
......
3375 3378

  
3376 3379
def test_get_rl1_direct_debit_order_parameter_error(con, app):
3377 3380
    url = get_endpoint('get-rl1-direct-debit-order')
3378 3381
    params = {
3379 3382
        'codeRegie': '22',
3380 3383
        'dateRef': 'plop',
3381 3384
    }
3382 3385

  
3383
    resp = app.post_json(url + '?NameID=local', params=params, status=400)
3386
    resp = app.get(url + '?NameID=local', params=params, status=400)
3384 3387
    assert resp.json['err'] == 1
3385
    assert resp.json['err_class'] == 'passerelle.utils.jsonresponse.APIError'
3386
    assert resp.json['err_desc'] == "dateRef: 'plop' does not match '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'"
3388
    assert resp.json['err_class'] == 'passerelle.views.InvalidParameterValue'
3389
    assert resp.json['err_desc'] == 'invalid value for parameter "dateRef (YYYY-MM-DD expected)"'
3387 3390

  
3388 3391

  
3389 3392
def test_get_rl1_direct_debit_order_not_linked_error(con, app):
3390 3393
    url = get_endpoint('get-rl1-direct-debit-order')
3391 3394
    params = {
3392 3395
        'codeRegie': '22',
3393 3396
        'dateRef': '2023-01-01',
3394 3397
    }
3395 3398

  
3396
    resp = app.post_json(url + '?NameID=local', params=params)
3399
    resp = app.get(url + '?NameID=local', params=params)
3397 3400
    assert resp.json['err'] == 'not-linked'
3398 3401
    assert resp.json['err_desc'] == 'User not linked to family'
3399 3402

  
3400 3403

  
3401 3404
def test_get_rl1_direct_debit_order_soap_error(family_service, invoice_service, con, app):
3402 3405
    family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
3403 3406
    invoice_service.add_soap_response(
3404 3407
        'getDirectDebitOrder', get_xml_file('R_direct_debit_order_soap_error.xml'), status=500
3405 3408
    )
3406 3409
    url = get_endpoint('get-rl1-direct-debit-order')
3407 3410
    params = {
3408 3411
        'codeRegie': '12345',
3409 3412
        'dateRef': '2023-01-01',
3410 3413
    }
3411 3414

  
3412 3415
    Link.objects.create(resource=con, family_id='1312', name_id='local')
3413
    resp = app.post_json(url + '?NameID=local', params=params)
3416
    resp = app.get(url + '?NameID=local', params=params)
3414 3417
    assert resp.json['err'] == 'Invoice-getDirectDebitOrder-soap:Server'
3415 3418
    assert resp.json['err_desc'] == "E520 : La REGIE CS [{0}] n''existe pas dans la base Maelis"
3416
-