0003-toulouse-maelis-pass-get-direct-debit-order-paramete.patch
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 |
- |