Projet

Général

Profil

0001-toulouse-axel-check-children-activities-44724.patch

Lauréline Guérin, 02 juillet 2020 16:06

Télécharger (5,88 ko)

Voir les différences:

Subject: [PATCH] toulouse-axel: check children activities (#44724)

 passerelle/contrib/toulouse_axel/models.py    |  6 +-
 tests/data/toulouse_axel/child_activities.xml | 56 -------------------
 tests/test_toulouse_axel.py                   | 30 ++++++++++
 3 files changed, 34 insertions(+), 58 deletions(-)
passerelle/contrib/toulouse_axel/models.py
861 861
            # exclude child in private schools
862 862
            if child['LIBELLEECOLE'].startswith('PRIVEE'):
863 863
                continue
864
            # exclude also child with more than one registration per activity_type
864
            # exclude also child with more than one registration per activity_type or missing activity
865 865
            activity_types = [a['TYPEACTIVITE'] for a in child.get('ACTIVITE', [])]
866
            if len(activity_types) > len(set(activity_types)):
866
            activity_types.sort()
867
            if activity_types != ['MAT', 'MIDI', 'SOIR'] and activity_types != ['GARD', 'MAT', 'MIDI', 'SOIR']:
868
                # GARD is optional
867 869
                continue
868 870
            # ok, store child
869 871
            data[child['IDPERSONNE']] = child
tests/data/toulouse_axel/child_activities.xml
114 114
        <DATEFIN>31/07/2020</DATEFIN>
115 115
      </ACTIVITE>
116 116
    </ENFANT>
117
    <ENFANT>
118
      <NOM>foo</NOM>
119
      <PRENOM>foo</PRENOM>
120
      <DATENAISSANCE>01/01/2019</DATENAISSANCE>
121
      <IDPERSONNE>1234</IDPERSONNE>
122
      <REGIME>SV</REGIME>
123
      <LIBELLEECOLE>MATERNELLE 42</LIBELLEECOLE>
124
      <ACTIVITE>
125
        <TYPEACTIVITE>MAT</TYPEACTIVITE>
126
        <IDACTIVITE>A19P1M1</IDACTIVITE>
127
        <LIBELLEACTIVITE>Temps du matin</LIBELLEACTIVITE>
128
        <DATEENTREE>01/08/2019</DATEENTREE>
129
        <DATESORTIE>31/07/2020</DATESORTIE>
130
        <TARIF>0.42</TARIF>
131
        <ISPAI>NON</ISPAI>
132
        <COUTREVIENT>99999</COUTREVIENT>
133
        <DATEDEBUT>01/08/2019</DATEDEBUT>
134
        <DATEFIN>31/07/2020</DATEFIN>
135
      </ACTIVITE>
136
      <ACTIVITE>
137
        <TYPEACTIVITE>MAT</TYPEACTIVITE>
138
        <IDACTIVITE>A19P1M1bis</IDACTIVITE>
139
        <LIBELLEACTIVITE>Temps du matin autre &#233;cole</LIBELLEACTIVITE>
140
        <DATEENTREE>01/08/2019</DATEENTREE>
141
        <DATESORTIE>31/07/2020</DATESORTIE>
142
        <TARIF>0.43</TARIF>
143
        <ISPAI>NON</ISPAI>
144
        <COUTREVIENT>99999</COUTREVIENT>
145
        <DATEDEBUT>01/08/2019</DATEDEBUT>
146
        <DATEFIN>31/07/2020</DATEFIN>
147
      </ACTIVITE>
148
      <ACTIVITE>
149
        <TYPEACTIVITE>SOIR</TYPEACTIVITE>
150
        <IDACTIVITE>A19P1M3</IDACTIVITE>
151
        <LIBELLEACTIVITE>Temps du soir</LIBELLEACTIVITE>
152
        <DATEENTREE>01/08/2019</DATEENTREE>
153
        <DATESORTIE>31/07/2020</DATESORTIE>
154
        <TARIF>0.44</TARIF>
155
        <ISPAI>NON</ISPAI>
156
        <COUTREVIENT>99999</COUTREVIENT>
157
        <DATEDEBUT>01/08/2019</DATEDEBUT>
158
        <DATEFIN>31/07/2020</DATEFIN>
159
      </ACTIVITE>
160
      <ACTIVITE>
161
        <TYPEACTIVITE>GARD</TYPEACTIVITE>
162
        <IDACTIVITE>A19P1M4</IDACTIVITE>
163
        <LIBELLEACTIVITE>Temps mercredi apr&#232;s midi</LIBELLEACTIVITE>
164
        <DATEENTREE>01/08/2019</DATEENTREE>
165
        <DATESORTIE>31/07/2020</DATESORTIE>
166
        <TARIF>0.45</TARIF>
167
        <ISPAI>NON</ISPAI>
168
        <COUTREVIENT>99999</COUTREVIENT>
169
        <DATEDEBUT>01/08/2019</DATEDEBUT>
170
        <DATEFIN>31/07/2020</DATEFIN>
171
      </ACTIVITE>
172
    </ENFANT>
173 117
  </DUI>
174 118
</PORTAIL>
tests/test_toulouse_axel.py
2424 2424
    assert resp.json['err'] == 0
2425 2425

  
2426 2426

  
2427
@pytest.mark.parametrize('activities, expected', [
2428
    # all activities except GARD - optional
2429
    (['MAT', 'MIDI', 'SOIR'], True),
2430
    # all activities
2431
    (['MAT', 'MIDI', 'SOIR', 'GARD'], True),
2432
    # duplicated activities
2433
    (['MAT', 'MAT', 'MIDI', 'SOIR', 'GARD'], False),
2434
    (['MAT', 'MIDI', 'MIDI', 'SOIR', 'GARD'], False),
2435
    (['MAT', 'MIDI', 'SOIR', 'SOIR', 'GARD'], False),
2436
    (['MAT', 'MIDI', 'SOIR', 'GARD', 'GARD'], False),
2437
    # missing activity
2438
    (['MIDI', 'SOIR'], False),
2439
    (['MAT', 'SOIR'], False),
2440
    (['MAT', 'MIDI'], False),
2441
])
2442
def test_clae_children_activities_info_check(app, resource, activities, expected):
2443
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2444
    result = []
2445
    for activity in activities:
2446
        result.append({'IDACTIVITE': 'foo%s' % activity, 'TYPEACTIVITE': activity})
2447
    result = {'DATA': {'PORTAIL': {'DUI': {'ENFANT': [
2448
        {'IDPERSONNE': '42', 'NOM': '', 'PRENOM': '', 'REGIME': '', 'LIBELLEECOLE': '', 'ACTIVITE': result}
2449
    ]}}}}
2450
    with mock.patch('passerelle.contrib.toulouse_axel.schemas.enfants_activites') as operation:
2451
        operation.return_value = schemas.OperationResult(json_response=result, xml_request='', xml_response='')
2452
        resp = app.get('/toulouse-axel/test/clae_children_activities_info?NameID=yyy&booking_date=2020-01-20')
2453
    assert resp.json['err'] == 0
2454
    assert len(resp.json['data']) == expected and 1 or 0
2455

  
2456

  
2427 2457
def test_clae_booking_activities_info_endpoint_axel_error(app, resource):
2428 2458
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2429 2459
    with mock.patch('passerelle.contrib.toulouse_axel.schemas.enfants_activites') as operation:
2430
-