Projet

Général

Profil

0001-api_particulier-adapt-to-v2-URLS-43273.patch

Benjamin Dauvergne, 25 mai 2020 17:09

Télécharger (10,5 ko)

Voir les différences:

Subject: [PATCH] api_particulier: adapt to v2 URLS (#43273)

 passerelle/apps/api_particulier/models.py | 42 +++++++---
 tests/test_api_particulier.py             | 99 ++++-------------------
 2 files changed, 46 insertions(+), 95 deletions(-)
passerelle/apps/api_particulier/models.py
120 120
        }
121 121

  
122 122
    @endpoint(perm='can_access',
123
              description=_('Get citizen\'s fiscal informations'),
123
              description=_('Get citizen\'s fiscal informations (deprecated URL)'),
124 124
              parameters={
125 125
                  'numero_fiscal': {
126 126
                      'description': _('fiscal identifier'),
......
136 136
                  },
137 137
              })
138 138
    def impots_svair(self, request, numero_fiscal, reference_avis, user=None):
139
        if not numero_fiscal.strip() or not reference_avis.strip():
140
            raise APIError('missing numero_fiscal or reference_avis', status_code=400)
141
        return self.get('impots/svair', params={
142
            'numeroFiscal': numero_fiscal,
143
            'referenceAvis': reference_avis[:13],
144
        }, user=user)
139
        return self.v2_avis_imposition(request, numero_fiscal, reference_avis, user=user)
