From bc5b4962c1572924efb9cc6771cce6621b5eefc7 Mon Sep 17 00:00:00 2001
From: Serghei Mihai <smihai@entrouvert.com>
Date: Mon, 5 Aug 2019 11:38:10 +0200
Subject: [PATCH] astregs: add contact details endpoint (#35129)

---
 passerelle/apps/astregs/models.py      | 17 +++++++++++++++++
 tests/data/astregs/ContactResponse.xml |  1 +
 tests/test_astregs.py                  | 18 ++++++++++++++++++
 3 files changed, 36 insertions(+)
 create mode 100644 tests/data/astregs/ContactResponse.xml

diff --git a/passerelle/apps/astregs/models.py b/passerelle/apps/astregs/models.py
index c8178b73..31ea79d4 100644
--- a/passerelle/apps/astregs/models.py
+++ b/passerelle/apps/astregs/models.py
@@ -478,6 +478,23 @@ class AstreGS(BaseResource):
         )
         return {'data': serialize_object(r)}
 
+
+    @endpoint(name='get-contact', perm='can_access',
+              description=_('Get association contact details'),
+              parameters={
+                  'contact_id':{
+                      'description': _('Contact identifier'),
+                      'example_value': '1111',
+                  }
+              }
+    )
+    def get_contact(self, request, contact_id):
+        r = self.call('Contact', 'Chargement',
+                      ContactCle={'idContact': contact_id}
+        )
+        return {'data': serialize_object(r)}
+
+
     @endpoint(name='create-contact',
               perm='can_access',
               post={'description': _('Create contact'),
diff --git a/tests/data/astregs/ContactResponse.xml b/tests/data/astregs/ContactResponse.xml
new file mode 100644
index 00000000..7a71e742
--- /dev/null
+++ b/tests/data/astregs/ContactResponse.xml
@@ -0,0 +1 @@
+<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:chargementResponse xmlns:ns1="http://gfi.astre.webservices/rf/gf/contact"><ns1:response><ns1:ContactReturn><ns1:idContact>1111</ns1:idContact><ns1:CodeContact>POL14466</ns1:CodeContact><ns1:CodeTitreCivilite>035</ns1:CodeTitreCivilite><ns1:Nom>NARDELLI</ns1:Nom><ns1:Prenom>Robert</ns1:Prenom><ns1:NomDeJeuneFille></ns1:NomDeJeuneFille><ns1:DateDeNaissance></ns1:DateDeNaissance><ns1:FormuleCivilite>Maire de Drap</ns1:FormuleCivilite><ns1:IntituleTitre2></ns1:IntituleTitre2><ns1:IntituleTitre3></ns1:IntituleTitre3><ns1:IntituleTitre4>Président du</ns1:IntituleTitre4><ns1:SituationDeFamille></ns1:SituationDeFamille><ns1:CodeFonction></ns1:CodeFonction><ns1:LibelleFonction></ns1:LibelleFonction><ns1:TelephoneBureau></ns1:TelephoneBureau><ns1:TelephoneMobile></ns1:TelephoneMobile><ns1:NumeroDeFax></ns1:NumeroDeFax><ns1:AdresseMail></ns1:AdresseMail><ns1:PageWeb></ns1:PageWeb><ns1:AdresseDestinataire>Robert NARDELLI</ns1:AdresseDestinataire><ns1:AdresseComplementaire></ns1:AdresseComplementaire><ns1:ComplementGeographique>Mairie</ns1:ComplementGeographique><ns1:RueVoie>Avenue du Général de Gaulle</ns1:RueVoie><ns1:ComplementVoie>B.P. n° 37</ns1:ComplementVoie><ns1:CodePostal>06340</ns1:CodePostal><ns1:Ville>DRAP</ns1:Ville><ns1:CodePays>FR</ns1:CodePays><ns1:LibellePays>France</ns1:LibellePays><ns1:LibelleAdresse>ADRESSE PROFESSIONNELLE</ns1:LibelleAdresse><ns1:Commentaire></ns1:Commentaire></ns1:ContactReturn></ns1:response></ns1:chargementResponse></soapenv:Body></soapenv:Envelope>
diff --git a/tests/test_astregs.py b/tests/test_astregs.py
index 413144aa..ef2107a7 100644
--- a/tests/test_astregs.py
+++ b/tests/test_astregs.py
@@ -270,6 +270,24 @@ def test_get_association_by_id(mocked_post, mocked_get, tiers_response, tiers_er
     assert not resp.json['data']
 
 
+@mock.patch('passerelle.utils.Request.get')
+@mock.patch('passerelle.utils.Request.post')
+def test_get_contact_details(mocked_post, mocked_get, connector, app):
+    mocked_get.return_value = mock.Mock(content=get_xml_file('Contact.wsdl'))
+    mocked_post.return_value = mock.Mock(content=get_xml_file('ContactResponse.xml'), status_code=500,
+                                         headers={'Content-Type': 'text/xml'})
+    resp = app.get('/astregs/test/get-contact',
+                   params={'contact_id': '4242'})
+    assert not resp.json['data']
+    assert resp.json['err'] == 1
+    assert resp.json['err_class'] == 'passerelle.utils.jsonresponse.APIError'
+
+    mocked_post.return_value = mock.Mock(content=get_xml_file('ContactResponse.xml'), status_code=200,
+                                         headers={'Content-Type': 'text/xml'})
+    resp = app.get('/astregs/test/get-contact',
+                   params={'contact_id': '1111'})
+
+
 @mock.patch('passerelle.utils.Request.get', side_effect=contact_wsdl_side_effect)
 @mock.patch('passerelle.utils.Request.post', side_effect=contact_side_effect)
 def test_create_association_contact(mocked_post, mocked_get, connector, app):
-- 
2.23.0.rc1

