From af655bbb7375071d31f410e9288fa6848ed590d3 Mon Sep 17 00:00:00 2001
From: Nicolas ROCHE <nroche@entrouvert.com>
Date: Tue, 26 Jul 2022 18:27:19 +0200
Subject: [PATCH] toulouse_maelis: apply correction on bateBirth field (#67784)

---
 passerelle/contrib/toulouse_maelis/schemas.py | 93 +++++--------------
 tests/test_toulouse_maelis.py                 |  6 +-
 2 files changed, 28 insertions(+), 71 deletions(-)

diff --git a/passerelle/contrib/toulouse_maelis/schemas.py b/passerelle/contrib/toulouse_maelis/schemas.py
index bbda2a8d..6fd88b1f 100644
--- a/passerelle/contrib/toulouse_maelis/schemas.py
+++ b/passerelle/contrib/toulouse_maelis/schemas.py
@@ -20,64 +20,57 @@ BOOLEAN_TYPES = [
     {'type': 'boolean'},
     {
         'type': 'string',
         'pattern': '^([Oo][Uu][Ii]|[Nn][Oo][Nn]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0)$',
         'pattern_description': 'Les valeurs "0", "1", "true", "false", "oui" ou "non" sont autorisées (insensibles à la casse).',
     },
 ]
 
+
+ID_PROPERTIES = {
+    'firstname': {
+        'description': 'Prénom',
+        'type': 'string',
+    },
+    'lastname': {
+        'description': 'Nom',
+        'type': 'string',
+    },
+    'dateBirth': {
+        'description': 'Date de naissance',
+        'type': 'string',
+        'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
+    },
+}
+
+
 LINK_SCHEMA = {
     '$schema': 'http://json-schema.org/draft-04/schema#',
     'title': 'Link',
     'description': "Appairage d'un usager Publik à une famille dans Maelis",
     'type': 'object',
     'required': ['family_id', 'firstname', 'lastname', 'dateBirth'],
     'properties': {
         'family_id': {
             'description': 'Numéro DUI',
             'type': 'string',
         },
-        'firstname': {
-            'description': 'Prénom du RL1',
-            'type': 'string',
-        },
-        'lastname': {
-            'description': 'Nom du RL1',
-            'type': 'string',
-        },
-        'dateBirth': {
-            'description': 'Date de naissance du RL1',
-            'type': 'string',
-            'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
-        },
     },
 }
+LINK_SCHEMA['properties'].update(ID_PROPERTIES)
+
 
 ISEXISTS_SCHEMA = {
     '$schema': 'http://json-schema.org/draft-04/schema#',
     'title': 'Link',
     'description': "Appairage d'un usager Publik à une famille dans Maelis",
     'type': 'object',
-    'required': ['firstname', 'lastname', 'datebirth'],
-    'properties': {
-        'firstname': {
-            'description': 'Prénom',
-            'type': 'string',
-        },
-        'lastname': {
-            'description': 'Nom',
-            'type': 'string',
-        },
-        'datebirth': {
-            'description': 'Date de naissance',
-            'type': 'string',
-            'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
-        },
-    },
+    'required': ['firstname', 'lastname', 'dateBirth'],
+    'properties': ID_PROPERTIES,
 }
 
 ADDRESS_SCHEMA = {
     '$schema': 'http://json-schema.org/draft-04/schema#',
     'title': 'Address',
     'description': 'Informations sur une adresse',
     'type': 'object',
     'required': ['street1', 'town', 'zipcode'],
@@ -236,39 +229,27 @@ RLINFO_SCHEMA = {
     'description': "Informations sur le responsable légal",
     'type': 'object',
     'required': ['firstname', 'lastname', 'quality', 'dateBirth', 'adresse'],
     'properties': {
         'civility': {
             'description': 'civilité (depuis référenciel)',
             'oneOf': [{'type': 'null'}, {'type': 'string'}],
         },
-        'firstname': {
-            'description': 'Prénom',
-            'type': 'string',
-        },
-        'lastname': {
-            'description': 'Nom',
-            'type': 'string',
-        },
         'quality': {
             'description': 'Qualité',
             'type': 'string',
         },
-        'dateBirth': {
-            'description': 'Date de naissance',
-            'type': 'string',
-            'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
-        },
         'adresse': ADDRESS_SCHEMA,
         'contact': CONTACT_SCHEMA,
         'profession': PROFESSION_SCHEMA,
         'CAFInfo': CAFINFO_SCHEMA,
     },
 }
+RLINFO_SCHEMA['properties'].update(ID_PROPERTIES)
 
 CHILDBIRTH_SCHEMA = {
     '$schema': 'http://json-schema.org/draft-04/schema#',
     'title': 'Child birth',
     'description': "Informations sur la naissance d'un enfant",
     'type': 'object',
     'required': ['dateBirth'],
     'properties': {
@@ -517,33 +498,20 @@ CHILD_SCHEMA = {
     'description': "Informations sur la création d'un enfant",
     'type': 'object',
     'required': ['sexe', 'firstname', 'lastname'],
     'oneOf': [
         {'required': ['dateBirth']},  # createFamily
         {'required': ['birth']},  # updateFamily
     ],
     'properties': {
-        'firstname': {
-            'description': 'Prénom',
-            'type': 'string',
-        },
-        'lastname': {
-            'description': 'Nom',
-            'type': 'string',
-        },
         'sexe': {
             'description': 'Sexe',
             'type': 'string',
         },
-        'dateBirth': {
-            'description': 'Date de naissance',
-            'type': 'string',
-            'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
-        },
         'birth': CHILDBIRTH_SCHEMA,
         'dietcode': {
             'description': 'Code de régime alimentaire',
             'oneOf': [{'type': 'null'}, {'type': 'string'}],
         },
         'bPhoto': {
             'description': 'Autorisation photo',
             'oneOf': BOOLEAN_TYPES,
@@ -552,16 +520,17 @@ CHILD_SCHEMA = {
             'description': 'Autorisation à partir seul',
             'oneOf': BOOLEAN_TYPES,
         },
         'fsl': FSL_SCHEMA,
         'medicalRecord': MEDICALRECORD_SCHEMA,
         'paiInfoBean': PAIINFO_SCHEMA,
     },
 }
+CHILD_SCHEMA['properties'].update(ID_PROPERTIES)
 
 CONTACTLIGHT_SCHEMA = {
     '$schema': 'http://json-schema.org/draft-04/schema#',
     'title': 'Contact',
     'description': "Informations de contact pour les personnes autorisées à récupérer les enfants ou à prévenir en cas d'urgence",
     'oneOf': [
         {'type': 'null'},
         {
@@ -590,37 +559,25 @@ FAMILYPERSON_SCHEMA = {
     'description': "Informations sur les personnes autorisées à venir chercher les enfants ou à prévenir en cas d'urgence",
     'type': 'object',
     'required': ['firstname', 'lastname', 'dateBirth'],
     'properties': {
         'civility': {
             'description': 'civilité (depuis référenciel)',
             'oneOf': [{'type': 'null'}, {'type': 'string'}],
         },
-        'firstname': {
-            'description': 'Prénom',
-            'type': 'string',
-        },
-        'lastname': {
-            'description': 'Nom',
-            'type': 'string',
-        },
         'quality': {
             'description': 'Qualité',
             'oneOf': [{'type': 'null'}, {'type': 'string'}],
         },
-        'dateBirth': {
-            'description': 'Date de naissance',
-            'type': 'string',
-            'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
-        },
         'contact': CONTACTLIGHT_SCHEMA,
     },
     'unflatten': True,
 }
+FAMILYPERSON_SCHEMA['properties'].update(ID_PROPERTIES)
 
 AUTHORIZEDPERSON_SCHEMA = {
     '$schema': 'http://json-schema.org/draft-04/schema#',
     'title': 'Family',
     'description': "Informations sur les personnes autorisées à venir chercher les enfants ou à prévenir en cas d'urgence",
     'type': 'object',
     'properties': {
         'personList': {
diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py
index 5072e7ec..dec3f42d 100644
--- a/tests/test_toulouse_maelis.py
+++ b/tests/test_toulouse_maelis.py
@@ -637,30 +637,30 @@ def test_read_child_not_found(mocked_post, mocked_get, con, app):
 def test_is_rl_exists(mocked_post, mocked_get, post_response, result, con, app):
     mocked_get.return_value = FAMILY_SERVICE_WSDL
     mocked_post.return_value = post_response
     url = get_endpoint('is-rl-exists')
 
     params = {
         'firstname': 'Damien',
         'lastname': 'Costanze',
-        'datebirth': '1980-10-07',
+        'dateBirth': '1980-10-07',
     }
     resp = app.post_json(url, params=params)
     assert resp.json['err'] == 0
     assert resp.json['data'] == result
 
 
 def test_is_rl_exists_schema_error(con, app):
     url = get_endpoint('is-rl-exists')
 
     params = {
         'firstname': 'Damien',
         'lastname': 'Costanze',
-        'datebirth': '1980-10-07 more text',
+        'dateBirth': '1980-10-07 more text',
     }
     resp = app.post_json(url, params=params, status=400)
     assert resp.json['err'] == 1
     assert "does not match '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'" in resp.json['err_desc']
 
 
 @pytest.mark.parametrize(
     'post_response, result',
@@ -674,17 +674,17 @@ def test_is_rl_exists_schema_error(con, app):
 def test_is_child_exists(mocked_post, mocked_get, post_response, result, con, app):
     mocked_get.return_value = FAMILY_SERVICE_WSDL
     mocked_post.return_value = post_response
     url = get_endpoint('is-child-exists')
 
     params = {
         'firstname': 'Cassandra',
         'lastname': 'Costanze',
-        'datebirth': '2021-06-22',
+        'dateBirth': '2021-06-22',
     }
     resp = app.post_json(url, params=params)
     assert resp.json['err'] == 0
     assert resp.json['data'] == result
 
 
 @mock.patch('passerelle.utils.Request.get')
 @mock.patch('passerelle.utils.Request.post')
-- 
2.30.2

