Projet

Général

Profil

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

Emmanuel Cazenave, 06 avril 2020 15:30

Télécharger (10,2 ko)

Voir les différences:

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

 passerelle/apps/api_entreprise/models.py | 95 ++++++++++++++++++++++++
 tests/test_api_entreprise.py             | 91 ++++++++++++++++++++++-
 2 files changed, 184 insertions(+), 2 deletions(-)
passerelle/apps/api_entreprise/models.py
323 323
    def entreprises(self, request, siren, **kwargs):
324 324
        return self.get('entreprises/%s/' % siren, **kwargs)
325 325

  
326
    @endpoint(perm='can_access',
327
              pattern=r'(?P<siren>\w+)/$',
328
              example_pattern='{siren}/',
329
              description=_('Get firm\'s related numbers'),
330
              parameters={
331
                  'siren': {
332
                      'description': _('firm SIREN number'),
333
                      'example_value': '44317013900036',
334
                  },
335
                  'object': {
336
                      'description': _('request object: form number, file identifier...'),
337
                      'example_value': '42'
338
                  },
339
                  'context': {
340
                      'description': _('request context: MPS, APS...'),
341
                      'example_value': 'APS'
342
                  },
343
                  'recipient': {
344
                      'description': _('request recipient: usually customer number'),
345
                      'example_value': '44317013900036'
346
                  }
347
              })
348
    def effectifs_annuels_acoss_covid(self, request, siren, **kwargs):
349
        return self.get('effectifs_annuels_acoss_covid/%s/' % siren, **kwargs)
350

  
351
    @endpoint(perm='can_access',
352
              pattern=r'(?P<year>\w+)/(?P<month>\w+)/(?P<siren>\w+)/$',
353
              example_pattern='{siren}/',
354
              description=_('Get firm\'s related monthly numbers'),
355
              parameters={
356
                  'year': {
357
                      'description': _('requested year'),
358
                      'example_value': '2019',
359
                  },
360
                  'month': {
361
                      'description': _('requested month'),
362
                      'example_value': '02',
363
                  },
364
                  'siren': {
365
                      'description': _('firm SIREN number'),
366
                      'example_value': '44317013900036',
367
                  },
368
                  'object': {
369
                      'description': _('request object: form number, file identifier...'),
370
                      'example_value': '42'
371
                  },
372
                  'context': {
373
                      'description': _('request context: MPS, APS...'),
374
                      'example_value': 'APS'
375
                  },
376
                  'recipient': {
377
                      'description': _('request recipient: usually customer number'),
378
                      'example_value': '44317013900036'
379
                  }
380
              })
381
    def entreprise_effectifs_mensuels_acoss_covid(self, request, year, month, siren, **kwargs):
382
        return self.get(
383
            'effectifs_mensuels_acoss_covid/%s/%s/entreprise/%s/' % (year, month, siren), **kwargs
384
        )
385

  
386
    @endpoint(perm='can_access',
387
              pattern=r'(?P<year>\w+)/(?P<month>\w+)/(?P<siret>\w+)/$',
388
              example_pattern='{siren}/',
389
              description=_('Get firm\'s related monthly numbers'),
390
              parameters={
391
                  'year': {
392
                      'description': _('requested year'),
393
                      'example_value': '2019',
394
                  },
395
                  'month': {
396
                      'description': _('requested month'),
397
                      'example_value': '02',
398
                  },
399
                  'siren': {
400
                      'description': _('firm SIRET number'),
401
                      'example_value': '44317013900036',
402
                  },
403
                  'object': {
404
                      'description': _('request object: form number, file identifier...'),
405
                      'example_value': '42'
406
                  },
407
                  'context': {
408
                      'description': _('request context: MPS, APS...'),
409
                      'example_value': 'APS'
410
                  },
411
                  'recipient': {
412
                      'description': _('request recipient: usually customer number'),
413
                      'example_value': '44317013900036'
414
                  }
415
              })
416
    def etablissement_effectifs_mensuels_acoss_covid(self, request, year, month, siret, **kwargs):
417
        return self.get(
418
            'effectifs_mensuels_acoss_covid/%s/%s/etablissement/%s/' % (year, month, siret), **kwargs
419
        )
420

  
326 421
    @endpoint(perm='can_access',
327 422
              methods=['get'],
328 423
              pattern=r'(?P<siret>\w+)/$',
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

  
......
415 460
    assert data['date_immatriculation_datetime'] == '1998-03-26T23:00:00Z'
416 461

  
417 462

  
463
def test_extraits_rcs(app, resource, mock_api_entreprise, freezer):
464
    response = app.get('/api-entreprise/test/extraits_rcs/443170139/',
465
                       params=REQUEST_PARAMS)
466
    assert 'data' in response.json
467
    data = response.json['data']
468

  
469
    assert data['siren'] == '418166096'
470
    assert data['date_extrait'] == '21 AVRIL 2017'
471
    assert data['date_immatriculation_timestamp'] == 890953200
472
    assert data['date_immatriculation'] == '1998-03-27'
473
    assert data['date_immatriculation_datetime'] == '1998-03-26T23:00:00Z'
474

  
475

  
418 476
def test_document_association(app, resource, mock_api_entreprise, freezer):
419 477
    response = app.get('/api-entreprise/test/documents_associations/443170139/',
420 478
                       params=REQUEST_PARAMS)
......
436 494
    resp = app.get(document['url'], status=404)
437 495

  
438 496

  
497
def test_effectifs_annuels_acoss_covid(app, resource, mock_api_entreprise, freezer):
498
    response = app.get('/api-entreprise/test/effectifs_annuels_acoss_covid/418166096/',
499
                       params=REQUEST_PARAMS)
500
    data = response.json['data']
501
    assert data['siren'] == '418166096'
502
    assert data['annee'] == '2019'
503
    assert data['effectifs_annuels'] == 100.5
504

  
505

  
506
def test_entreprise_effectifs_mensuels_acoss_covid(app, resource, mock_api_entreprise, freezer):
507
    response = app.get('/api-entreprise/test/entreprise_effectifs_mensuels_acoss_covid/2019/02/418166096/',
508
                       params=REQUEST_PARAMS)
509
    data = response.json['data']
510
    assert data['siren'] == '418166096'
511
    assert data['annee'] == '2019'
512
    assert data['mois'] == '02'
513
    assert data['effectifs_mensuels'] == 100.5
514

  
515

  
516
def test_etablissment_effectifs_mensuels_acoss_covid(app, resource, mock_api_entreprise, freezer):
517
    response = app.get('/api-entreprise/test/etablissement_effectifs_mensuels_acoss_covid/2019/02/418166096/',
518
                       params=REQUEST_PARAMS)
519
    data = response.json['data']
520
    assert data['siret'] == '41816609600051'
521
    assert data['annee'] == '2019'
522
    assert data['mois'] == '02'
523
    assert data['effectifs_mensuels'] == 100.5
524

  
525

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