Projet

Général

Profil

0002-toulouse-axel-fix-annual-possible-days-reference-yea.patch

Lauréline Guérin, 02 juillet 2020 11:17

Télécharger (9,53 ko)

Voir les différences:

Subject: [PATCH 2/2] toulouse-axel: fix annual possible days & reference year
 (#44725)

 passerelle/contrib/toulouse_axel/models.py | 10 ++--
 tests/test_toulouse_axel.py                | 60 ++++++++++++++++++----
 2 files changed, 58 insertions(+), 12 deletions(-)
passerelle/contrib/toulouse_axel/models.py
1204 1204
            'NameID': {'description': _('Publik ID')},
1205 1205
            'idpersonne': {'description': _('Child ID')},
1206 1206
            'activity_type': {'description': _('Activity type (MAT, MIDI, SOIR, GARD)')},
1207
            'booking_date': {'description': _('Booking date (to get reference year)')},
1207 1208
        })
1208
    def clae_booking_activity_annual_possible_days(self, request, NameID, idpersonne, activity_type):
1209
    def clae_booking_activity_annual_possible_days(self, request, NameID, idpersonne, activity_type, booking_date):
1209 1210
        link = self.get_link(NameID)
1211
        try:
1212
            booking_date = datetime.datetime.strptime(booking_date, utils.json_date_format).date()
1213
        except ValueError:
1214
            raise APIError('bad date format, should be YYYY-MM-DD', err_code='bad-request', http_status=400)
1210 1215
        if activity_type not in ['MAT', 'MIDI', 'SOIR', 'GARD']:
1211 1216
            raise APIError('bad activity_type, should be MAT, MIDI, SOIR or GARD', err_code='bad-request', http_status=400)
1212 1217

  
1213
        today = datetime.date.today()
1214
        reference_year = utils.get_reference_year_from_date(today)
1218
        reference_year = utils.get_reference_year_from_date(booking_date)
1215 1219
        activities = self.get_child_activities(
1216 1220
            dui=link.dui,
1217 1221
            reference_year=reference_year,
tests/test_toulouse_axel.py
3031 3031
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
3032 3032
    with mock.patch('passerelle.contrib.toulouse_axel.schemas.enfants_activites') as operation:
3033 3033
        operation.side_effect = AxelError('FooBar')
3034
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MAT')
3034
        resp = app.get(
3035
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3036
            '&activity_type=MAT&booking_date=2019-09-01')
3035 3037
    assert resp.json['err_desc'] == "Axel error: FooBar"
3036 3038
    assert resp.json['err'] == 'error'
3037 3039

  
3038 3040

  
3041
@freezegun.freeze_time('2019-09-01')
3042
@pytest.mark.parametrize('value', ['foo', '20/01/2020', '2020'])
3043
def test_clae_booking_activity_annual_possible_days_endpoint_bad_date_format(app, resource, value):
3044
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
3045
    resp = app.get(
3046
        '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3047
        '&activity_type=MAT&booking_date=%s' % value, status=400)
3048
    assert resp.json['err_desc'] == "bad date format, should be YYYY-MM-DD"
3049
    assert resp.json['err'] == 'bad-request'
3050

  
3051

  
3039 3052
@freezegun.freeze_time('2019-09-01')
3040 3053
def test_clae_booking_activity_annual_possible_days_endpoint_activity_type(app, resource):
3041 3054
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
3042
    resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=FOO', status=400)
3055
    resp = app.get(
3056
        '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3057
        '&activity_type=FOO&booking_date=2019-09-01', status=400)
3043 3058
    assert resp.json['err_desc'] == "bad activity_type, should be MAT, MIDI, SOIR or GARD"
3044 3059
    assert resp.json['err'] == 'bad-request'
3045 3060

  
3046 3061

  
3047 3062
@freezegun.freeze_time('2019-09-01')
3048 3063
def test_clae_booking_activity_annual_possible_days_endpoint_no_result(app, resource):
3049
    resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MAT')
3064
    resp = app.get(
3065
        '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3066
        '&activity_type=MAT&booking_date=2019-09-01')
3050 3067
    assert resp.json['err_desc'] == "Person not found"
3051 3068
    assert resp.json['err'] == 'not-found'
3052 3069

  
......
3055 3072
    with open(filepath) as xml:
3056 3073
        content = xml.read()
3057 3074
    with mock_getdata(content, 'EnfantsActivites'):
3058
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=4242&activity_type=MAT')
3075
        resp = app.get(
3076
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=4242'
3077
            '&activity_type=MAT&booking_date=2019-09-01')
3059 3078
    assert resp.json['err_desc'] == "Child not found"
3060 3079
    assert resp.json['err'] == 'not-found'
3061 3080

  
3062 3081
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value={'ACTIVITE': []}):
3063
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MAT')
3082
        resp = app.get(
3083
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3084
            '&activity_type=MAT&booking_date=2019-09-01')
3064 3085
    assert resp.json['err'] == 0
3065 3086
    assert resp.json['data'] == []
3066 3087

  
......
3070 3091
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
3071 3092
    activities = child_activities_data['ENFANT'][0]
3072 3093
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
3073
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MAT')
3094
        resp = app.get(
3095
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3096
            '&activity_type=MAT&booking_date=2019-09-01')
3074 3097
    assert resp.json['err'] == 0
3075 3098
    assert resp.json['data'] == [
3076 3099
        {
......
3100 3123
        },
3101 3124
    ]
3102 3125
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
3103
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MIDI')
3126
        resp = app.get(
3127
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3128
            '&activity_type=MIDI&booking_date=2019-09-01')
3104 3129
    assert resp.json['err'] == 0
3105 3130
    assert resp.json['data'] == [
3106 3131
        {
......
3130 3155
        },
3131 3156
    ]
3132 3157
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
3133
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=SOIR')
3158
        resp = app.get(
3159
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3160
            '&activity_type=SOIR&booking_date=2019-09-01')
3134 3161
    assert resp.json['err'] == 0
3135 3162
    assert resp.json['data'] == [
3136 3163
        {
......
3160 3187
        },
3161 3188
    ]
3162 3189
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
3163
        resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=GARD')
3190
        resp = app.get(
3191
            '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3192
            '&activity_type=GARD&booking_date=2019-09-01')
3164 3193
    assert resp.json['err'] == 0
3165 3194
    assert resp.json['data'] == [
3166 3195
        {
......
3191 3220
    ]
3192 3221

  
3193 3222

  
3223
def test_clae_booking_activity_annual_possible_days_next_year(app, resource):
3224
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
3225
    with freezegun.freeze_time('2020-07-01'):
3226
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities') as mock_activities:
3227
            mock_activities.return_value = {}
3228
            app.get(
3229
                '/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535'
3230
                '&activity_type=GARD&booking_date=2020-09-01')
3231
    assert mock_activities.call_args_list == [
3232
        mock.call(child_id='3535', dui='XXX', reference_year=2020),
3233
    ]
3234

  
3235

  
3194 3236
@freezegun.freeze_time('2019-09-01')
3195 3237
def test_clae_booking_activity_prefill_endpoint_axel_error(app, resource):
3196 3238
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
3197
-