Projet

Général

Profil

0001-toulouse_axel-prefill-endpoint-41170.patch

Lauréline Guérin, 31 mars 2020 14:28

Télécharger (7,69 ko)

Voir les différences:

Subject: [PATCH] toulouse_axel: prefill endpoint (#41170)

 passerelle/contrib/toulouse_axel/models.py |  13 +++
 tests/test_toulouse_axel.py                | 109 +++++++++++++++++++++
 2 files changed, 122 insertions(+)
passerelle/contrib/toulouse_axel/models.py
1215 1215
            })
1216 1216
        return {'data': activity_days}
1217 1217

  
1218
    @endpoint(
1219
        description=_("Get list booked days for an activity"),
1220
        perm='can_access',
1221
        parameters={
1222
            'NameID': {'description': _('Publik ID')},
1223
            'idpersonne': {'description': _('Child ID')},
1224
            'activity_type': {'description': _('Activity type (MAT, MIDI, SOIR, GARD)')},
1225
            'booking_date': {'description': _('Booking date')},
1226
        })
1227
    def clae_booking_activity_prefill(self, request, NameID, idpersonne, activity_type, booking_date):
1228
        possible_days = self.clae_booking_activity_possible_days(request, NameID, idpersonne, activity_type, booking_date)
1229
        return {'data': [d['id'] for d in possible_days['data'] if d['prefill'] is True]}
1230

  
1218 1231
    @endpoint(
1219 1232
        description=_("CLAE/Cantine booking"),
1220 1233
        perm='can_access',
tests/test_toulouse_axel.py
2647 2647
    assert resp.json['data'][4]['prefill'] is True
2648 2648

  
2649 2649

  
2650
def test_clae_booking_activity_prefill_endpoint_axel_error(app, resource):
2651
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2652
    with mock.patch('passerelle.contrib.toulouse_axel.models.enfants_activites') as operation:
2653
        operation.side_effect = AxelError('FooBar')
2654
        resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=MAT')
2655
    assert resp.json['err_desc'] == "Axel error: FooBar"
2656
    assert resp.json['err'] == 'error'
2657

  
2658
    filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/child_activities.xml')
2659
    with open(filepath) as xml:
2660
        content = xml.read()
2661
    with mock_getdata(content, 'EnfantsActivites'):
2662
        with mock.patch('passerelle.contrib.toulouse_axel.models.reservation_periode') as operation:
2663
            operation.side_effect = AxelError('FooBar')
2664
            resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=MAT')
2665
    assert resp.json['err_desc'] == "Axel error: FooBar"
2666
    assert resp.json['err'] == 'error'
2667

  
2668

  
2669
@pytest.mark.parametrize('value', ['foo', '20/01/2020', '2020'])
2670
def test_clae_booking_activity_prefill_endpoint_bad_date_format(app, resource, value):
2671
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2672
    resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=%s&activity_type=MAT' % value, status=400)
2673
    assert resp.json['err_desc'] == "bad date format, should be YYYY-MM-DD"
2674
    assert resp.json['err'] == 'bad-request'
2675

  
2676

  
2677
def test_clae_booking_activity_prefill_endpoint_activity_type(app, resource):
2678
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2679
    resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=FOO', status=400)
2680
    assert resp.json['err_desc'] == "bad activity_type, should be MAT, MIDI, SOIR or GARD"
2681
    assert resp.json['err'] == 'bad-request'
2682

  
2683

  
2684
def test_clae_booking_activity_prefill_endpoint_no_result(app, resource, child_activities_data):
2685
    resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=MAT')
2686
    assert resp.json['err_desc'] == "Person not found"
2687
    assert resp.json['err'] == 'not-found'
2688

  
2689
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2690
    filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/child_activities.xml')
2691
    with open(filepath) as xml:
2692
        content = xml.read()
2693
    with mock_getdata(content, 'EnfantsActivites'):
2694
        with mock.patch('passerelle.contrib.toulouse_axel.models.reservation_periode') as operation:
2695
            operation.side_effect = AxelError('FooBar')
2696
            resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=4242&booking_date=2020-01-20&activity_type=MAT')
2697
    assert resp.json['err_desc'] == "Child not found"
2698
    assert resp.json['err'] == 'not-found'
2699

  
2700
    content = """<PORTAIL>
2701
  <DUI>
2702
    <IDDUI>XXX</IDDUI>
2703
    <ENFANT>
2704
      <IDPERSONNE>4242</IDPERSONNE>
2705
      <ACTIVITE>
2706
        <ANNEEREFERENCE>2019</ANNEEREFERENCE>
2707
        <IDACTIVITE>A19P1M1</IDACTIVITE>
2708
        <JOUR>00000</JOUR>
2709
      </ACTIVITE>
2710
    </ENFANT>
2711
  </DUI>
2712
</PORTAIL>"""
2713
    activities = child_activities_data['ENFANT'][0]
2714
    with mock_getdata(content, 'ReservationPeriode'):
2715
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
2716
            resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=MAT')
2717
    assert resp.json['err_desc'] == "Child not found"
2718
    assert resp.json['err'] == 'not-found'
2719

  
2720
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.clae_booking_activity_possible_days') as possible_days:
2721
        possible_days.return_value = {'data': []}
2722
        resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=MAT')
2723
    assert resp.json['err'] == 0
2724
    assert resp.json['data'] == []
2725

  
2726

  
2727
def test_clae_booking_activity_prefill_endpoint(app, resource, child_activities_data):
2728
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
2729
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.clae_booking_activity_possible_days') as possible_days:
2730
        possible_days.return_value = {
2731
            'data': [
2732
                {
2733
                    'id': '3535-MAT-A19P1M1-monday',
2734
                    'prefill': True,
2735
                },
2736
                {
2737
                    'id': '3535-MAT-A19P1M1-tuesday',
2738
                    'prefill': False,
2739
                },
2740
                {
2741
                    'id': '3535-MAT-A19P1M1-wednesday',
2742
                    'prefill': None,
2743
                },
2744
                {
2745
                    'id': '3535-MAT-A19P1M1-thursday',
2746
                    'prefill': False,
2747
                },
2748
                {
2749
                    'id': '3535-MAT-A19P1M1-friday',
2750
                    'prefill': True,
2751
                },
2752
            ]
2753
        }
2754
        resp = app.get('/toulouse-axel/test/clae_booking_activity_prefill?NameID=yyy&idpersonne=3535&booking_date=2020-01-20&activity_type=MAT')
2755
    assert resp.json['err'] == 0
2756
    assert resp.json['data'] == ['3535-MAT-A19P1M1-monday', '3535-MAT-A19P1M1-friday']
2757

  
2758

  
2650 2759
def test_are_children_registered_axel_error(resource):
2651 2760
    with mock.patch('passerelle.contrib.toulouse_axel.models.enfants_activites') as operation:
2652 2761
        operation.side_effect = AxelError('FooBar')
2653
-