191 lines
8.3 KiB
Python
191 lines
8.3 KiB
Python
import copy
|
|
import json
|
|
import os
|
|
from decimal import Decimal
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.urls import reverse
|
|
|
|
from passerelle.base.models import AccessRight, ApiUser
|
|
from passerelle.contrib.solis_apa import integration
|
|
from passerelle.contrib.solis_apa.models import SolisAPA
|
|
|
|
TEST_BASE_DIR = os.path.join(os.path.dirname(__file__), 'data', 'solis_apa')
|
|
|
|
|
|
def json_get_data(filename):
|
|
with open(os.path.join(TEST_BASE_DIR, filename)) as fd:
|
|
return json.load(fd)
|
|
|
|
|
|
@pytest.fixture
|
|
def setup(db):
|
|
api = ApiUser.objects.create(username='all', keytype='', key='')
|
|
solis = SolisAPA.objects.create(base_url='https://whateever.com/rec/', slug='test')
|
|
obj_type = ContentType.objects.get_for_model(solis)
|
|
AccessRight.objects.create(
|
|
codename='can_access', apiuser=api, resource_type=obj_type, resource_pk=solis.pk
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def url():
|
|
def get_url(name):
|
|
return reverse('solis-apa-%s' % name, kwargs={'slug': 'test'})
|
|
|
|
return get_url
|
|
|
|
|
|
@pytest.fixture(
|
|
params=[
|
|
json_get_data('premiere_demande_apa_domicile.json'),
|
|
json_get_data('premiere_demande_apa_etablissement.json'),
|
|
json_get_data('premiere_demande_apa_etablissement_papier.json'),
|
|
]
|
|
)
|
|
def formdata(request):
|
|
return request.param
|
|
|
|
|
|
@mock.patch('passerelle.utils.Request.post')
|
|
def test_suivi_error(mocked_post, setup, app):
|
|
mocked_post.return_value = mock.Mock(status_code=500)
|
|
|
|
resp = app.get(reverse('solis-apa-suivi', kwargs={'slug': 'test', 'suivi_type': 'visite'}))
|
|
assert resp.json['err_desc'] == 'suivi visite ws: error code 500'
|
|
assert resp.json['err'] == 1
|
|
|
|
|
|
@mock.patch('passerelle.utils.Request.post')
|
|
def test_instegration_demande_apa_domicile(mocked_post, setup, app, url):
|
|
fake_response = (
|
|
'{"ImportIdResults":{"Items":[{"key":"indexDossier","value":359043},'
|
|
'{"key":"indexBeneficiaire","value":458238},{"key":"indexDemande","value":221155}]}}'
|
|
)
|
|
|
|
mocked_post.return_value = mock.Mock(
|
|
status_code=200, content=fake_response, json=lambda: json.loads(fake_response)
|
|
)
|
|
|
|
params = json_get_data('premiere_demande_apa_domicile.json')
|
|
resp = app.post_json(url('integration'), params=params, status=200)
|
|
assert resp.json['data']['indexDossier'] == 359043
|
|
assert resp.json['data']['indexBeneficiaire'] == 458238
|
|
assert resp.json['data']['indexDemande'] == 221155
|
|
|
|
params['fields']['anneerefrevenu'] = None
|
|
resp = app.post_json(url('integration'), params=params, status=200)
|
|
assert resp.json['data']['indexDossier'] == 359043
|
|
assert resp.json['data']['indexBeneficiaire'] == 458238
|
|
assert resp.json['data']['indexDemande'] == 221155
|
|
|
|
|
|
@mock.patch('passerelle.utils.Request.post')
|
|
def test_integration_demande_apa_etablissement(mocked_post, setup, app, url):
|
|
fake_response = (
|
|
'{"ImportIdResults":{"Items":[{"key":"indexDossier","value":359043},'
|
|
'{"key":"indexBeneficiaire","value":458238},{"key":"indexDemande","value":221155}]}}'
|
|
)
|
|
|
|
mocked_post.return_value = mock.Mock(
|
|
status_code=200, content=fake_response, json=lambda: json.loads(fake_response)
|
|
)
|
|
|
|
resp = app.post_json(
|
|
url('integration'), params=json_get_data('premiere_demande_apa_etablissement.json'), status=200
|
|
)
|
|
|
|
assert resp.json['data']['indexDossier'] == 359043
|
|
assert resp.json['data']['indexBeneficiaire'] == 458238
|
|
assert resp.json['data']['indexDemande'] == 221155
|
|
|
|
|
|
@mock.patch('passerelle.utils.Request.post')
|
|
def test_integration_error(mocked_post, setup, app, url):
|
|
mocked_post.return_value = mock.Mock(status_code=500)
|
|
resp = app.post_json(url('integration'), params=json_get_data('premiere_demande_apa_etablissement.json'))
|
|
assert resp.json['err_desc'] == 'integration ws: error code 500'
|
|
assert resp.json['err'] == 1
|
|
|
|
|
|
def test_get_conjoint(setup, url, formdata):
|
|
data = integration.build_message(formdata)
|
|
if formdata['display_id'] == '25-3':
|
|
assert data['Conjoint']['indexIndividu'] == '458107'
|
|
assert data['Conjoint']['bParticipeRevenus'] is False
|
|
assert data['Conjoint']['dateNaissance'] == '1930-06-11'
|
|
assert data['Conjoint']['nom'] == 'MCBEAL'
|
|
assert data['Conjoint']['prenom'] == 'ALLY'
|
|
assert data['Conjoint']['sexe'] == 'F'
|
|
assert data['Conjoint']['situationFamiliale'] == 2
|
|
assert data['RevenusImposition']['anneeReference'] == 2015
|
|
assert Decimal(data['RevenusImposition']['revenuReference']) == Decimal(30000.0)
|
|
elif formdata['display_id'] == '32-1':
|
|
assert 'Conjoint' not in data
|
|
assert data['RevenusImposition']['anneeReference'] == 2015
|
|
assert Decimal(data['RevenusImposition']['revenuReference']) == Decimal(32000.0)
|
|
else:
|
|
assert 'Conjoint' not in data
|
|
assert data['RevenusImposition']['anneeReference'] == 2016
|
|
assert Decimal(data['RevenusImposition']['revenuReference']) == Decimal(1500)
|
|
|
|
|
|
def test_recipient_address(setup, formdata):
|
|
data = integration.build_message(formdata)
|
|
if formdata['display_id'] == '25-3':
|
|
# received values
|
|
assert formdata['workflow']['data']['adresse_var_code_commune'] == '14000 CAEN'
|
|
assert formdata['workflow']['data']['adresse_var_code_commune_raw'] == 'commune-14-118'
|
|
assert formdata['workflow']['data']['adresse_var_code_lieu'] == 'AVENUE DU PARC BELLEVUE'
|
|
assert formdata['workflow']['data']['adresse_var_code_lieu_raw'] == '0867'
|
|
assert formdata['workflow']['data']['adresse_var_num_lieu'] == '1'
|
|
assert formdata['fields']['code_commune'] == '14000 CAEN'
|
|
assert formdata['fields']['code_commune_raw'] == 'commune-14-118'
|
|
# built values
|
|
assert data['Beneficiaire']['Adresse']['codeCommune'] == 118
|
|
assert data['Beneficiaire']['Adresse']['codeDepartement'] == 14
|
|
assert data['Beneficiaire']['Adresse']['codeLieu'] == '0867'
|
|
assert data['Beneficiaire']['Adresse']['numeroLieu'] == '1'
|
|
elif formdata['display_id'] == '32-1':
|
|
# received values
|
|
assert formdata['workflow']['data']['adresse_var_code_commune'] == '14930 ETERVILLE'
|
|
assert formdata['workflow']['data']['adresse_var_code_commune_raw'] == 'commune-14-254'
|
|
assert formdata['workflow']['data']['adresse_var_code_lieu'] == 'RUE DU JARDIN DE LA FERME'
|
|
assert formdata['workflow']['data']['adresse_var_code_lieu_raw'] == 'Z001'
|
|
assert formdata['workflow']['data']['adresse_var_num_lieu'] == '1'
|
|
assert formdata['fields']['code_commune'] == '14930 ETERVILLE'
|
|
assert formdata['fields']['code_commune_raw'] == 'commune-14-254'
|
|
# built values
|
|
assert data['Beneficiaire']['Adresse']['codeCommune'] == 254
|
|
assert data['Beneficiaire']['Adresse']['codeDepartement'] == 14
|
|
assert data['Beneficiaire']['Adresse']['codeLieu'] == 'Z001'
|
|
assert data['Beneficiaire']['Adresse']['numeroLieu'] == '1'
|
|
else:
|
|
# received values
|
|
assert formdata['fields']['papier_code_commune'] == '33370 FARGUES ST HILAIRE'
|
|
assert formdata['fields']['papier_code_commune_raw'] == 'commune-33-165'
|
|
assert formdata['fields']['papier_code_lieu'] == 'ROUTE DE MAISON ROUGE'
|
|
assert formdata['fields']['papier_code_lieu_raw'] == '0001'
|
|
assert formdata['fields']['papier_excode_commune'] == '14150 OUISTREHAM'
|
|
assert formdata['fields']['papier_excode_commune_raw'] == 'commune-14-488'
|
|
assert formdata['fields']['papier_excode_lieu'] == 'RUE DU PETIT BONHEUR'
|
|
assert formdata['fields']['papier_excode_lieu_raw'] == '0730'
|
|
assert formdata['fields']['papier_exnum_lieu'] == '2'
|
|
assert formdata['fields']['papier_num_lieu'] == '20'
|
|
# built values
|
|
assert data['Beneficiaire']['Adresse']['codeCommune'] == 488
|
|
assert data['Beneficiaire']['Adresse']['codeDepartement'] == 14
|
|
assert data['Beneficiaire']['Adresse']['codeLieu'] == '0730'
|
|
assert data['Beneficiaire']['Adresse']['numeroLieu'] == '2'
|
|
|
|
|
|
def test_missing_field(setup, formdata):
|
|
data = integration.build_message(formdata)
|
|
assert 'lieuNaissance' in data['Beneficiaire']
|
|
partial_formdata = copy.deepcopy(formdata)
|
|
partial_formdata['fields'].pop('lieunbeneficiaire')
|
|
data = integration.build_message(partial_formdata)
|
|
assert 'lieuNaissance' not in data['Beneficiaire']
|