atal: get status fom eAtal and Atal (#35181)

This commit is contained in:
Emmanuel Cazenave 2019-08-01 16:52:28 +02:00 committed by Thomas NOEL
parent 18b3a6bf5f
commit 40c759e6e6
5 changed files with 1254 additions and 0 deletions

View File

@ -157,6 +157,21 @@ class ATALConnector(BaseResource):
)
return process_response(demande_number)
@endpoint(
methods=['get'], perm='can_access', example_pattern='{demande_number}/',
pattern='^(?P<demande_number>\w+)/$', name='retrieve-details-demande',
parameters={
'demande_number': {
'description': _('Demande number'), 'example_value': 'DIT18050001'
}
}
)
def retrieve_details_demande(self, request, demande_number):
soap_res = self._soap_call(
wsdl='DemandeService', method='retrieveDetailsDemande',
demandeNumberParam=demande_number)
return {'data': helpers.serialize_object(soap_res)}
@endpoint(
methods=['get'], perm='can_access', example_pattern='{demande_number}/',
pattern='^(?P<demande_number>\w+)/$', name='retrieve-etat-travaux',
@ -172,6 +187,43 @@ class ATALConnector(BaseResource):
numero=demande_number)
return {'data': helpers.serialize_object(soap_res)}
@endpoint(
methods=['get'], perm='can_access', example_pattern='{demande_number}/',
pattern='^(?P<demande_number>\w+)/$', name='status',
parameters={
'demande_number': {
'description': _('Demande number'), 'example_value': 'DIT18050001'
}
}
)
def status(self, request, demande_number):
soap_res = self._soap_call(
wsdl='DemandeService', method='retrieveDetailsDemande',
demandeNumberParam=demande_number)
status = helpers.serialize_object(soap_res).get('etatDemande', {}).get('description')
if not status:
raise APIError('Could not get a status')
if status != 'PRISE EN COMPTE':
return {
'data': {
'status': status
}
}
soap_res = self._soap_call(
wsdl='DemandeService', method='retrieveEtatTravaux',
numero=demande_number
)
status = helpers.serialize_object(soap_res).get('libelle')
if not status:
raise APIError('Could not get a status')
return {
'data': {
'status': status
}
}
@endpoint(
perm='can_access',
post={

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,2 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:retrieveDetailsDemandeResponse xmlns:ns1="http://localhost/awa/services/DemandeService"><ns1:detailsDemandeRetrieved><codeDemande xmlns="http://demande.services.awa.aductis.com">13154</codeDemande><commentairesDestinataires xmlns="http://demande.services.awa.aductis.com"></commentairesDestinataires><demandeur xmlns="http://demande.services.awa.aductis.com"><SAutoriserChangementMdp xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><SAutoriserChangementRepondeur xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><SDesactiverRepondeurAuto xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><SFactif xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><SNotificationMail xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><activerRepondeurAuto xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</activerRepondeurAuto><allImputations xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><allSalles xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><allServicesDemandeur xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><allServicesExecutant xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><allServicesGestionnaires xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><allVehicules xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><autoriserChangementLanguage xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</autoriserChangementLanguage><autoriserChangementMdp xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</autoriserChangementMdp><autoriserChangementPreferenceRecap xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</autoriserChangementPreferenceRecap><autoriserChangementRepondeur xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</autoriserChangementRepondeur><config xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><dateDerniereVisite xmlns="http://utilisateur.dto.commun.awa.aductis.com">2019-07-25T09:28:47+02:00</dateDerniereVisite><displayChart xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><droits xmlns="http://utilisateur.dto.commun.awa.aductis.com" /><email xmlns="http://utilisateur.dto.commun.awa.aductis.com">jean.delgoleto@berger-levrault.com</email><emails xmlns="http://utilisateur.dto.commun.awa.aductis.com"><ns1:string>jean.delgoleto@berger-levrault.com</ns1:string></emails><enSession xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</enSession><factif xmlns="http://utilisateur.dto.commun.awa.aductis.com">true</factif><fax xmlns="http://utilisateur.dto.commun.awa.aductis.com"></fax><group xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</group><groupId xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</groupId><homePreference xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</homePreference><id xmlns="http://utilisateur.dto.commun.awa.aductis.com">22</id><langue xmlns="http://utilisateur.dto.commun.awa.aductis.com">1</langue><login xmlns="http://utilisateur.dto.commun.awa.aductis.com">GRC</login><mdp xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><nbAdmin xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</nbAdmin><nbDemandeurs xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</nbDemandeurs><nbGest xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</nbGest><nbManagers xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</nbManagers><nom xmlns="http://utilisateur.dto.commun.awa.aductis.com">GRC</nom><notificationMail xmlns="http://utilisateur.dto.commun.awa.aductis.com">true</notificationMail><nouveauCompte xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</nouveauCompte><preferenceRecap xmlns="http://utilisateur.dto.commun.awa.aductis.com">false</preferenceRecap><selectedEquipTypes xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><serviceDemandeur xmlns="http://utilisateur.dto.commun.awa.aductis.com"><FDemandeur xmlns="http://service.dto.commun.awa.aductis.com">true</FDemandeur><FDestinataire xmlns="http://service.dto.commun.awa.aductis.com">false</FDestinataire><FExecutant xmlns="http://service.dto.commun.awa.aductis.com">false</FExecutant><FInterne xmlns="http://service.dto.commun.awa.aductis.com">false</FInterne><adresse xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><adresseFacturation xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><codeService xmlns="http://service.dto.commun.awa.aductis.com">637</codeService><codeServicePere
xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><codeTypeService xmlns="http://service.dto.commun.awa.aductis.com">128</codeTypeService><collectivite xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><droitHabillement xmlns="http://service.dto.commun.awa.aductis.com">0.0</droitHabillement><droitMateriel xmlns="http://service.dto.commun.awa.aductis.com">0.0</droitMateriel><droitOutillage xmlns="http://service.dto.commun.awa.aductis.com">0.0</droitOutillage><libelle xmlns="http://service.dto.commun.awa.aductis.com">Administrés</libelle><libelleComplet xmlns="http://service.dto.commun.awa.aductis.com">Administrés</libelleComplet><libelleSimple xmlns="http://service.dto.commun.awa.aductis.com">Administrés</libelleSimple><modeGestion xmlns="http://service.dto.commun.awa.aductis.com">0</modeGestion><natureService xmlns="http://service.dto.commun.awa.aductis.com">0</natureService><numeroService xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><quota xmlns="http://service.dto.commun.awa.aductis.com">0.0</quota><responsable xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><tierParent xmlns="http://service.dto.commun.awa.aductis.com" xsi:nil="true" /><typeQuota xmlns="http://service.dto.commun.awa.aductis.com">0</typeQuota><typeTiers xmlns="http://service.dto.commun.awa.aductis.com">128</typeTiers></serviceDemandeur><serviceLevel xmlns="http://utilisateur.dto.commun.awa.aductis.com">2</serviceLevel><telephone xmlns="http://utilisateur.dto.commun.awa.aductis.com">+33664847804</telephone><type xmlns="http://utilisateur.dto.commun.awa.aductis.com"><codeRole xmlns="http://role.dto.commun.awa.aductis.com">3</codeRole><description xmlns="http://role.dto.commun.awa.aductis.com">Gestionnaire</description><name xmlns="http://role.dto.commun.awa.aductis.com">TYPE_USER_GEST</name><nomCle xmlns="http://role.dto.commun.awa.aductis.com">user.role.gestionnaire</nomCle><roleLevel xmlns="http://role.dto.commun.awa.aductis.com">1</roleLevel><typeRole xmlns="http://role.dto.commun.awa.aductis.com">3</typeRole></type><typeAcces xmlns="http://utilisateur.dto.commun.awa.aductis.com">0</typeAcces><typesEquipements xmlns="http://utilisateur.dto.commun.awa.aductis.com" /><userDn xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /><uuid xmlns="http://utilisateur.dto.commun.awa.aductis.com" xsi:nil="true" /></demandeur><etatDemande xmlns="http://demande.services.awa.aductis.com"><codeEtatDemande xmlns="http://etat.dto.commun.awa.aductis.com">0</codeEtatDemande><codeEtatTraitementDemande xmlns="http://etat.dto.commun.awa.aductis.com">1</codeEtatTraitementDemande><description xmlns="http://etat.dto.commun.awa.aductis.com">%s</description><typeEtatDemande xmlns="http://etat.dto.commun.awa.aductis.com">2</typeEtatDemande></etatDemande><numeroDemande xmlns="http://demande.services.awa.aductis.com">DIT19080001</numeroDemande><objetDemande xmlns="http://demande.services.awa.aductis.com">Test entrouvert</objetDemande><operateur xmlns="http://demande.services.awa.aductis.com" xsi:nil="true" /><reponses xmlns="http://demande.services.awa.aductis.com" /></ns1:detailsDemandeRetrieved></ns1:retrieveDetailsDemandeResponse></soap:Body></soap:Envelope>

View File

@ -0,0 +1 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:retrieveEtatTravauxResponse xmlns:ns1="http://localhost/awa/services/DemandeService"><ns1:etatTravaux><commentaires xmlns="http://demande.services.awa.aductis.com"></commentaires><id xmlns="http://demande.services.awa.aductis.com">2</id><libelle xmlns="http://demande.services.awa.aductis.com">%s</libelle></ns1:etatTravaux></ns1:retrieveEtatTravauxResponse></soap:Body></soap:Envelope>

View File

@ -1,4 +1,7 @@
# coding: utf-8
import base64
import os
from django.contrib.contenttypes.models import ContentType
import mock
@ -8,6 +11,16 @@ from passerelle.apps.atal.models import ATALConnector
from passerelle.base.models import ApiUser, AccessRight
def get_file(filename):
with open(
os.path.join(
os.path.dirname(__file__), 'data', 'atal', filename
),
'r'
) as f:
return f.read()
@pytest.fixture()
def connector(db):
api = ApiUser.objects.create(username='all', keytype='', key='')
@ -145,3 +158,79 @@ def test_upload(app, connector, monkeypatch):
'err_class': 'passerelle.utils.jsonresponse.APIError',
'err_desc': 'Invalid base64 string'
}
def test_retrieve_details_demande(app, connector, monkeypatch):
import passerelle.utils
wsdl_response = mock.Mock(
content=get_file('DemandeService.wsdl'), status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(passerelle.utils.Request, 'get', mock.Mock(return_value=wsdl_response))
api_response = mock.Mock(
content=get_file('details_demande_response.xml') % 'EN ATTENTE', status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(passerelle.utils.Request, 'post', mock.Mock(return_value=api_response))
response = app.get('/atal/slug-atal/retrieve-details-demande/DIT18050001/')
assert response.json['err'] == 0
assert response.json['data']['etatDemande']['description'] == 'EN ATTENTE'
def test_retrieve_etat_travaux(app, connector, monkeypatch):
import passerelle.utils
wsdl_response = mock.Mock(
content=get_file('DemandeService.wsdl'), status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(passerelle.utils.Request, 'get', mock.Mock(return_value=wsdl_response))
api_response = mock.Mock(
content=get_file('etat_travaux_response.xml') % u'travaux pas commencés', status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(passerelle.utils.Request, 'post', mock.Mock(return_value=api_response))
response = app.get('/atal/slug-atal/retrieve-etat-travaux/DIT18050001/')
assert response.json['err'] == 0
assert response.json['data']['libelle'] == u'travaux pas commencés'
def test_status(app, connector, monkeypatch):
import passerelle.utils
wsdl_response = mock.Mock(
content=get_file('DemandeService.wsdl'), status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(passerelle.utils.Request, 'get', mock.Mock(return_value=wsdl_response))
api_response = mock.Mock(
content=get_file('details_demande_response.xml') % 'EN ATTENTE', status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(passerelle.utils.Request, 'post', mock.Mock(return_value=api_response))
response = app.get('/atal/slug-atal/status/DIT18050001/')
assert response.json['err'] == 0
assert response.json['data']['status'] == u'EN ATTENTE'
api_response1 = mock.Mock(
content=get_file('details_demande_response.xml') % 'PRISE EN COMPTE', status_code=200,
headers={'Content-Type': 'text/xml'}
)
api_response2 = mock.Mock(
content=get_file('etat_travaux_response.xml') % u'travaux pas commencés', status_code=200,
headers={'Content-Type': 'text/xml'}
)
monkeypatch.setattr(
passerelle.utils.Request, 'post', mock.Mock(side_effect=[api_response1, api_response2])
)
response = app.get('/atal/slug-atal/status/DIT18050001/')
assert response.json['err'] == 0
assert response.json['data']['status'] == u'travaux pas commencés'