Projet

Général

Profil

0001-api_particulier-add-slots-endpoint-36932.patch

Nicolas Roche, 19 mai 2021 17:25

Télécharger (4,47 ko)

Voir les différences:

Subject: [PATCH] api_particulier: add slots endpoint (#36932)

 passerelle/apps/api_particulier/models.py | 10 +++++++
 tests/test_api_particulier.py             | 36 ++++++++++++++++++++++-
 2 files changed, 45 insertions(+), 1 deletion(-)
passerelle/apps/api_particulier/models.py
125 125
                    'content': data,
126 126
                },
127 127
            )
128 128
        return {
129 129
            'err': 0,
130 130
            'data': data,
131 131
        }
132 132

  
133
    @endpoint(
134
        perm='can_access',
135
        description=_('Get scopes available'),
136
        display_order=1,
137
    )
138
    def scopes(self, request):
139
        response = self.get('introspect')
140
        response['data'] = sorted(response['data'].get('scopes'))
141
        return response
142

  
133 143
    @endpoint(
134 144
        perm='can_access',
135 145
        show=False,
136 146
        description=_('Get citizen\'s fiscal informations'),
137 147
        parameters={
138 148
            'numero_fiscal': {
139 149
                'description': _('fiscal identifier'),
140 150
                'example_value': '1562456789521',
tests/test_api_particulier.py
69 69
        {"dateDeNaissance": "18101969", "nomPrenom": "JEAN DUPONT", "sexe": "M"},
70 70
    ],
71 71
    "annee": 2017,
72 72
    "enfants": [{"dateDeNaissance": "11122016", "nomPrenom": "LUCIE DUPONT", "sexe": "F"}],
73 73
    "mois": 4,
74 74
    "quotientFamilial": 1754,
75 75
}
76 76

  
77
INTROSPECT = {
78
    "_id": "1d99db5a-a099-4314-ad2f-2707c6b505a6",
79
    "name": "Application de sandbox",
80
    "scopes": [
81
        "dgfip_avis_imposition",
82
        "dgfip_adresse",
83
        "cnaf_allocataires",
84
        "cnaf_enfants",
85
        "cnaf_adresse",
86
        "cnaf_quotient_familial",
87
        "mesri_statut_etudiant",
88
    ],
89
}
90

  
77 91

  
78 92
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$', path=r'^/api/v2/avis-imposition$')
79 93
def api_particulier_v2_avis_imposition(url, request):
80 94
    return response(200, SVAIR_RESPONSE, request=request)
81 95

  
82 96

  
83 97
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$', path=r'^/api/v2/composition-familiale$')
84 98
def api_particulier_v2_situation_familiale(url, request):
85 99
    return response(200, CAF_FAMILLE, request=request)
86 100

  
87 101

  
102
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$', path=r'^/api/introspect$')
103
def api_particulier_introspect(url, request):
104
    return response(200, INTROSPECT, request=request)
105

  
106

  
88 107
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$')
89 108
def api_particulier_error_500(url, request):
90 109
    return response(500, {'error': 500}, request=request)
91 110

  
92 111

  
93 112
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$')
94 113
def api_particulier_connection_error(url, request):
95 114
    raise requests.RequestException('connection timed-out')
......
127 146
        404,
128 147
        {'error': 'not_found', 'message': 'Dossier radié. Le document ne peut être édité.'},
129 148
        request=request,
130 149
    )
131 150

  
132 151

  
133 152
@pytest.fixture
134 153
def mock_api_particulier():
135
    with HTTMock(api_particulier_v2_avis_imposition, api_particulier_v2_situation_familiale):
154
    with HTTMock(
155
        api_particulier_v2_avis_imposition, api_particulier_v2_situation_familiale, api_particulier_introspect
156
    ):
136 157
        yield None
137 158

  
138 159

  
139 160
@pytest.fixture
140 161
def resource(db):
141 162
    return make_resource(
142 163
        APIParticulier,
143 164
        slug='test',
......
328 349
            },
329 350
        )
330 351
    logs = ResourceLog.objects.all()
331 352
    assert logs.count() == 3
332 353
    if should_log:
333 354
        assert logs.filter(levelno=logging.ERROR).count() == 1
334 355
    else:
335 356
        assert not logs.filter(levelno=logging.ERROR).exists()
357

  
358

  
359
def test_scopes(app, resource, mock_api_particulier):
360
    resp = endpoint_get('/api-particulier/test/scopes', app, resource, 'scopes')
361
    assert resp.json['data'] == [
362
        "cnaf_adresse",
363
        "cnaf_allocataires",
364
        "cnaf_enfants",
365
        "cnaf_quotient_familial",
366
        "dgfip_adresse",
367
        "dgfip_avis_imposition",
368
        "mesri_statut_etudiant",
369
    ]
336
-