From 2a9b9941a19d2a2b66af951903df9b087f84d243 Mon Sep 17 00:00:00 2001
From: Serghei Mihai <smihai@entrouvert.com>
Date: Tue, 9 Jul 2019 09:52:13 +0200
Subject: [PATCH] astregs: update payload params names for association creation
 (#34664)

---
 passerelle/apps/astregs/models.py            | 126 +++++--------------
 tests/data/astregs/TiersCreationResponse.xml |   2 +-
 tests/test_astregs.py                        |  32 +++--
 3 files changed, 52 insertions(+), 108 deletions(-)

diff --git a/passerelle/apps/astregs/models.py b/passerelle/apps/astregs/models.py
index f53df731..30f6225d 100644
--- a/passerelle/apps/astregs/models.py
+++ b/passerelle/apps/astregs/models.py
@@ -32,96 +32,62 @@ ASSOCIATION_SCHEMA = {
     "description": "",
     "type": "object",
     "properties": {
-        "family_code": {
-            "description": "association family code",
+        "Financier": {
+            "description": "financial association",
             "type": "string",
-            "required": True
+            "required": True,
+            "enum": ["True", "False"]
         },
-        "category": {
+        "CodeFamille": {
             "description": "association family code",
             "type": "string",
             "required": True
         },
-        "name": {
-            "description": "association name",
-            "type": "string",
-            "required": True
-        },
-        "siren": {
-            "description": "SIREN number",
+        "CatTiers": {
+            "description": "association category",
             "type": "string",
             "required": True
         },
-        "nic": {
-            "description": "NIC number",
+        "NomEnregistrement": {
+            "description": "association name",
             "type": "string",
             "required": True
         },
-        "organism": {
-            "description": "association organism",
-            "type": "string",
-            "required": False
-        },
-        "financial": {
-            "description": "financial association",
-            "type": "bool",
-            "required": False,
-        },
-        "type": {
-            "description": "association type",
-            "type": "string",
-            "required": False
-        },
-        "status": {
+        "StatutTiers": {
             "description": "association status",
             "type": "string",
-            "required": False,
+            "required": True,
             "enum": ["PROPOSE", "VALIDE", "REFUSE", "BLOQUE", "A COMPLETER"]
         },
-        "address": {
-            "description": "association address",
-            "type": "string",
-            "required": True
-        },
-        "address_complement": {
-            "description": "association address complement",
-            "type": "string",
-            "required": False
-        },
-        "zipcode": {
-            "description": "association address zipcode",
-            "type": "string",
-            "required": False
-        },
-        "city": {
-            "description": "association city",
+        "Type": {
+            "description": "association type",
             "type": "string",
-            "required": False
+            "required": True,
+            "enum": ["D", "F", "*"]
         },
-        "country": {
-            "description": "association address zipcode",
+        "NumeroSiret": {
+            "description": "SIREN number",
             "type": "string",
-            "required": False
+            "required": True
         },
-        "email": {
-            "description": "association email",
+        "NumeroSiretFin": {
+            "description": "NIC number",
             "type": "string",
-            "required": False
+            "required": True
         },
-        "website": {
-            "description": "association website",
+        "AdresseTitre": {
             "type": "string",
-            "required": False
+            "required": True
         },
-        "comment": {
-            "description": "comment for association",
+        "AdresseIsAdresseDeCommande": {
             "type": "string",
-            "required": False
+            "required": True,
+            "enum": ["True", "False"]
         },
-        "contact_id": {
-            "description": "association contact id",
+        "AdresseIsAdresseDeFacturation": {
             "type": "string",
-            "required": False
+            "required": True,
+            "enum": ["True", "False"]
         }
     }
 }
@@ -415,6 +381,7 @@ class AstreGS(BaseResource):
                              'text': '%s - %s' % (item.Numero_SIRET, item.Nom_enregistrement)})
         return {'data': data}
 
+
     @endpoint(perm='can_access', name='create-association',
               post={
                   'description': _('Creates an association'),
@@ -426,38 +393,7 @@ class AstreGS(BaseResource):
               }
     )
     def create_association(self, request, post_data):
-        tiers = {'Financier': post_data.get('financial', False),
-                 'CodeFamille': post_data['family_code'],
-                 'CatTiers': post_data['category'],
-                 'NomEnregistrement': post_data['name'],
-                 'Organisme': post_data.get('organism', 'CG06'), # defaults to CG06
-                 'NumeroSiret': post_data['siren'],
-                 'NumeroSiretFin': post_data['nic'],
-                 # can be D (débiteur), F (fournisseur) or * (both)
-                 'Type': post_data.get('type', '*'),
-                 'StatutTiers': post_data.get('status', 'PROPOSE'),
-                 'AdresseIsAdresseDeFacturation': True,
-                 'AdresseIsAdresseDeCommande': True,
-                 'AdresseTitre': 'AdressePrincipale',
-                 'AdresseDestinataire': post_data['name'],
-                 'AdresseLibelleRue': post_data['address']
-
-        }
-        optional_attributes = {
-            'address_complement': 'AdresseComplementVoie',
-            'zipcode': 'AdresseCodePostal',
-            'city': 'Libelle_Postale',
-            'country': 'AdresseLibellePays',
-            'email': 'Mail',
-            'website': 'SiteWeb',
-            'contact_id': 'EncodeKeyContact',
-            'comment': 'Commentaire'
-        }
-        for param, attribute in optional_attributes.items():
-            if post_data.get(param):
-                tiers[attribute] = post_data[param]
-
-        r = self.call('Tiers', 'Creation', Tiers=tiers)
+        r = self.call('Tiers', 'Creation', Tiers=post_data)
         return {'data': serialize_object(r)}
 
     @endpoint(description=_('Get association informations'),
diff --git a/tests/data/astregs/TiersCreationResponse.xml b/tests/data/astregs/TiersCreationResponse.xml
index 3dc25a2b..b9dce74e 100644
--- a/tests/data/astregs/TiersCreationResponse.xml
+++ b/tests/data/astregs/TiersCreationResponse.xml
@@ -1 +1 @@
-<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:creationResponse xmlns:ns1="http://gfi.astre.webservices/gf/tiers"><ns1:response><ns1:TiersReturn><ns1:Financier>false</ns1:Financier><ns1:CodeTiers>487464</ns1:CodeTiers><ns1:CodeFamille>51</ns1:CodeFamille><ns1:CatTiers>42</ns1:CatTiers><ns1:CodeCivilite></ns1:CodeCivilite><ns1:NomEnregistrement>My association</ns1:NomEnregistrement><ns1:Nom></ns1:Nom><ns1:Prenom></ns1:Prenom><ns1:Sigle></ns1:Sigle><ns1:Organisme>CG06</ns1:Organisme><ns1:RaisonSociale3></ns1:RaisonSociale3><ns1:RaisonSociale4></ns1:RaisonSociale4><ns1:RaisonSociale5></ns1:RaisonSociale5><ns1:RaisonSociale6></ns1:RaisonSociale6><ns1:LibelleCourrier></ns1:LibelleCourrier><ns1:EncodeKeyNatjur></ns1:EncodeKeyNatjur><ns1:CodeAPE></ns1:CodeAPE><ns1:NumeroSiret>112233445</ns1:NumeroSiret><ns1:NumeroSiretFin>00024</ns1:NumeroSiretFin><ns1:Commentaire></ns1:Commentaire><ns1:AdresseDestinataire>My association</ns1:AdresseDestinataire><ns1:AdresseTitre>AdressePrincipale</ns1:AdresseTitre><ns1:IdentifiantAdresse>785772</ns1:IdentifiantAdresse><ns1:AdresseIsAdresseDeFacturation>false</ns1:AdresseIsAdresseDeFacturation><ns1:AdresseIsAdresseDeCommande>false</ns1:AdresseIsAdresseDeCommande><ns1:AdresseComplementDestinataire></ns1:AdresseComplementDestinataire><ns1:AdresseComplementaire></ns1:AdresseComplementaire><ns1:AdresseLibelleRue>169, rue du Château</ns1:AdresseLibelleRue><ns1:AdresseComplementVoie></ns1:AdresseComplementVoie><ns1:AdresseCodePostal>75014</ns1:AdresseCodePostal><ns1:AdresseBureauDistributeur></ns1:AdresseBureauDistributeur><ns1:AdresseCodePays></ns1:AdresseCodePays><ns1:AdresseLibellePays>France</ns1:AdresseLibellePays><ns1:NumeroTelephone></ns1:NumeroTelephone><ns1:NumeroFax></ns1:NumeroFax><ns1:Mail>foo@example.com</ns1:Mail><ns1:SiteWeb>http://example.com</ns1:SiteWeb><ns1:CodeTiersReprise></ns1:CodeTiersReprise><ns1:StatutTiers>PROPOSE</ns1:StatutTiers><ns1:Type>*</ns1:Type><ns1:Permanent>false</ns1:Permanent><ns1:IndSeuil>false</ns1:IndSeuil><ns1:DelaiSuiviFacture>0</ns1:DelaiSuiviFacture><ns1:Remise>0,00</ns1:Remise><ns1:DeclarationFiscale>false</ns1:DeclarationFiscale><ns1:IndicateurTiersSubrogatoire>false</ns1:IndicateurTiersSubrogatoire><ns1:ValeurIdentifiant0></ns1:ValeurIdentifiant0><ns1:ValeurIdentifiant1></ns1:ValeurIdentifiant1><ns1:ValeurIdentifiant2></ns1:ValeurIdentifiant2><ns1:ValeurIdentifiant3></ns1:ValeurIdentifiant3><ns1:ValeurIdentifiant4></ns1:ValeurIdentifiant4><ns1:ValeurIdentifiant5></ns1:ValeurIdentifiant5><ns1:ValeurIdentifiant6></ns1:ValeurIdentifiant6><ns1:ValeurIdentifiant7></ns1:ValeurIdentifiant7><ns1:ValeurIdentifiant8></ns1:ValeurIdentifiant8><ns1:ValeurIdentifiant9></ns1:ValeurIdentifiant9><ns1:NoDeclarationPref></ns1:NoDeclarationPref><ns1:TiersContactId></ns1:TiersContactId><ns1:EncodeKeyContact>4242</ns1:EncodeKeyContact><ns1:EncodeKeyFonction></ns1:EncodeKeyFonction><ns1:LibelleFonction></ns1:LibelleFonction><ns1:DateDebutFonction></ns1:DateDebutFonction><ns1:DateFinFonction></ns1:DateFinFonction></ns1:TiersReturn></ns1:response></ns1:creationResponse></soapenv:Body></soapenv:Envelope>
+<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:creationResponse xmlns:ns1="http://gfi.astre.webservices/gf/tiers"><ns1:response><ns1:TiersReturn><ns1:Financier>false</ns1:Financier><ns1:CodeTiers>487464</ns1:CodeTiers><ns1:CodeFamille>51</ns1:CodeFamille><ns1:CatTiers>42</ns1:CatTiers><ns1:CodeCivilite></ns1:CodeCivilite><ns1:NomEnregistrement>My association</ns1:NomEnregistrement><ns1:Nom></ns1:Nom><ns1:Prenom></ns1:Prenom><ns1:Sigle>EO</ns1:Sigle><ns1:Organisme>CG06</ns1:Organisme><ns1:RaisonSociale3></ns1:RaisonSociale3><ns1:RaisonSociale4></ns1:RaisonSociale4><ns1:RaisonSociale5></ns1:RaisonSociale5><ns1:RaisonSociale6></ns1:RaisonSociale6><ns1:LibelleCourrier></ns1:LibelleCourrier><ns1:EncodeKeyNatjur></ns1:EncodeKeyNatjur><ns1:CodeAPE></ns1:CodeAPE><ns1:NumeroSiret>112233445</ns1:NumeroSiret><ns1:NumeroSiretFin>00024</ns1:NumeroSiretFin><ns1:Commentaire></ns1:Commentaire><ns1:AdresseDestinataire>My association</ns1:AdresseDestinataire><ns1:AdresseTitre>AdressePrincipale</ns1:AdresseTitre><ns1:IdentifiantAdresse>785772</ns1:IdentifiantAdresse><ns1:AdresseIsAdresseDeFacturation>false</ns1:AdresseIsAdresseDeFacturation><ns1:AdresseIsAdresseDeCommande>false</ns1:AdresseIsAdresseDeCommande><ns1:AdresseComplementDestinataire></ns1:AdresseComplementDestinataire><ns1:AdresseComplementaire></ns1:AdresseComplementaire><ns1:AdresseLibelleRue>169, rue du Château</ns1:AdresseLibelleRue><ns1:AdresseComplementVoie></ns1:AdresseComplementVoie><ns1:AdresseCodePostal>75014</ns1:AdresseCodePostal><ns1:AdresseBureauDistributeur></ns1:AdresseBureauDistributeur><ns1:AdresseCodePays></ns1:AdresseCodePays><ns1:AdresseLibellePays>France</ns1:AdresseLibellePays><ns1:NumeroTelephone></ns1:NumeroTelephone><ns1:NumeroFax></ns1:NumeroFax><ns1:Mail>foo@example.com</ns1:Mail><ns1:SiteWeb>http://example.com</ns1:SiteWeb><ns1:CodeTiersReprise></ns1:CodeTiersReprise><ns1:StatutTiers>PROPOSE</ns1:StatutTiers><ns1:Type>*</ns1:Type><ns1:Permanent>false</ns1:Permanent><ns1:IndSeuil>false</ns1:IndSeuil><ns1:DelaiSuiviFacture>0</ns1:DelaiSuiviFacture><ns1:Remise>0,00</ns1:Remise><ns1:DeclarationFiscale>false</ns1:DeclarationFiscale><ns1:IndicateurTiersSubrogatoire>false</ns1:IndicateurTiersSubrogatoire><ns1:ValeurIdentifiant0></ns1:ValeurIdentifiant0><ns1:ValeurIdentifiant1></ns1:ValeurIdentifiant1><ns1:ValeurIdentifiant2></ns1:ValeurIdentifiant2><ns1:ValeurIdentifiant3></ns1:ValeurIdentifiant3><ns1:ValeurIdentifiant4></ns1:ValeurIdentifiant4><ns1:ValeurIdentifiant5></ns1:ValeurIdentifiant5><ns1:ValeurIdentifiant6></ns1:ValeurIdentifiant6><ns1:ValeurIdentifiant7></ns1:ValeurIdentifiant7><ns1:ValeurIdentifiant8></ns1:ValeurIdentifiant8><ns1:ValeurIdentifiant9></ns1:ValeurIdentifiant9><ns1:NoDeclarationPref></ns1:NoDeclarationPref><ns1:TiersContactId></ns1:TiersContactId><ns1:EncodeKeyContact>4242</ns1:EncodeKeyContact><ns1:EncodeKeyFonction></ns1:EncodeKeyFonction><ns1:LibelleFonction></ns1:LibelleFonction><ns1:DateDebutFonction></ns1:DateDebutFonction><ns1:DateFinFonction></ns1:DateFinFonction></ns1:TiersReturn></ns1:response></ns1:creationResponse></soapenv:Body></soapenv:Envelope>
diff --git a/tests/test_astregs.py b/tests/test_astregs.py
index ed7d219b..b7aaeae5 100644
--- a/tests/test_astregs.py
+++ b/tests/test_astregs.py
@@ -184,18 +184,23 @@ def test_list_user_associations(mocked_post, mocked_get, recherche_tiers_details
 @mock.patch('passerelle.utils.Request.post')
 def test_association_creation(mocked_post, mocked_get, tiers_creation_response,
                               tiers_creation_error_response, connector, app):
-    payload = {'family_code': '51',
-               'category': '42',
-               'name': 'My association',
-               'siren': '112233445',
-               'nic': '00024',
-               'address': '169, rue du Château',
-               'zipcode': '75014',
-               'city': 'Paris',
-               'country': 'France',
-               'email': 'foo@example.com',
-               'website': 'http://example.com',
-               'contact_id': '4242'
+    payload = {
+        'CodeFamille': '51',
+        'CatTiers': '42',
+        'EncodeKeyContact': '4242',
+        'Sigle': 'EO',
+        'NomEnregistrement': 'My association',
+        'Organisme': 'CG06',
+        'NumeroSiret': '112233445',
+        'NumeroSiretFin': '00024',
+        'StatutTiers': 'PROPOSE',
+        'Type': '*',
+        'AdresseTitre': 'AdressePrincipale',
+        'AdresseLibelleRue': '169, rue du Château',
+        'Sigle': 'EO',
+        'Financier': 'True',
+        'AdresseIsAdresseDeFacturation': 'False',
+        'AdresseIsAdresseDeCommande': 'False'
     }
     mocked_post.return_value = mock.Mock(content=tiers_creation_response, status_code=200,
                                          headers={'Content-Type': 'text/xml'})
@@ -214,6 +219,9 @@ def test_association_creation(mocked_post, mocked_get, tiers_creation_response,
     assert data['Type'] == '*'
     assert data['AdresseTitre'] == 'AdressePrincipale'
     assert data['AdresseLibelleRue'] == force_text('169, rue du Château')
+    assert data['Sigle'] == 'EO'
+    assert data['AdresseIsAdresseDeCommande'] == 'false'
+    assert data['AdresseIsAdresseDeFacturation'] == 'false'
 
     mocked_post.return_value = mock.Mock(content=tiers_creation_error_response,
                                          status_code=500,
-- 
2.22.0

