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 |
16 |
import logging
|
17 |
17 |
import os
|
18 |
18 |
from unittest import mock
|
19 |
19 |
|
20 |
20 |
import pytest
|
|
21 |
import responses
|
21 |
22 |
from requests.exceptions import ConnectionError
|
22 |
23 |
from zeep import Settings
|
23 |
24 |
|
24 |
25 |
from passerelle.contrib.toulouse_maelis.models import Link, Referential, ToulouseMaelis
|
25 |
26 |
from passerelle.utils.jsonresponse import APIError
|
26 |
27 |
from passerelle.utils.soap import SOAPError
|
27 |
28 |
from tests.utils import FakedResponse, ResponsesSoap, generic_endpoint_url, setup_access_rights
|
28 |
29 |
|
... | ... | |
44 |
45 |
|
45 |
46 |
|
46 |
47 |
def get_endpoint(name):
|
47 |
48 |
url = generic_endpoint_url('toulouse-maelis', name)
|
48 |
49 |
assert url == '/toulouse-maelis/test/%s' % name
|
49 |
50 |
return url
|
50 |
51 |
|
51 |
52 |
|
|
53 |
@pytest.fixture
|
|
54 |
def requests_mock():
|
|
55 |
return responses.RequestsMock()
|
|
56 |
|
|
57 |
|
52 |
58 |
@pytest.fixture()
|
53 |
|
def family_service():
|
54 |
|
with ResponsesSoap(
|
|
59 |
def family_service(requests_mock):
|
|
60 |
responses_soap = ResponsesSoap(
|
55 |
61 |
wsdl_url='https://example.org/FamilyService?wsdl',
|
56 |
62 |
wsdl_content=get_xml_file('FamilyService.wsdl'),
|
57 |
63 |
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
58 |
|
)() as mock:
|
59 |
|
yield mock
|
|
64 |
requests_mock=requests_mock,
|
|
65 |
)
|
|
66 |
with responses_soap() as soap_mock:
|
|
67 |
yield soap_mock
|
60 |
68 |
|
61 |
69 |
|
62 |
70 |
@pytest.fixture()
|
63 |
|
def activity_service():
|
64 |
|
with ResponsesSoap(
|
|
71 |
def activity_service(requests_mock):
|
|
72 |
responses_soap = ResponsesSoap(
|
65 |
73 |
wsdl_url='https://example.org/ActivityService?wsdl',
|
66 |
74 |
wsdl_content=get_xml_file('ActivityService.wsdl'),
|
67 |
75 |
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
68 |
|
)() as mock:
|
69 |
|
yield mock
|
|
76 |
requests_mock=requests_mock,
|
|
77 |
)
|
|
78 |
with responses_soap() as soap_mock:
|
|
79 |
yield soap_mock
|
70 |
80 |
|
71 |
81 |
|
72 |
82 |
@pytest.fixture()
|
73 |
|
def invoice_service():
|
74 |
|
with ResponsesSoap(
|
|
83 |
def invoice_service(requests_mock):
|
|
84 |
responses_soap = ResponsesSoap(
|
75 |
85 |
wsdl_url='https://example.org/InvoiceService?wsdl',
|
76 |
86 |
wsdl_content=get_xml_file('InvoiceService.wsdl'),
|
77 |
87 |
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
78 |
|
)() as mock:
|
79 |
|
yield mock
|
|
88 |
requests_mock=requests_mock,
|
|
89 |
)
|
|
90 |
with responses_soap() as soap_mock:
|
|
91 |
yield soap_mock
|
80 |
92 |
|
81 |
93 |
|
82 |
94 |
@pytest.fixture(scope='module')
|
83 |
95 |
def django_db_setup(django_db_setup, django_db_blocker):
|
84 |
96 |
with django_db_blocker.unblock():
|
85 |
97 |
con = setup_access_rights(
|
86 |
98 |
ToulouseMaelis.objects.get_or_create(
|
87 |
99 |
slug='test',
|
... | ... | |
91 |
103 |
)[0]
|
92 |
104 |
)
|
93 |
105 |
|
94 |
106 |
family_service = ResponsesSoap(
|
95 |
107 |
wsdl_url='https://example.org/FamilyService?wsdl',
|
96 |
108 |
wsdl_content=get_xml_file('FamilyService.wsdl'),
|
97 |
109 |
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
98 |
110 |
)
|
99 |
|
with family_service() as mock:
|
100 |
|
family_service.add_soap_response('readCategoryList', get_xml_file('R_read_category_list.xml'))
|
101 |
|
family_service.add_soap_response(
|
|
111 |
with family_service() as soap_mock:
|
|
112 |
soap_mock.add_soap_response('readCategoryList', get_xml_file('R_read_category_list.xml'))
|
|
113 |
soap_mock.add_soap_response(
|
102 |
114 |
'readChildIndicatorList', get_xml_file('R_read_child_indicator_list.xml')
|
103 |
115 |
)
|
104 |
|
family_service.add_soap_response('readCivilityList', get_xml_file('R_read_civility_list.xml'))
|
105 |
|
family_service.add_soap_response('readCountryList', get_xml_file('R_read_country_list.xml'))
|
106 |
|
family_service.add_soap_response('readCSPList', get_xml_file('R_read_csp_list.xml'))
|
107 |
|
family_service.add_soap_response('readDietCodeList', get_xml_file('R_read_dietcode_list.xml'))
|
108 |
|
family_service.add_soap_response('readOrganList', get_xml_file('R_read_organ_list.xml'))
|
109 |
|
family_service.add_soap_response('readPAIList', get_xml_file('R_read_pai_list.xml'))
|
110 |
|
family_service.add_soap_response('readQualityList', get_xml_file('R_read_quality_list.xml'))
|
111 |
|
family_service.add_soap_response('readQuotientList', get_xml_file('R_read_quotient_list.xml'))
|
112 |
|
family_service.add_soap_response(
|
113 |
|
'readRLIndicatorList', get_xml_file('R_read_rl_indicator_list.xml')
|
114 |
|
)
|
115 |
|
family_service.add_soap_response('readSituationList', get_xml_file('R_read_situation_list.xml'))
|
116 |
|
family_service.add_soap_response('readStreetList', get_xml_file('R_read_street_list.xml'))
|
117 |
|
family_service.add_soap_response('readVaccinList', get_xml_file('R_read_vaccin_list.xml'))
|
|
116 |
soap_mock.add_soap_response('readCivilityList', get_xml_file('R_read_civility_list.xml'))
|
|
117 |
soap_mock.add_soap_response('readCountryList', get_xml_file('R_read_country_list.xml'))
|
|
118 |
soap_mock.add_soap_response('readCSPList', get_xml_file('R_read_csp_list.xml'))
|
|
119 |
soap_mock.add_soap_response('readDietCodeList', get_xml_file('R_read_dietcode_list.xml'))
|
|
120 |
soap_mock.add_soap_response('readOrganList', get_xml_file('R_read_organ_list.xml'))
|
|
121 |
soap_mock.add_soap_response('readPAIList', get_xml_file('R_read_pai_list.xml'))
|
|
122 |
soap_mock.add_soap_response('readQualityList', get_xml_file('R_read_quality_list.xml'))
|
|
123 |
soap_mock.add_soap_response('readQuotientList', get_xml_file('R_read_quotient_list.xml'))
|
|
124 |
soap_mock.add_soap_response('readRLIndicatorList', get_xml_file('R_read_rl_indicator_list.xml'))
|
|
125 |
soap_mock.add_soap_response('readSituationList', get_xml_file('R_read_situation_list.xml'))
|
|
126 |
soap_mock.add_soap_response('readStreetList', get_xml_file('R_read_street_list.xml'))
|
|
127 |
soap_mock.add_soap_response('readVaccinList', get_xml_file('R_read_vaccin_list.xml'))
|
118 |
128 |
con.daily()
|
119 |
129 |
|
120 |
130 |
# reset change in zeep private interface to bypass clear_cache fixture
|
121 |
131 |
from zeep.cache import InMemoryCache
|
122 |
132 |
|
123 |
133 |
InMemoryCache._cache = {}
|
124 |
134 |
|
125 |
135 |
|
... | ... | |
3255 |
3265 |
resp = app.post_json(url + '?NameID=local&child_id=613880', params=params)
|
3256 |
3266 |
assert resp.json['err'] == 'wrong-key'
|
3257 |
3267 |
assert (
|
3258 |
3268 |
resp.json['err_desc']
|
3259 |
3269 |
== "indicatorList/0/code key value 'plop' do not belong to 'ChildIndicator' required referential"
|
3260 |
3270 |
)
|
3261 |
3271 |
|
3262 |
3272 |
|
3263 |
|
def test_add_direct_debit_order(invoice_service, con, app):
|
|
3273 |
def test_add_rl1_direct_debit_order(family_service, invoice_service, con, app):
|
3264 |
3274 |
def request_check(request):
|
3265 |
3275 |
assert request.dossierNumber == 1312
|
3266 |
3276 |
|
|
3277 |
family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
|
3267 |
3278 |
invoice_service.add_soap_response(
|
3268 |
|
'addDirectDebitOrder', get_xml_file('R_add_direct_debit_order.xml'), request_check=request_check
|
|
3279 |
'addDirectDebitOrder',
|
|
3280 |
get_xml_file('R_add_direct_debit_order.xml'),
|
|
3281 |
request_check=request_check,
|
3269 |
3282 |
)
|
3270 |
|
url = get_endpoint('add-direct-debit-order')
|
|
3283 |
url = get_endpoint('add-rl1-direct-debit-order')
|
3271 |
3284 |
params = {
|
3272 |
|
'numPerson': '613878',
|
3273 |
3285 |
'codeRegie': '22',
|
3274 |
3286 |
'bank/bankBIC': 'BDFEFR2T',
|
3275 |
3287 |
'bank/bankIBAN': 'FR7630001007941234567890185',
|
3276 |
3288 |
'bank/bankRUM': 'xxx',
|
3277 |
3289 |
'bank/dateStart': '2023-01-01',
|
3278 |
3290 |
'bank/bankAddress': '75049 PARIS cedex 01',
|
3279 |
3291 |
'bank/civility': 'x',
|
3280 |
3292 |
'bank/lastName': 'Ewing',
|
... | ... | |
3282 |
3294 |
}
|
3283 |
3295 |
|
3284 |
3296 |
Link.objects.create(resource=con, family_id='1312', name_id='local')
|
3285 |
3297 |
resp = app.post_json(url + '?NameID=local', params=params)
|
3286 |
3298 |
assert resp.json['err'] == 0
|
3287 |
3299 |
assert resp.json['data'] == 'ok'
|
3288 |
3300 |
|
3289 |
3301 |
|
3290 |
|
def test_add_direct_debit_order_not_linked_error(con, app):
|
3291 |
|
url = get_endpoint('add-direct-debit-order')
|
|
3302 |
def test_add_rl1_direct_debit_order_not_linked_error(con, app):
|
|
3303 |
url = get_endpoint('add-rl1-direct-debit-order')
|
3292 |
3304 |
params = {
|
3293 |
|
'numPerson': '613878',
|
3294 |
3305 |
'codeRegie': '22',
|
3295 |
3306 |
'bank/bankBIC': 'BDFEFR2T',
|
3296 |
3307 |
'bank/bankIBAN': 'FR7630001007941234567890185',
|
3297 |
3308 |
'bank/bankRUM': 'xxx',
|
3298 |
3309 |
'bank/dateStart': '2023-01-01',
|
3299 |
3310 |
'bank/bankAddress': '75049 PARIS cedex 01',
|
3300 |
3311 |
'bank/civility': 'x',
|
3301 |
3312 |
'bank/lastName': 'Ewing',
|
3302 |
3313 |
'bank/firstName': 'John Ross',
|
3303 |
3314 |
}
|
3304 |
3315 |
|
3305 |
3316 |
resp = app.post_json(url + '?NameID=local', params=params)
|
3306 |
3317 |
assert resp.json['err'] == 'not-linked'
|
3307 |
3318 |
assert resp.json['err_desc'] == 'User not linked to family'
|
3308 |
3319 |
|
3309 |
3320 |
|
3310 |
|
def test_add_direct_debit_order_soap_error(invoice_service, con, app):
|
|
3321 |
def test_add_rl1_direct_debit_order_soap_error(family_service, invoice_service, con, app):
|
|
3322 |
family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
|
3311 |
3323 |
invoice_service.add_soap_response(
|
3312 |
3324 |
'addDirectDebitOrder', get_xml_file('R_direct_debit_order_soap_error.xml'), status=500
|
3313 |
3325 |
)
|
3314 |
|
|
3315 |
|
url = get_endpoint('add-direct-debit-order')
|
|
3326 |
url = get_endpoint('add-rl1-direct-debit-order')
|
3316 |
3327 |
params = {
|
3317 |
|
'numPerson': '613878',
|
3318 |
3328 |
'codeRegie': '12345',
|
3319 |
3329 |
'bank/bankBIC': 'BDFEFR2T',
|
3320 |
3330 |
'bank/bankIBAN': 'FR7630001007941234567890185',
|
3321 |
3331 |
'bank/bankRUM': 'xxx',
|
3322 |
3332 |
'bank/dateStart': '2023-01-01',
|
3323 |
3333 |
'bank/bankAddress': '75049 PARIS cedex 01',
|
3324 |
3334 |
'bank/civility': 'x',
|
3325 |
3335 |
'bank/lastName': 'Ewing',
|
... | ... | |
3327 |
3337 |
}
|
3328 |
3338 |
|
3329 |
3339 |
Link.objects.create(resource=con, family_id='1312', name_id='local')
|
3330 |
3340 |
resp = app.post_json(url + '?NameID=local', params=params)
|
3331 |
3341 |
assert resp.json['err'] == 'Invoice-addDirectDebitOrder-soap:Server'
|
3332 |
3342 |
assert resp.json['err_desc'] == "E520 : La REGIE CS [{0}] n''existe pas dans la base Maelis"
|
3333 |
3343 |
|
3334 |
3344 |
|
3335 |
|
def test_get_direct_debit_order(invoice_service, con, app):
|
|
3345 |
def test_get_rl1_direct_debit_order(family_service, invoice_service, con, app):
|
3336 |
3346 |
def request_check(request):
|
3337 |
3347 |
assert request.dossierNumber == 1312
|
3338 |
3348 |
|
|
3349 |
family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
|
3339 |
3350 |
invoice_service.add_soap_response(
|
3340 |
|
'getDirectDebitOrder', get_xml_file('R_get_direct_debit_order.xml'), request_check=request_check
|
|
3351 |
'getDirectDebitOrder',
|
|
3352 |
get_xml_file('R_get_direct_debit_order.xml'),
|
|
3353 |
request_check=request_check,
|
3341 |
3354 |
)
|
3342 |
|
url = get_endpoint('get-direct-debit-order')
|
|
3355 |
url = get_endpoint('get-rl1-direct-debit-order')
|
3343 |
3356 |
params = {
|
3344 |
|
'numPerson': '613878',
|
3345 |
3357 |
'codeRegie': '22',
|
3346 |
3358 |
'dateRef': '2023-01-01',
|
3347 |
3359 |
}
|
3348 |
3360 |
|
3349 |
3361 |
Link.objects.create(resource=con, family_id='1312', name_id='local')
|
3350 |
3362 |
resp = app.post_json(url + '?NameID=local', params=params)
|
3351 |
3363 |
assert resp.json['err'] == 0
|
3352 |
3364 |
assert resp.json['data'] == {
|
... | ... | |
3356 |
3368 |
'dateStart': '2023-01-01T00:00:00+01:00',
|
3357 |
3369 |
'bankAddress': '75049 PARIS cedex 01',
|
3358 |
3370 |
'civility': 'x',
|
3359 |
3371 |
'lastName': 'Ewing',
|
3360 |
3372 |
'firstName': 'John Ross',
|
3361 |
3373 |
}
|
3362 |
3374 |
|
3363 |
3375 |
|
3364 |
|
def test_get_direct_debit_order_not_linked_error(con, app):
|
3365 |
|
url = get_endpoint('get-direct-debit-order')
|
|
3376 |
def test_get_rl1_direct_debit_order_parameter_error(con, app):
|
|
3377 |
url = get_endpoint('get-rl1-direct-debit-order')
|
|
3378 |
params = {
|
|
3379 |
'codeRegie': '22',
|
|
3380 |
'dateRef': 'plop',
|
|
3381 |
}
|
|
3382 |
|
|
3383 |
resp = app.post_json(url + '?NameID=local', params=params, status=400)
|
|
3384 |
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}$'"
|
|
3387 |
|
|
3388 |
|
|
3389 |
def test_get_rl1_direct_debit_order_not_linked_error(con, app):
|
|
3390 |
url = get_endpoint('get-rl1-direct-debit-order')
|
3366 |
3391 |
params = {
|
3367 |
|
'numPerson': '613878',
|
3368 |
3392 |
'codeRegie': '22',
|
3369 |
3393 |
'dateRef': '2023-01-01',
|
3370 |
3394 |
}
|
3371 |
3395 |
|
3372 |
3396 |
resp = app.post_json(url + '?NameID=local', params=params)
|
3373 |
3397 |
assert resp.json['err'] == 'not-linked'
|
3374 |
3398 |
assert resp.json['err_desc'] == 'User not linked to family'
|
3375 |
3399 |
|
3376 |
3400 |
|
3377 |
|
def test_get_direct_debit_order_soap_error(invoice_service, con, app):
|
|
3401 |
def test_get_rl1_direct_debit_order_soap_error(family_service, invoice_service, con, app):
|
|
3402 |
family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
|
3378 |
3403 |
invoice_service.add_soap_response(
|
3379 |
3404 |
'getDirectDebitOrder', get_xml_file('R_direct_debit_order_soap_error.xml'), status=500
|
3380 |
3405 |
)
|
3381 |
|
url = get_endpoint('get-direct-debit-order')
|
|
3406 |
url = get_endpoint('get-rl1-direct-debit-order')
|
3382 |
3407 |
params = {
|
3383 |
|
'numPerson': '613878',
|
3384 |
3408 |
'codeRegie': '12345',
|
3385 |
3409 |
'dateRef': '2023-01-01',
|
3386 |
3410 |
}
|
3387 |
3411 |
|
3388 |
3412 |
Link.objects.create(resource=con, family_id='1312', name_id='local')
|
3389 |
3413 |
resp = app.post_json(url + '?NameID=local', params=params)
|
3390 |
3414 |
assert resp.json['err'] == 'Invoice-getDirectDebitOrder-soap:Server'
|
3391 |
3415 |
assert resp.json['err_desc'] == "E520 : La REGIE CS [{0}] n''existe pas dans la base Maelis"
|
3392 |
|
-
|