Projet

Général

Profil

0003-api_entreprise-add-covid-endpoints-41315.patch

Emmanuel Cazenave, 06 avril 2020 17:11

Télécharger (7,76 ko)

Voir les différences:

Subject: [PATCH 3/3] api_entreprise: add covid endpoints (#41315)

 passerelle/apps/api_entreprise/models.py | 57 +++++++++++++++++
 tests/test_api_entreprise.py             | 78 +++++++++++++++++++++++-
 2 files changed, 133 insertions(+), 2 deletions(-)
passerelle/apps/api_entreprise/models.py
139 139
        'example_value': 'APS'
140 140
    }
141 141

  
142
    MONTH_PARAM = {
143
        'description': _('requested month'),
144
        'example_value': '02',
145
    }
146

  
142 147
    OBJECT_PARAM = {
143 148
        'description': _('request object: form number, file identifier...'),
144 149
        'example_value': '42'
......
159 164
        'example_value': '44317013900036'
160 165
    }
161 166

  
167
    YEAR_PARAM = {
168
        'description': _('requested year'),
169
        'example_value': '2019',
170
    }
171

  
162 172
    @endpoint(perm='can_access',
163 173
              pattern=r'(?P<association_id>\w+)/$',
164 174
              example_pattern='{association_id}/',
......
295 305
              })
296 306
    def etablissements(self, request, siret, **kwargs):
297 307
        return self.get('etablissements/%s/' % siret, **kwargs)
308

  
309
    @endpoint(perm='can_access',
310
              pattern=r'(?P<siren>\w+)/$',
311
              example_pattern='{siren}/',
312
              description=_('Get firm\'s related numbers'),
313
              parameters={
314
                  'siren': SIREN_PARAM,
315
                  'object': OBJECT_PARAM,
316
                  'context': CONTEXT_PARAM,
317
                  'recipient': RECIPIENT_PARAM,
318
              })
319
    def effectifs_annuels_acoss_covid(self, request, siren, **kwargs):
320
        return self.get('effectifs_annuels_acoss_covid/%s/' % siren, **kwargs)
321

  
322
    @endpoint(perm='can_access',
323
              pattern=r'(?P<year>\w+)/(?P<month>\w+)/(?P<siren>\w+)/$',
324
              description=_('Get firm\'s related monthly numbers'),
325
              parameters={
326
                  'year': YEAR_PARAM,
327
                  'month': MONTH_PARAM,
328
                  'siren': SIREN_PARAM,
329
                  'object': OBJECT_PARAM,
330
                  'context': CONTEXT_PARAM,
331
                  'recipient': RECIPIENT_PARAM,
332
              })
333
    def entreprise_effectifs_mensuels_acoss_covid(self, request, year, month, siren, **kwargs):
334
        month = month.zfill(2)
335
        return self.get(
336
            'effectifs_mensuels_acoss_covid/%s/%s/entreprise/%s/' % (year, month, siren), **kwargs
337
        )
338

  
339
    @endpoint(perm='can_access',
340
              pattern=r'(?P<year>\w+)/(?P<month>\w+)/(?P<siret>\w+)/$',
341
              description=_('Get firm\'s related monthly numbers'),
342
              parameters={
343
                  'year': YEAR_PARAM,
344
                  'month': MONTH_PARAM,
345
                  'siret': SIRET_PARAM,
346
                  'object': OBJECT_PARAM,
347
                  'context': CONTEXT_PARAM,
348
                  'recipient': RECIPIENT_PARAM,
349
              })
350
    def etablissement_effectifs_mensuels_acoss_covid(self, request, year, month, siret, **kwargs):
351
        month = month.zfill(2)
352
        return self.get(
353
            'effectifs_mensuels_acoss_covid/%s/%s/etablissement/%s/' % (year, month, siret), **kwargs
354
        )
tests/test_api_entreprise.py
221 221
  ]
222 222
}
223 223

  
224

  
225
EFFECTIFS_ANNUELS_ACOSS_COVID = {
226
    "siren": "418166096",
227
    "annee": "2019",
228
    "effectifs_annuels": 100.5
229
}
230

  
231

  
232
ENTREPRISE_EFFECTIFS_MENSUELS_ACOSS_COVID = {
233
    "siren": "418166096",
234
    "annee": "2019",
235
    "mois": "02",
236
    "effectifs_mensuels": 100.5
237
}
238

  
239

  
240
ETABLISSEMENT_EFFECTIFS_MENSUELS_ACOSS_COVID = {
241
    "siret": "41816609600051",
242
    "annee": "2019",
243
    "mois": "02",
244
    "effectifs_mensuels": 100.5
245
}
246

  
247

  
224 248
DOCUMENT_ASSOCIATION_RESPONSE = "binary content"
225 249

  
226 250
REQUEST_PARAMS = {'context': 'MSP', 'object': 'demand', 'recipient': 'siret'}
......
259 283
    return response(200, DOCUMENT_ASSOCIATION_RESPONSE, request=request)