145 140

  
146
    @endpoint(perm='can_access',
147
              description=_('Get citizen\'s fiscal address'),
141
    @endpoint(name='avis-imposition',
142
              perm='can_access',
143
              description=_('Get citizen\'s fiscal informations'),
148 144
              parameters={
149 145
                  'numero_fiscal': {
150 146
                      'description': _('fiscal identifier'),
......
159 155
                      'example_value': 'John Doe (agent)',
160 156
                  },
161 157
              })
162
    def impots_adresse(self, request, numero_fiscal, reference_avis, user=None):
158
    def v2_avis_imposition(self, request, numero_fiscal, reference_avis, user=None):
163 159
        if not numero_fiscal.strip() or not reference_avis.strip():
164 160
            raise APIError('missing numero_fiscal or reference_avis', status_code=400)
165
        return self.get('impots/adress', params={
161
        return self.get('v2/avis-imposition', params={
166 162
            'numeroFiscal': numero_fiscal,
167 163
            'referenceAvis': reference_avis[:13],
168 164
        }, user=user)
169 165

  
170 166
    @endpoint(perm='can_access',
171
              description=_('Get family allowances recipient informations'),
167
              description=_('Get family allowances recipient informations (deprecated URL)'),
172 168
              parameters={
173 169
                  'code_postal': {
174 170
                      'description': _('postal code'),
......
184 180
                  },
185 181
              })
186 182
    def caf_famille(self, request, code_postal, numero_allocataire, user=None):
183
        return self.v2_situation_familiale(request, code_postal, numero_allocataire, user=user)
184

  
185
    @endpoint(name='situation-familiale',
186
              perm='can_access',
187
              description=_('Get family allowances recipient informations'),
188
              parameters={
189
                  'code_postal': {
190
                      'description': _('postal code'),
191
                      'example_value': '99148',
192
                  },
193
                  'numero_allocataire': {
194
                      'description': _('recipient identifier'),
195
                      'example_value': '0000354',
196
                  },
197
                  'user': {
198
                      'description': _('requesting user'),
199
                      'example_value': 'John Doe (agent)',
200
                  },
201
              })
202
    def v2_situation_familiale(self, request, code_postal, numero_allocataire, user=None):
187 203
        if not code_postal.strip() or not numero_allocataire.strip():
188 204
            raise APIError('missing code_postal or numero_allocataire', status_code=400)
189
        return self.get('caf/famille', params={
205
        return self.get('v2/situation-familiale', params={
190 206
            'codePostal': code_postal,
191 207
            'numeroAllocataire': numero_allocataire,
192 208
        }, user=user)
tests/test_api_particulier.py
56 56
    "anneeRevenus": "2014"
57 57
}
58 58

  
59
IMPOTS_ADRESSE = {
60
    "adresses": [
61
        {
62
            "adresse": {
63
                "citycode": "75108",
64
                "street": "Rue Balzac",
65
                "name": "12 Rue Balzac",
66
                "housenumber": "12",
67
                "city": "Paris",
68
                "type": "housenumber",
69
                "context": "75, Île-de-France",
70
                "score": 0.9401454545454544,
71
                "label": "12 Rue Balzac 75008 Paris",
72
                "postcode": "75008"
73
            },
74
            "geometry": {
75
                "type": "Point",
76
                "coordinates": [
77
                    2.300816,
78
                    48.873951
79
                ]
80
            }
81
        }
82
    ],
83
    "declarant1": {
84
        "nom": "Martin",
85
        "nomNaissance": "Martin",
86
        "prenoms": "Pierre",
87
        "dateNaissance": "22/03/1985"
88
    },
89
    "declarant2": {
90
        "nom": "Martin",
91
        "nomNaissance": "Honore",
92
        "prenoms": "Marie",
93
        "dateNaissance": "03/04/1986"
94
    },
95
    "foyerFiscal": {
96
        "annee": 2015,
97
        "adresse": "12 rue Balzac 75008 Paris"
98
    }
99
}
100

  
101 59
CAF_FAMILLE = {
102 60
    "adresse": {
103 61
        "codePostalVille": "12345 CONDAT",
......
132 90

  
133 91

  
134 92
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$',
135
          path=r'^/api/impots/svair$')
136
def api_particulier_impots_svair(url, request):
93
          path=r'^/api/v2/avis-imposition$')
94
def api_particulier_v2_avis_imposition(url, request):
137 95
    return response(200, SVAIR_RESPONSE, request=request)
138 96

  
139

  
140 97
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$',
141
          path=r'^/api/impots/adress$')
142
def api_particulier_impots_adresse(url, request):
143
    return response(200, IMPOTS_ADRESSE, request=request)
144

  
145

  
146
@urlmatch(netloc=r'^particulier.*\.api\.gouv\.fr$',
147
          path=r'^/api/caf/famille$')
148
def api_particulier_caf_famille(url, request):
98
          path=r'^/api/v2/situation-familiale$')
99
def api_particulier_v2_situation_familiale(url, request):
149 100
    return response(200, CAF_FAMILLE, request=request)
150 101

  
151 102

  
......
169 120

  
170 121
@pytest.yield_fixture
171 122
def mock_api_particulier():
172
    with HTTMock(api_particulier_impots_svair, api_particulier_impots_adresse, api_particulier_caf_famille):
123
    with HTTMock(api_particulier_v2_avis_imposition, api_particulier_v2_situation_familiale):
173 124
        yield None
174 125

  
175 126

  
......
197 148
            assert resp.json['err'] == 1
198 149
            assert resp.json['data']['status_code'] == 500
199 150
        vector = [
200
            (['impots_svair', 'impots_adresse'], {
151
            (['impots_svair', 'avis-imposition'], {
201 152
                'numero_fiscal': 12,
202 153
                'reference_avis': 15,
203 154
            }),
204
            (['caf_famille'], {
155
            (['caf_famille', 'situation-familiale'], {
205 156
                'code_postal': 12,
206 157
                'numero_allocataire': 15
207 158
            }),
......
221 172
            assert resp.json['err'] == 1
222 173
            assert 'returned non-JSON content' in resp.json['err_desc']
223 174
        vector = [
224
            (['impots_svair', 'impots_adresse'], {
175
            (['impots_svair', 'avis-imposition'], {
225 176
                'numero_fiscal': 12,
226 177
                'reference_avis': 15,
227 178
            }),
228
            (['caf_famille'], {
179
            (['caf_famille', 'situation-familiale'], {
229 180
                'code_postal': 12,
230 181
                'numero_allocataire': 15
231 182
            }),
......
245 196
            assert resp.json['err'] == 1
246 197
            assert resp.json['err_desc'].endswith(u'à un avis')
247 198
        vector = [
248
            (['impots_svair', 'impots_adresse'], {
199
            (['impots_svair', 'avis-imposition'], {
249 200
                'numero_fiscal': 12,
250 201
                'reference_avis': 15,
251 202
            }),
252
            (['caf_famille'], {
203
            (['caf_famille', 'situation-familiale'], {
253 204
                'code_postal': 12,
254 205
                'numero_allocataire': 15
255 206
            }),
......
259 210
                do(endpoint, params)
260 211

  
261 212

  
262
def test_impots_svair(app, resource, mock_api_particulier):
213
def test_avis_imposition(app, resource, mock_api_particulier):
263 214
    resp = endpoint_get(
264
        '/api-particulier/test/impots_svair',
215
        '/api-particulier/test/avis-imposition',
265 216
        app,
266 217
        resource,
267
        'impots_svair',
218
        'avis-imposition',
268 219
        params={
269 220
            'numero_fiscal': 12,
270 221
            'reference_avis': 15,
......
273 224
    assert resp.json['data']['montantImpot'] == 2165
274 225

  
275 226

  
276
def test_impots_adresse(app, resource, mock_api_particulier):
227
def test_situation_familiale(app, resource, mock_api_particulier):
277 228
    resp = endpoint_get(
278
        '/api-particulier/test/impots_adresse',
229
        '/api-particulier/test/situation-familiale',
279 230
        app,
280 231
        resource,
281
        'impots_adresse',
282
        params={
283
            'numero_fiscal': 12,
284
            'reference_avis': 15,
285
            'user': 'John Doe',
286
        })
287
    assert resp.json['data']['adresses'][0]['adresse']['citycode'] == '75108'
288

  
289

  
290
def test_caf_famille(app, resource, mock_api_particulier):
291
    resp = endpoint_get(
292
        '/api-particulier/test/caf_famille',
293
        app,
294
        resource,
295
        'caf_famille',
232
        'situation-familiale',
296 233
        params={
297 234
            'code_postal': '99148',
298 235
            'numero_allocataire': '000354',
......
309 246
    assert 'API Particulier Prod' in response.text
310 247
    assert 'family allowance' in response.text
311 248
    assert 'fiscal information' in response.text
312
    assert 'fiscal address' in response.text
313

  
314
-