Projet

Général

Profil

0001-lille-urban-card-add-subscription-revocation-endpoin.patch

Frédéric Péters, 05 février 2020 09:45

Télécharger (7,17 ko)

Voir les différences:

Subject: [PATCH] lille urban card: add subscription revocation endpoint
 (#39545)

 passerelle/contrib/lille_urban_card/models.py | 62 ++++++++++++-------
 tests/test_lille_urban_card.py                | 27 +++++++-
 2 files changed, 67 insertions(+), 22 deletions(-)
passerelle/contrib/lille_urban_card/models.py
80 80
            {'id': '99', 'text': "Ne souhaite pas se prononcer"},
81 81
        ]}
82 82

  
83
    def preprocess_request_data(self, data):
83
    def preprocess_contact_data(self, data):
84
        if data.get('telephone'):
85
            data['telephone'] = ''.join(re.findall(r'\d', data['telephone']))
86
        if data.get('civilite'):
87
            if data['civilite'] == 'Monsieur':
88
                data['civilite'] = 1
89
            else:
90
                data['civilite'] = 2
91
        if data.get('code_postal'):
92
            data['code_postal'] = int(data['code_postal'])
93
        if data.get('ville'):
94
            data['ville'] = data['ville'].upper()
95
        if data.get('photo'):
96
            data['photo'] = data['photo']['content']
97

  
98
    def preprocess_card_request_data(self, data):
84 99
        for kind_of_optional_field in ('nom_naissance', 'telephone', 'complement_numero_voie'):
85 100
            if not data.get(kind_of_optional_field):
86 101
                data[kind_of_optional_field] = ''
......
91 106
                data[boolean_field] = 1
92 107
            else:
93 108
                data[boolean_field] = 0
94
        if data.get('telephone'):
95
            data['telephone'] = ''.join(re.findall(r'\d', data['telephone']))
96
        if data['civilite'] == 'Monsieur':
97
            data['civilite'] = 1
98
        else:
99
            data['civilite'] = 2
100
        data['code_postal'] = int(data['code_postal'])
101
        data['ville'] = data['ville'].upper()
102
        data['photo'] = data['photo']['content']
109

  
110
    def preprocess_service_data(self, data):
103 111
        services = {}
104 112
        for key in sorted(data.keys()):
105 113
            if key.startswith('service_'):
......
119 127
    @endpoint(perm='can_access', description=_('Card Request'), methods=['post'])
120 128
    def card_request(self, request, *args, **kwargs):
121 129
        data = json_loads(request.body)
122
        self.preprocess_request_data(data)
130
        self.preprocess_card_request_data(data)
131
        self.preprocess_contact_data(data)
132
        self.preprocess_service_data(data)
123 133
        response = self.requests.post(
124 134
                urljoin(self.base_url, '/clu/ws/demanderCarte'),
125 135
                json=data,
......
147 157
    @endpoint(perm='can_access', description=_('Add new subscriptions'), methods=['post'])
148 158
    def add_subscriptions(self, request, *args, **kwargs):
149 159
        data = json_loads(request.body)
150
        self.preprocess_request_data(data)
160
        self.preprocess_card_request_data(data)
161
        self.preprocess_contact_data(data)
162
        self.preprocess_service_data(data)
151 163
        response = self.requests.post(
152 164
                urljoin(self.base_url, '/clu/ws/ajouterAbonnements'),
153 165
                json=data,
......
176 188
    @endpoint(perm='can_access', description=_('Card Revocation'), methods=['post'])
177 189
    def card_revocation(self, request, *args, **kwargs):
178 190
        data = json_loads(request.body)
179
        if data.get('civilite'):
180
            if data['civilite'] == 'Monsieur':
181
                data['civilite'] = 1
182
            else:
183
                data['civilite'] = 2
184
        if data.get('code_postal'):
185
            data['code_postal'] = int(data['code_postal'])
186
        if data.get('ville'):
187
            data['ville'] = data['ville'].upper()
191
        self.preprocess_contact_data(data)
188 192
        response = self.requests.post(
189 193
                urljoin(self.base_url, '/clu/ws/revoquerCarte'),
190 194
                json=data,
......
195 199
            response_json['status_code'] = response.status_code
196 200
            raise APIError(response_json['erreur'], data=response_json)
197 201
        return {'data': response_json}  # {"message": "La demande..."}
202

  
203
    @endpoint(perm='can_access', description=_('Subscription Revocation'), methods=['post'])
204
    def subscription_revocation(self, request, *args, **kwargs):
205
        data = json_loads(request.body)
206
        self.preprocess_contact_data(data)
207
        self.preprocess_service_data(data)
208
        response = self.requests.post(
209
                urljoin(self.base_url, '/clu/ws/revoquerAbonnement'),
210
                json=data,
211
                auth=HttpBearerAuth(self.get_token()))
212
        response_json = response.json()
213
        if response_json.get('erreur'):
214
            self.logger.error('error revoking subscripton (%r)', response_json['erreur'])
215
            response_json['status_code'] = response.status_code
216
            raise APIError(response_json['erreur'], data=response_json)
217
        return {'data': response_json}  # {"n_demande_clu":10000005}
tests/test_lille_urban_card.py
64 64
            error = {'statut': 'ERREUR_NUM_SERIE', 'erreur': 'Le numero de serie...'}
65 65
            return {'content': json.dumps(error), 'status_code': 404}
66 66
        return {'content': json.dumps({}), 'status_code': 200}
67
    if url.path == '/clu/ws/revoquerCarte':
67
    if url.path in ('/clu/ws/revoquerCarte', '/clu/ws/revoquerAbonnement'):
68 68
        request_json = json_loads(request.body)
69 69
        if request_json.get('simulate_error') == 'doublon':
70 70
            error = {'erreur': 'La demande xx existe...'}
......
231 231
        }, status=200)
232 232
        assert resp.json['err'] == 1
233 233
        assert resp.json['data']['status_code'] == 409
234

  
235

  
236
def test_subscription_revocation(app, connector):
237
    endpoint = utils.generic_endpoint_url('lille-urban-card', 'subscription_revocation', slug=connector.slug)
238
    with HTTMock(mocked_http):
239
        resp = app.post_json(endpoint, params={
240
            'n_demande_gru': '12-123',
241
            'numero_serie': 'XXX',
242
            'date_demande': '05/02/2020',
243
            'service_zoo': 'Oui',
244
            'service_zoo_newsletter': 'Non',
245
        })
246
        assert resp.json['err'] == 0
247

  
248
        # error handling
249
        resp = app.post_json(endpoint, params={
250
            'simulate_error': 'doublon',
251
            'n_demande_gru': '12-123',
252
            'numero_serie': 'XXX',
253
            'date_demande': '05/02/2020',
254
            'service_zoo': 'Oui',
255
            'service_zoo_newsletter': 'Non',
256
        }, status=200)
257
        assert resp.json['err'] == 1
258
        assert resp.json['data']['status_code'] == 409
234
-