260 284

  
261 285

  
286
@urlmatch(netloc='^entreprise.api.gouv.fr$',
287
          path='^/v2/effectifs_annuels_acoss_covid/')
288
def effectifs_annuels_acoss_covid(url, request):
289
    return response(200, EFFECTIFS_ANNUELS_ACOSS_COVID, request=request)
290

  
291

  
292
@urlmatch(netloc='^entreprise.api.gouv.fr$',
293
          path='^/v2/effectifs_mensuels_acoss_covid/.*/entreprise')
294
def entreprise_effectifs_mensuels_acoss_covid(url, request):
295
    return response(200, ENTREPRISE_EFFECTIFS_MENSUELS_ACOSS_COVID, request=request)
296

  
297

  
298
@urlmatch(netloc='^entreprise.api.gouv.fr$',
299
          path='^/v2/effectifs_mensuels_acoss_covid/.*/etablissement')
300
def etablisssment_effectifs_mensuels_acoss_covid(url, request):
301
    return response(200, ETABLISSEMENT_EFFECTIFS_MENSUELS_ACOSS_COVID, request=request)
302

  
303

  
262 304
@urlmatch(netloc='^entreprise.api.gouv.fr$')
263 305
def api_entreprise_error_500(url, request):
264 306
    return response(500, 'bad error happened', request=request)
......
282 324

  
283 325
@pytest.yield_fixture
284 326
def mock_api_entreprise():
285
    with HTTMock(api_entreprise_etablissements, api_entreprise_entreprises, api_entreprise_associations, api_entreprise_extraits_rcs,
286
                 api_entreprise_associations, api_entreprise_documents_associations, api_entreprise_document_association):
327
    with HTTMock(
328
            api_entreprise_etablissements, api_entreprise_entreprises, api_entreprise_associations,
329
            api_entreprise_extraits_rcs, api_entreprise_associations, api_entreprise_documents_associations,
330
            api_entreprise_document_association, effectifs_annuels_acoss_covid,
331
            entreprise_effectifs_mensuels_acoss_covid, etablisssment_effectifs_mensuels_acoss_covid):
287 332
        yield None
288 333

  
289 334

  
......
436 481
    resp = app.get(document['url'], status=404)
437 482

  
438 483

  
484
def test_effectifs_annuels_acoss_covid(app, resource, mock_api_entreprise, freezer):
485
    response = app.get('/api-entreprise/test/effectifs_annuels_acoss_covid/418166096/',
486
                       params=REQUEST_PARAMS)
487
    data = response.json['data']
488
    assert data['siren'] == '418166096'
489
    assert data['annee'] == '2019'
490
    assert data['effectifs_annuels'] == 100.5
491

  
492

  
493
def test_entreprise_effectifs_mensuels_acoss_covid(app, resource, mock_api_entreprise, freezer):
494
    response = app.get('/api-entreprise/test/entreprise_effectifs_mensuels_acoss_covid/2019/02/418166096/',
495
                       params=REQUEST_PARAMS)
496
    data = response.json['data']
497
    assert data['siren'] == '418166096'
498
    assert data['annee'] == '2019'
499
    assert data['mois'] == '02'
500
    assert data['effectifs_mensuels'] == 100.5
501

  
502

  
503
def test_etablissment_effectifs_mensuels_acoss_covid(app, resource, mock_api_entreprise, freezer):
504
    response = app.get('/api-entreprise/test/etablissement_effectifs_mensuels_acoss_covid/2019/02/418166096/',
505
                       params=REQUEST_PARAMS)
506
    data = response.json['data']
507
    assert data['siret'] == '41816609600051'
508
    assert data['annee'] == '2019'
509
    assert data['mois'] == '02'
510
    assert data['effectifs_mensuels'] == 100.5
511

  
512

  
439 513
def test_error_500(app, resource, mock_api_entreprise):
440 514
    with HTTMock(api_entreprise_error_500):
441 515
        response = app.get('/api-entreprise/test/entreprises/443170139/',
442
-