83 |
83 |
|
84 |
84 |
|
85 |
85 |
class MockedService:
|
86 |
|
def __init__(self, success, error_class, replydata):
|
|
86 |
def __init__(self, success=True, error_class=None, replydata=None):
|
87 |
87 |
self.success = success
|
88 |
88 |
self.error_class = error_class
|
89 |
89 |
self.replydata = replydata
|
... | ... | |
115 |
115 |
return mock.Mock(create_service=create_service, service=service)
|
116 |
116 |
|
117 |
117 |
|
118 |
|
def test_call_service_error(dpark, app):
|
119 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
120 |
|
client.return_value = get_client(error_class=WebFault)
|
121 |
|
resp = app.get('/dpark/test/ping/')
|
122 |
|
assert 'ServiceError: ' in resp.json['err_desc']
|
123 |
|
client.return_value = get_client(error_class=TransportError)
|
124 |
|
resp = app.get('/dpark/test/ping/')
|
125 |
|
assert 'Error: connection error occured' in resp.json['err_desc']
|
126 |
|
client.return_value = get_client(error_class=Exception)
|
127 |
|
resp = app.get('/dpark/test/ping/')
|
128 |
|
assert 'Error: random error' in resp.json['err_desc']
|
129 |
|
client.return_value = get_client(error_class=WebFaultHavingLatin1)
|
130 |
|
resp = app.get('/dpark/test/ping/')
|
131 |
|
assert 'ServiceError: éêè' in resp.json['err_desc']
|
132 |
|
|
133 |
|
|
134 |
|
def test_ping(dpark, app):
|
135 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
136 |
|
client.return_value = get_client(replydata={'Code_Retour': '01', 'Lib_Retour': 'whatever'})
|
137 |
|
resp = app.get('/dpark/test/ping/')
|
138 |
|
assert resp.json['data'] is True
|
139 |
|
|
140 |
|
|
141 |
|
def test_search(dpark, app):
|
142 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
143 |
|
params = {
|
144 |
|
'lastname': 'bar',
|
145 |
|
'firstnames': 'foo',
|
146 |
|
'filenumber': '1' * 9,
|
147 |
|
'cardnumber': '3' * 9,
|
148 |
|
}
|
149 |
|
# missing lastname
|
150 |
|
app.get('/dpark/test/search/', params={'firstnames': 'toto'}, status=400)
|
151 |
|
# unknown file
|
152 |
|
client.return_value = get_client(replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'})
|
153 |
|
resp = app.get('/dpark/test/search/', params=params)
|
154 |
|
assert resp.json['err'] == 1
|
155 |
|
assert resp.json['code'] == 'unknown-file'
|
156 |
|
# invalid cardnumber
|
157 |
|
client.return_value = get_client(
|
158 |
|
replydata={'CodeRetour': '04', 'MessageRetour': 'Numéro de support inconnu'}
|
159 |
|
)
|
160 |
|
resp = app.get('/dpark/test/search/', params=params)
|
161 |
|
assert resp.json['err'] == 1
|
162 |
|
assert resp.json['code'] == 'support-number-unknown'
|
163 |
|
# valid data
|
164 |
|
client.return_value = get_client(replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'})
|
165 |
|
resp = app.get('/dpark/test/search/', params=params)
|
166 |
|
assert resp.json['err'] == 0
|
167 |
|
|
168 |
|
|
169 |
|
def test_link(dpark, app):
|
170 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
171 |
|
params = {
|
172 |
|
'lastname': 'bar ',
|
173 |
|
'firstnames': ' foo',
|
174 |
|
'filenumber': ' ' + '1' * 9,
|
175 |
|
}
|
176 |
|
# missing nameid
|
177 |
|
app.post_json('/dpark/test/link/', params=params, status=400)
|
178 |
|
params['nameid'] = 'abcd' * 8
|
179 |
|
# unknown file
|
180 |
|
client.return_value = get_client(replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'})
|
181 |
|
resp = app.post_json('/dpark/test/link/', params=params)
|
182 |
|
assert resp.json['err'] == 1
|
183 |
|
assert resp.json['code'] == 'unknown-file'
|
184 |
|
# invalid cardnumber
|
185 |
|
client.return_value = get_client(
|
186 |
|
replydata={'CodeRetour': '04', 'MessageRetour': 'Numéro de support inconnu'}
|
187 |
|
)
|
188 |
|
resp = app.post_json('/dpark/test/link/', params=params)
|
189 |
|
assert resp.json['err'] == 1
|
190 |
|
assert resp.json['code'] == 'support-number-unknown'
|
191 |
|
# valid data
|
192 |
|
client.return_value = get_client(replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'})
|
193 |
|
resp = app.post_json('/dpark/test/link/', params=params)
|
194 |
|
assert resp.json['err'] == 0
|
195 |
|
assert Pairing.objects.count() == 1
|
196 |
|
pairing = Pairing.objects.get(resource=dpark)
|
197 |
|
assert pairing.nameid == 'abcd' * 8
|
198 |
|
assert pairing.filenumber == '1' * 9
|
199 |
|
assert pairing.firstnames == 'foo'
|
200 |
|
assert pairing.lastname == 'bar'
|
201 |
|
|
202 |
|
|
203 |
|
def test_unlink(dpark, app):
|
204 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client', get_client()):
|
205 |
|
nameid = 'abcd' * 8
|
206 |
|
params = {'nameid': nameid}
|
207 |
|
# missing nameid
|
208 |
|
app.post_json('/dpark/test/unlink/', params={}, status=400)
|
209 |
|
# no pairing exists
|
210 |
|
resp = app.post_json('/dpark/test/unlink/', params=params)
|
211 |
|
assert resp.json['err'] == 1
|
212 |
|
assert resp.json['err_desc'] == 'No pairing exists'
|
213 |
|
# pairing exist
|
214 |
|
Pairing.objects.create(
|
215 |
|
resource=dpark,
|
216 |
|
nameid=nameid,
|
217 |
|
lastname='bar',
|
218 |
|
firstnames='foo',
|
219 |
|
filenumber='1' * 9,
|
220 |
|
badgenumber='2' * 9,
|
221 |
|
cardnumber='3' * 9,
|
222 |
|
)
|
223 |
|
resp = app.post_json('/dpark/test/unlink/', params=params)
|
224 |
|
assert resp.json['data'] is True
|
225 |
|
assert Pairing.objects.count() == 0
|
|
118 |
@pytest.fixture
|
|
119 |
def get_service():
|
|
120 |
with mock.patch('passerelle.contrib.dpark.models.get_service') as get_service:
|
|
121 |
yield get_service
|
|
122 |
|
|
123 |
|
|
124 |
def test_call_service_error(dpark, app, get_service):
|
|
125 |
get_service.return_value = MockedService(error_class=WebFault)
|
|
126 |
resp = app.get('/dpark/test/ping/')
|
|
127 |
assert 'ServiceError: ' in resp.json['err_desc']
|
|
128 |
get_service.return_value = MockedService(error_class=TransportError)
|
|
129 |
resp = app.get('/dpark/test/ping/')
|
|
130 |
assert 'Error: connection error occured' in resp.json['err_desc']
|
|
131 |
get_service.return_value = MockedService(error_class=Exception)
|
|
132 |
resp = app.get('/dpark/test/ping/')
|
|
133 |
assert 'Error: random error' in resp.json['err_desc']
|
|
134 |
get_service.return_value = MockedService(error_class=WebFaultHavingLatin1)
|
|
135 |
resp = app.get('/dpark/test/ping/')
|
|
136 |
assert 'ServiceError: éêè' in resp.json['err_desc']
|
|
137 |
|
|
138 |
|
|
139 |
def test_ping(dpark, app, get_service):
|
|
140 |
get_service.return_value = MockedService(replydata={'Code_Retour': '01', 'Lib_Retour': 'whatever'})
|
|
141 |
resp = app.get('/dpark/test/ping/')
|
|
142 |
assert resp.json['data'] is True
|
|
143 |
|
|
144 |
|
|
145 |
def test_search(dpark, app, get_service):
|
|
146 |
params = {
|
|
147 |
'lastname': 'bar',
|
|
148 |
'firstnames': 'foo',
|
|
149 |
'filenumber': '1' * 9,
|
|
150 |
'cardnumber': '3' * 9,
|
|
151 |
}
|
|
152 |
# missing lastname
|
|
153 |
app.get('/dpark/test/search/', params={'firstnames': 'toto'}, status=400)
|
|
154 |
# unknown file
|
|
155 |
get_service.return_value = MockedService(
|
|
156 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'}
|
|
157 |
)
|
|
158 |
resp = app.get('/dpark/test/search/', params=params)
|
|
159 |
assert resp.json['err'] == 1
|
|
160 |
assert resp.json['code'] == 'unknown-file'
|
|
161 |
# invalid cardnumber
|
|
162 |
get_service.return_value = MockedService(
|
|
163 |
replydata={'CodeRetour': '04', 'MessageRetour': 'Numéro de support inconnu'}
|
|
164 |
)
|
|
165 |
resp = app.get('/dpark/test/search/', params=params)
|
|
166 |
assert resp.json['err'] == 1
|
|
167 |
assert resp.json['code'] == 'support-number-unknown'
|
|
168 |
# valid data
|
|
169 |
get_service.return_value = MockedService(
|
|
170 |
replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'}
|
|
171 |
)
|
|
172 |
resp = app.get('/dpark/test/search/', params=params)
|
|
173 |
assert resp.json['err'] == 0
|
|
174 |
|
|
175 |
|
|
176 |
def test_link(dpark, app, get_service):
|
|
177 |
params = {
|
|
178 |
'lastname': 'bar ',
|
|
179 |
'firstnames': ' foo',
|
|
180 |
'filenumber': ' ' + '1' * 9,
|
|
181 |
}
|
|
182 |
# missing nameid
|
|
183 |
app.post_json('/dpark/test/link/', params=params, status=400)
|
|
184 |
params['nameid'] = 'abcd' * 8
|
|
185 |
# unknown file
|
|
186 |
get_service.return_value = MockedService(
|
|
187 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'}
|
|
188 |
)
|
|
189 |
resp = app.post_json('/dpark/test/link/', params=params)
|
|
190 |
assert resp.json['err'] == 1
|
|
191 |
assert resp.json['code'] == 'unknown-file'
|
|
192 |
# invalid cardnumber
|
|
193 |
get_service.return_value = MockedService(
|
|
194 |
replydata={'CodeRetour': '04', 'MessageRetour': 'Numéro de support inconnu'}
|
|
195 |
)
|
|
196 |
resp = app.post_json('/dpark/test/link/', params=params)
|
|
197 |
assert resp.json['err'] == 1
|
|
198 |
assert resp.json['code'] == 'support-number-unknown'
|
|
199 |
# valid data
|
|
200 |
get_service.return_value = MockedService(
|
|
201 |
replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'}
|
|
202 |
)
|
|
203 |
resp = app.post_json('/dpark/test/link/', params=params)
|
|
204 |
assert resp.json['err'] == 0
|
|
205 |
assert Pairing.objects.count() == 1
|
|
206 |
pairing = Pairing.objects.get(resource=dpark)
|
|
207 |
assert pairing.nameid == 'abcd' * 8
|
|
208 |
assert pairing.filenumber == '1' * 9
|
|
209 |
assert pairing.firstnames == 'foo'
|
|
210 |
assert pairing.lastname == 'bar'
|
|
211 |
|
|
212 |
|
|
213 |
def test_unlink(dpark, app, get_service):
|
|
214 |
get_service.return_value = MockedService()
|
|
215 |
nameid = 'abcd' * 8
|
|
216 |
params = {'nameid': nameid}
|
|
217 |
# missing nameid
|
|
218 |
app.post_json('/dpark/test/unlink/', params={}, status=400)
|
|
219 |
# no pairing exists
|
|
220 |
resp = app.post_json('/dpark/test/unlink/', params=params)
|
|
221 |
assert resp.json['err'] == 1
|
|
222 |
assert resp.json['err_desc'] == 'No pairing exists'
|
|
223 |
# pairing exist
|
|
224 |
Pairing.objects.create(
|
|
225 |
resource=dpark,
|
|
226 |
nameid=nameid,
|
|
227 |
lastname='bar',
|
|
228 |
firstnames='foo',
|
|
229 |
filenumber='1' * 9,
|
|
230 |
badgenumber='2' * 9,
|
|
231 |
cardnumber='3' * 9,
|
|
232 |
)
|
|
233 |
resp = app.post_json('/dpark/test/unlink/', params=params)
|
|
234 |
assert resp.json['data'] is True
|
|
235 |
assert Pairing.objects.count() == 0
|
226 |
236 |
|
227 |
237 |
|
228 |
238 |
def test_address_eligibility(dpark, app):
|
... | ... | |
271 |
281 |
assert content['address']['address_locality'] == 'Toulouse'
|
272 |
282 |
|
273 |
283 |
|
274 |
|
def test_subscriber_infos(dpark, app):
|
275 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
276 |
|
nameid = 'abcd' * 8
|
277 |
|
url = '/dpark/test/infos/%s/' % nameid
|
278 |
|
params = {
|
279 |
|
'nameid': nameid,
|
280 |
|
'firstnames': 'spam eggs',
|
281 |
|
'lastname': 'bar',
|
282 |
|
'filenumber': '1' * 9,
|
283 |
|
'badgenumber': '2' * 9,
|
284 |
|
}
|
285 |
|
Pairing.objects.create(resource=dpark, **params)
|
286 |
|
# unknown subscriber
|
287 |
|
resp = app.get('/dpark/test/infos/toto/')
|
288 |
|
assert resp.json['data'] == []
|
289 |
|
# unknown file
|
290 |
|
client.return_value = get_client(replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'})
|
291 |
|
resp = app.get(url)
|
292 |
|
assert resp.json['data'] == []
|
293 |
|
# known file
|
294 |
|
replydata = {
|
295 |
|
'CodeRetour': '01',
|
296 |
|
'MessageRetour': 'Dossier existant',
|
297 |
|
"Adresse_BoitePostaleLieuDit": None,
|
298 |
|
"Adresse_CodePostal": "44000",
|
299 |
|
"Adresse_CodeSTI": "315553609651",
|
300 |
|
"Adresse_EtageEscalierAppartement": None,
|
301 |
|
"Adresse_Extension": 1,
|
302 |
|
"Adresse_ImmeubleBatimentResidence": None,
|
303 |
|
"Adresse_Localite": "Nantes",
|
304 |
|
"Adresse_NomVoie": "All\u00e9es Jean Jaur\u00e8s",
|
305 |
|
"Adresse_NumeroVoie": 80,
|
306 |
|
"Adresse_Quartier": "PERI",
|
307 |
|
"Demande_DateDebutAbo": "20180625",
|
308 |
|
"Demande_DateFinAbo": "20190624",
|
309 |
|
"Demande_DelaiAutorise": 30,
|
310 |
|
"Demande_ImmatVehicule1": "CX453AD",
|
311 |
|
"Demande_ImmatVehicule2": None,
|
312 |
|
"Demande_MarqueVehicule1": "CITROEN",
|
313 |
|
"Demande_MarqueVehicule2": None,
|
314 |
|
"Demande_ModeleVehicule1": "GS",
|
315 |
|
"Demande_ModeleVehicule2": None,
|
316 |
|
"Demande_NumeroDossier": 22952,
|
317 |
|
"Demandeur_Civilite": 1,
|
318 |
|
"Demandeur_Email": "spameggs@example.net",
|
319 |
|
"Demandeur_NomUsuel": "BAR",
|
320 |
|
"Demandeur_Prenom": "Foo Spam",
|
321 |
|
"Demandeur_TelephoneFixe": "0611111111",
|
322 |
|
"Demandeur_TelephonePortable": None,
|
323 |
|
}
|
324 |
|
client.return_value = get_client(replydata=replydata)
|
325 |
|
resp = app.get(url)
|
326 |
|
data = resp.json['data']
|
327 |
|
assert data[0]['id'] == '22952'
|
328 |
|
assert data[0]['text'] == '22952 - BAR Foo Spam - CX453AD'
|
329 |
|
assert data[0]['adresse_codepostal'] == '44000'
|
330 |
|
assert data[0]['adresse_codesti'] == '315553609651'
|
331 |
|
assert data[0]['adresse_localite'] == 'Nantes'
|
332 |
|
assert data[0]['demande_numerodossier'] == 22952
|
333 |
|
assert data[0]['demandeur_email'] == 'spameggs@example.net'
|
334 |
|
assert data[0]['demandeur_telephonefixe'] == '0611111111'
|
335 |
|
assert data[0]['demande_datedebutabo'] == '2018-06-25'
|
336 |
|
assert data[0]['demande_datefinabo'] == '2019-06-24'
|
337 |
|
|
338 |
|
# mutiple pairing
|
339 |
|
Pairing.objects.create(
|
340 |
|
resource=dpark,
|
341 |
|
nameid=nameid,
|
342 |
|
firstnames='monty',
|
343 |
|
lastname='eggs',
|
344 |
|
filenumber='5' * 9,
|
345 |
|
badgenumber='6' * 9,
|
346 |
|
cardnumber='7' * 9,
|
347 |
|
)
|
348 |
|
replydata2 = {
|
349 |
|
'CodeRetour': '01',
|
350 |
|
'MessageRetour': 'Dossier existant',
|
351 |
|
"Adresse_BoitePostaleLieuDit": None,
|
352 |
|
"Adresse_CodePostal": "94000",
|
353 |
|
"Adresse_CodeSTI": "315553609651",
|
354 |
|
"Adresse_EtageEscalierAppartement": None,
|
355 |
|
"Adresse_Extension": 1,
|
356 |
|
"Adresse_ImmeubleBatimentResidence": None,
|
357 |
|
"Adresse_Localite": "Creteil",
|
358 |
|
"Adresse_NomVoie": "Allée les sablons",
|
359 |
|
"Adresse_NumeroVoie": 5,
|
360 |
|
"Adresse_Quartier": "HOOLI",
|
361 |
|
"Demande_DateDebutAbo": "20180430",
|
362 |
|
"Demande_DateFinAbo": None,
|
363 |
|
"Demande_DelaiAutorise": 30,
|
364 |
|
"Demande_ImmatVehicule1": "AA555BB",
|
365 |
|
"Demande_ImmatVehicule2": "XX333YY",
|
366 |
|
"Demande_MarqueVehicule1": "FORD",
|
367 |
|
"Demande_MarqueVehicule2": "MERCEDES",
|
368 |
|
"Demande_ModeleVehicule1": "Fiesta",
|
369 |
|
"Demande_ModeleVehicule2": "Serie A",
|
370 |
|
"Demande_NumeroDossier": 22955,
|
371 |
|
"Demandeur_Civilite": 1,
|
372 |
|
"Demandeur_Email": "spameggs@example.net",
|
373 |
|
"Demandeur_NomUsuel": "EGGS",
|
374 |
|
"Demandeur_Prenom": "Monty",
|
375 |
|
"Demandeur_TelephoneFixe": "0611111111",
|
376 |
|
"Demandeur_TelephonePortable": None,
|
377 |
|
}
|
378 |
|
# there will be only one call as first pairing is now cached
|
379 |
|
client.side_effect = [get_client(replydata=replydata2)]
|
380 |
|
resp = app.get(url)
|
381 |
|
data = resp.json['data']
|
382 |
|
assert len(data) == 2
|
383 |
|
assert data[1]['id'] == '22955'
|
384 |
|
assert data[1]['text'] == '22955 - EGGS Monty - AA555BB/XX333YY'
|
385 |
|
assert data[1]['adresse_codepostal'] == '94000'
|
386 |
|
assert data[1]['adresse_codesti'] == '315553609651'
|
387 |
|
assert data[1]['adresse_localite'] == 'Creteil'
|
388 |
|
assert data[1]['demande_numerodossier'] == 22955
|
389 |
|
assert data[1]['demandeur_email'] == 'spameggs@example.net'
|
390 |
|
assert data[1]['demandeur_telephonefixe'] == '0611111111'
|
391 |
|
assert data[1]['demande_datedebutabo'] == '2018-04-30'
|
392 |
|
assert data[1]['demande_datefinabo'] is None
|
393 |
|
|
394 |
|
# filtering by filenumber
|
395 |
|
for pairing in Pairing.objects.all():
|
396 |
|
pairing.clear_cache()
|
397 |
|
# we modify numerodossier to verify cache is not used
|
398 |
|
replydata['Demande_NumeroDossier'] = 22953
|
399 |
|
client.side_effect = [
|
400 |
|
get_client(replydata=replydata),
|
401 |
|
]
|
402 |
|
resp = app.get(url, params={'filenumber': '1' * 9})
|
403 |
|
data = resp.json['data']
|
404 |
|
assert len(data) == 1
|
405 |
|
assert data[0]['id'] == '22953'
|
406 |
|
assert data[0]['text'] == '22953 - BAR Foo Spam - CX453AD'
|
407 |
|
assert data[0]['adresse_codepostal'] == '44000'
|
408 |
|
assert data[0]['adresse_codesti'] == '315553609651'
|
409 |
|
assert data[0]['adresse_localite'] == 'Nantes'
|
410 |
|
assert data[0]['demande_numerodossier'] == 22953
|
411 |
|
assert data[0]['demandeur_email'] == 'spameggs@example.net'
|
412 |
|
assert data[0]['demandeur_telephonefixe'] == '0611111111'
|
413 |
|
assert data[0]['demande_datedebutabo'] == '2018-06-25'
|
414 |
|
assert data[0]['demande_datefinabo'] == '2019-06-24'
|
415 |
|
|
416 |
|
|
417 |
|
def test_check_renewal_time(dpark, app):
|
418 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
419 |
|
url = '/dpark/test/check-renewal-time/'
|
420 |
|
params = {'firstnames': 'spam eggs', 'lastname': 'bar', 'filenumber': '1' * 9, 'badgenumber': '2' * 9}
|
421 |
|
client.return_value = get_client(
|
422 |
|
replydata={'CodeRetour': '02', 'MessageRetour': 'Renouvellement hors délai'}
|
423 |
|
)
|
424 |
|
resp = app.get(url, params=params)
|
425 |
|
assert resp.json['data'] is False
|
426 |
|
assert resp.json['desc'] == 'Renouvellement hors délai'
|
427 |
|
client.return_value = get_client(replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'})
|
428 |
|
resp = app.get(url, params=params)
|
429 |
|
assert resp.json['data'] is True
|
430 |
|
|
431 |
|
|
432 |
|
def test_check_renewal_duplicate(dpark, app):
|
433 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
434 |
|
url = '/dpark/test/check-renewal-time/'
|
435 |
|
params = {'firstnames': 'spam eggs', 'lastname': 'bar', 'filenumber': '1' * 9, 'badgenumber': '2' * 9}
|
436 |
|
client.return_value = get_client(
|
437 |
|
replydata={'CodeRetour': '02', 'MessageRetour': 'Demande déjà en cours'}
|
438 |
|
)
|
439 |
|
resp = app.get(url, params=params)
|
440 |
|
assert resp.json['data'] is False
|
441 |
|
assert resp.json['desc'] == 'Demande déjà en cours'
|
442 |
|
client.return_value = get_client(replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'})
|
443 |
|
resp = app.get(url, params=params)
|
444 |
|
assert resp.json['data'] is True
|
445 |
|
assert resp.json['err'] == 0
|
446 |
|
|
447 |
|
|
448 |
|
def test_check_creation_duplicate(dpark, app):
|
449 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
450 |
|
url = '/dpark/test/check-creation-duplicate/'
|
451 |
|
params = {
|
452 |
|
'address_district': 'PERI',
|
453 |
|
'address_locality': 'Toulouse',
|
454 |
|
'address_sticode': '315553609651',
|
455 |
|
'address_streetext': '1',
|
456 |
|
'address_zipcode': '31000',
|
457 |
|
'applicant_firstnames': 'Spam',
|
458 |
|
'applicant_lastname': 'Ham',
|
459 |
|
}
|
460 |
|
client.return_value = get_client(
|
461 |
|
replydata={'CodeRetour': '02', 'MessageRetour': 'Demande déjà en cours'}
|
462 |
|
)
|
463 |
|
resp = app.get(url, params=params)
|
464 |
|
assert resp.json['data'] is False
|
465 |
|
assert resp.json['desc'] == 'Demande déjà en cours'
|
466 |
|
client.return_value = get_client(replydata={'CodeRetour': '01', 'MessageRetour': ''})
|
467 |
|
resp = app.get(url, params=params)
|
468 |
|
assert resp.json['data'] is True
|
469 |
|
assert resp.json['err'] == 0
|
470 |
|
|
471 |
|
|
472 |
|
def test_check_creation_not_renewal(dpark, app):
|
473 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
474 |
|
url = '/dpark/test/check-creation-not-renewal/'
|
475 |
|
params = {
|
476 |
|
'address_district': 'PERI',
|
477 |
|
'address_locality': 'Toulouse',
|
478 |
|
'address_sticode': '315553609651',
|
479 |
|
'address_streetext': '1',
|
480 |
|
'address_zipcode': '31000',
|
481 |
|
'applicant_firstnames': 'Spam',
|
482 |
|
'applicant_lastname': 'Ham',
|
483 |
|
}
|
484 |
|
client.return_value = get_client(
|
485 |
|
replydata={'CodeRetour': '02', 'MessageRetour': 'Usager existe déjà dans D-Park'}
|
486 |
|
)
|
487 |
|
resp = app.get(url, params=params)
|
488 |
|
assert resp.json['data'] is False
|
489 |
|
assert resp.json['desc'] == 'Usager existe déjà dans D-Park'
|
490 |
|
client.return_value = get_client(replydata={'CodeRetour': '01', 'MessageRetour': ''})
|
491 |
|
resp = app.get(url, params=params)
|
492 |
|
assert resp.json['data'] is True
|
493 |
|
|
494 |
|
|
495 |
|
def test_get_payment_infos(dpark, app):
|
496 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client') as client:
|
497 |
|
nameid = 'abcd' * 8
|
498 |
|
url = '/dpark/test/payment-info/%s/' % nameid
|
499 |
|
resp = app.get(url)
|
500 |
|
assert resp.json['err'] == 1
|
501 |
|
assert resp.json['err_desc'] == 'No pairing exists'
|
502 |
|
params = {
|
503 |
|
'nameid': nameid,
|
504 |
|
'firstnames': 'spam eggs',
|
505 |
|
'lastname': 'bar',
|
506 |
|
'filenumber': '1' * 9,
|
507 |
|
'badgenumber': '2' * 9,
|
508 |
|
}
|
509 |
|
Pairing.objects.create(resource=dpark, **params)
|
510 |
|
client.return_value = get_client(replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'})
|
511 |
|
resp = app.get(url)
|
512 |
|
assert resp.json['err'] == 0
|
513 |
|
assert resp.json['data'] == []
|
514 |
|
replydata = {
|
515 |
|
'CodeRetour': '01',
|
516 |
|
'MessageRetour': 'Demande acceptée',
|
517 |
|
'NumeroDemande': '55555',
|
518 |
|
'Montant': 12500,
|
519 |
|
'TypePaiement': 10,
|
520 |
|
'NumeroTeledossierPhase1': 'E-8-0AA666BB',
|
521 |
|
}
|
522 |
|
client.return_value = get_client(replydata=replydata)
|
523 |
|
resp = app.get(url)
|
524 |
|
data = resp.json['data'][0]
|
525 |
|
assert data['montant'] == 125
|
526 |
|
assert data['typepaiement'] == 10
|
527 |
|
assert data['typepaiement_text'] == 'Carte Bancaire via Internet'
|
528 |
|
assert data['numerodemande'] == '55555'
|
|
284 |
def test_subscriber_infos(dpark, app, get_service):
|
|
285 |
nameid = 'abcd' * 8
|
|
286 |
url = '/dpark/test/infos/%s/' % nameid
|
|
287 |
params = {
|
|
288 |
'nameid': nameid,
|
|
289 |
'firstnames': 'spam eggs',
|
|
290 |
'lastname': 'bar',
|
|
291 |
'filenumber': '1' * 9,
|
|
292 |
'badgenumber': '2' * 9,
|
|
293 |
}
|
|
294 |
Pairing.objects.create(resource=dpark, **params)
|
|
295 |
# unknown subscriber
|
|
296 |
resp = app.get('/dpark/test/infos/toto/')
|
|
297 |
assert resp.json['data'] == []
|
|
298 |
# unknown file
|
|
299 |
get_service.return_value = MockedService(
|
|
300 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'}
|
|
301 |
)
|
|
302 |
resp = app.get(url)
|
|
303 |
assert resp.json['data'] == []
|
|
304 |
# known file
|
|
305 |
replydata = {
|
|
306 |
'CodeRetour': '01',
|
|
307 |
'MessageRetour': 'Dossier existant',
|
|
308 |
"Adresse_BoitePostaleLieuDit": None,
|
|
309 |
"Adresse_CodePostal": "44000",
|
|
310 |
"Adresse_CodeSTI": "315553609651",
|
|
311 |
"Adresse_EtageEscalierAppartement": None,
|
|
312 |
"Adresse_Extension": 1,
|
|
313 |
"Adresse_ImmeubleBatimentResidence": None,
|
|
314 |
"Adresse_Localite": "Nantes",
|
|
315 |
"Adresse_NomVoie": "All\u00e9es Jean Jaur\u00e8s",
|
|
316 |
"Adresse_NumeroVoie": 80,
|
|
317 |
"Adresse_Quartier": "PERI",
|
|
318 |
"Demande_DateDebutAbo": "20180625",
|
|
319 |
"Demande_DateFinAbo": "20190624",
|
|
320 |
"Demande_DelaiAutorise": 30,
|
|
321 |
"Demande_ImmatVehicule1": "CX453AD",
|
|
322 |
"Demande_ImmatVehicule2": None,
|
|
323 |
"Demande_MarqueVehicule1": "CITROEN",
|
|
324 |
"Demande_MarqueVehicule2": None,
|
|
325 |
"Demande_ModeleVehicule1": "GS",
|
|
326 |
"Demande_ModeleVehicule2": None,
|
|
327 |
"Demande_NumeroDossier": 22952,
|
|
328 |
"Demandeur_Civilite": 1,
|
|
329 |
"Demandeur_Email": "spameggs@example.net",
|
|
330 |
"Demandeur_NomUsuel": "BAR",
|
|
331 |
"Demandeur_Prenom": "Foo Spam",
|
|
332 |
"Demandeur_TelephoneFixe": "0611111111",
|
|
333 |
"Demandeur_TelephonePortable": None,
|
|
334 |
}
|
|
335 |
get_service.return_value = MockedService(replydata=replydata)
|
|
336 |
resp = app.get(url)
|
|
337 |
data = resp.json['data']
|
|
338 |
assert data[0]['id'] == '22952'
|
|
339 |
assert data[0]['text'] == '22952 - BAR Foo Spam - CX453AD'
|
|
340 |
assert data[0]['adresse_codepostal'] == '44000'
|
|
341 |
assert data[0]['adresse_codesti'] == '315553609651'
|
|
342 |
assert data[0]['adresse_localite'] == 'Nantes'
|
|
343 |
assert data[0]['demande_numerodossier'] == 22952
|
|
344 |
assert data[0]['demandeur_email'] == 'spameggs@example.net'
|
|
345 |
assert data[0]['demandeur_telephonefixe'] == '0611111111'
|
|
346 |
assert data[0]['demande_datedebutabo'] == '2018-06-25'
|
|
347 |
assert data[0]['demande_datefinabo'] == '2019-06-24'
|
|
348 |
|
|
349 |
# mutiple pairing
|
|
350 |
Pairing.objects.create(
|
|
351 |
resource=dpark,
|
|
352 |
nameid=nameid,
|
|
353 |
firstnames='monty',
|
|
354 |
lastname='eggs',
|
|
355 |
filenumber='5' * 9,
|
|
356 |
badgenumber='6' * 9,
|
|
357 |
cardnumber='7' * 9,
|
|
358 |
)
|
|
359 |
replydata2 = {
|
|
360 |
'CodeRetour': '01',
|
|
361 |
'MessageRetour': 'Dossier existant',
|
|
362 |
"Adresse_BoitePostaleLieuDit": None,
|
|
363 |
"Adresse_CodePostal": "94000",
|
|
364 |
"Adresse_CodeSTI": "315553609651",
|
|
365 |
"Adresse_EtageEscalierAppartement": None,
|
|
366 |
"Adresse_Extension": 1,
|
|
367 |
"Adresse_ImmeubleBatimentResidence": None,
|
|
368 |
"Adresse_Localite": "Creteil",
|
|
369 |
"Adresse_NomVoie": "Allée les sablons",
|
|
370 |
"Adresse_NumeroVoie": 5,
|
|
371 |
"Adresse_Quartier": "HOOLI",
|
|
372 |
"Demande_DateDebutAbo": "20180430",
|
|
373 |
"Demande_DateFinAbo": None,
|
|
374 |
"Demande_DelaiAutorise": 30,
|
|
375 |
"Demande_ImmatVehicule1": "AA555BB",
|
|
376 |
"Demande_ImmatVehicule2": "XX333YY",
|
|
377 |
"Demande_MarqueVehicule1": "FORD",
|
|
378 |
"Demande_MarqueVehicule2": "MERCEDES",
|
|
379 |
"Demande_ModeleVehicule1": "Fiesta",
|
|
380 |
"Demande_ModeleVehicule2": "Serie A",
|
|
381 |
"Demande_NumeroDossier": 22955,
|
|
382 |
"Demandeur_Civilite": 1,
|
|
383 |
"Demandeur_Email": "spameggs@example.net",
|
|
384 |
"Demandeur_NomUsuel": "EGGS",
|
|
385 |
"Demandeur_Prenom": "Monty",
|
|
386 |
"Demandeur_TelephoneFixe": "0611111111",
|
|
387 |
"Demandeur_TelephonePortable": None,
|
|
388 |
}
|
|
389 |
# there will be only one call as first pairing is now cached
|
|
390 |
get_service.side_effect = [MockedService(replydata=replydata2)]
|
|
391 |
resp = app.get(url)
|
|
392 |
data = resp.json['data']
|
|
393 |
assert len(data) == 2
|
|
394 |
assert data[1]['id'] == '22955'
|
|
395 |
assert data[1]['text'] == '22955 - EGGS Monty - AA555BB/XX333YY'
|
|
396 |
assert data[1]['adresse_codepostal'] == '94000'
|
|
397 |
assert data[1]['adresse_codesti'] == '315553609651'
|
|
398 |
assert data[1]['adresse_localite'] == 'Creteil'
|
|
399 |
assert data[1]['demande_numerodossier'] == 22955
|
|
400 |
assert data[1]['demandeur_email'] == 'spameggs@example.net'
|
|
401 |
assert data[1]['demandeur_telephonefixe'] == '0611111111'
|
|
402 |
assert data[1]['demande_datedebutabo'] == '2018-04-30'
|
|
403 |
assert data[1]['demande_datefinabo'] is None
|
|
404 |
|
|
405 |
# filtering by filenumber
|
|
406 |
for pairing in Pairing.objects.all():
|
|
407 |
pairing.clear_cache()
|
|
408 |
# we modify numerodossier to verify cache is not used
|
|
409 |
replydata['Demande_NumeroDossier'] = 22953
|
|
410 |
get_service.side_effect = [
|
|
411 |
MockedService(replydata=replydata),
|
|
412 |
]
|
|
413 |
resp = app.get(url, params={'filenumber': '1' * 9})
|
|
414 |
data = resp.json['data']
|
|
415 |
assert len(data) == 1
|
|
416 |
assert data[0]['id'] == '22953'
|
|
417 |
assert data[0]['text'] == '22953 - BAR Foo Spam - CX453AD'
|
|
418 |
assert data[0]['adresse_codepostal'] == '44000'
|
|
419 |
assert data[0]['adresse_codesti'] == '315553609651'
|
|
420 |
assert data[0]['adresse_localite'] == 'Nantes'
|
|
421 |
assert data[0]['demande_numerodossier'] == 22953
|
|
422 |
assert data[0]['demandeur_email'] == 'spameggs@example.net'
|
|
423 |
assert data[0]['demandeur_telephonefixe'] == '0611111111'
|
|
424 |
assert data[0]['demande_datedebutabo'] == '2018-06-25'
|
|
425 |
assert data[0]['demande_datefinabo'] == '2019-06-24'
|
|
426 |
|
|
427 |
|
|
428 |
def test_check_renewal_time(dpark, app, get_service):
|
|
429 |
url = '/dpark/test/check-renewal-time/'
|
|
430 |
params = {'firstnames': 'spam eggs', 'lastname': 'bar', 'filenumber': '1' * 9, 'badgenumber': '2' * 9}
|
|
431 |
get_service.return_value = MockedService(
|
|
432 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Renouvellement hors délai'}
|
|
433 |
)
|
|
434 |
resp = app.get(url, params=params)
|
|
435 |
assert resp.json['data'] is False
|
|
436 |
assert resp.json['desc'] == 'Renouvellement hors délai'
|
|
437 |
get_service.return_value = MockedService(
|
|
438 |
replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'}
|
|
439 |
)
|
|
440 |
resp = app.get(url, params=params)
|
|
441 |
assert resp.json['data'] is True
|
|
442 |
|
|
443 |
|
|
444 |
def test_check_renewal_duplicate(dpark, app, get_service):
|
|
445 |
url = '/dpark/test/check-renewal-time/'
|
|
446 |
params = {'firstnames': 'spam eggs', 'lastname': 'bar', 'filenumber': '1' * 9, 'badgenumber': '2' * 9}
|
|
447 |
get_service.return_value = MockedService(
|
|
448 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Demande déjà en cours'}
|
|
449 |
)
|
|
450 |
resp = app.get(url, params=params)
|
|
451 |
assert resp.json['data'] is False
|
|
452 |
assert resp.json['desc'] == 'Demande déjà en cours'
|
|
453 |
get_service.return_value = MockedService(
|
|
454 |
replydata={'CodeRetour': '01', 'MessageRetour': 'Dossier existant'}
|
|
455 |
)
|
|
456 |
resp = app.get(url, params=params)
|
|
457 |
assert resp.json['data'] is True
|
|
458 |
assert resp.json['err'] == 0
|
|
459 |
|
|
460 |
|
|
461 |
def test_check_creation_duplicate(dpark, app, get_service):
|
|
462 |
url = '/dpark/test/check-creation-duplicate/'
|
|
463 |
params = {
|
|
464 |
'address_district': 'PERI',
|
|
465 |
'address_locality': 'Toulouse',
|
|
466 |
'address_sticode': '315553609651',
|
|
467 |
'address_streetext': '1',
|
|
468 |
'address_zipcode': '31000',
|
|
469 |
'applicant_firstnames': 'Spam',
|
|
470 |
'applicant_lastname': 'Ham',
|
|
471 |
}
|
|
472 |
get_service.return_value = MockedService(
|
|
473 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Demande déjà en cours'}
|
|
474 |
)
|
|
475 |
resp = app.get(url, params=params)
|
|
476 |
assert resp.json['data'] is False
|
|
477 |
assert resp.json['desc'] == 'Demande déjà en cours'
|
|
478 |
get_service.return_value = MockedService(replydata={'CodeRetour': '01', 'MessageRetour': ''})
|
|
479 |
resp = app.get(url, params=params)
|
|
480 |
assert resp.json['data'] is True
|
|
481 |
assert resp.json['err'] == 0
|
|
482 |
|
|
483 |
|
|
484 |
def test_check_creation_not_renewal(dpark, app, get_service):
|
|
485 |
url = '/dpark/test/check-creation-not-renewal/'
|
|
486 |
params = {
|
|
487 |
'address_district': 'PERI',
|
|
488 |
'address_locality': 'Toulouse',
|
|
489 |
'address_sticode': '315553609651',
|
|
490 |
'address_streetext': '1',
|
|
491 |
'address_zipcode': '31000',
|
|
492 |
'applicant_firstnames': 'Spam',
|
|
493 |
'applicant_lastname': 'Ham',
|
|
494 |
}
|
|
495 |
get_service.return_value = MockedService(
|
|
496 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Usager existe déjà dans D-Park'}
|
|
497 |
)
|
|
498 |
resp = app.get(url, params=params)
|
|
499 |
assert resp.json['data'] is False
|
|
500 |
assert resp.json['desc'] == 'Usager existe déjà dans D-Park'
|
|
501 |
get_service.return_value = MockedService(replydata={'CodeRetour': '01', 'MessageRetour': ''})
|
|
502 |
resp = app.get(url, params=params)
|
|
503 |
assert resp.json['data'] is True
|
|
504 |
|
|
505 |
|
|
506 |
def test_get_payment_infos(dpark, app, get_service):
|
|
507 |
nameid = 'abcd' * 8
|
|
508 |
url = '/dpark/test/payment-info/%s/' % nameid
|
|
509 |
resp = app.get(url)
|
|
510 |
assert resp.json['err'] == 1
|
|
511 |
assert resp.json['err_desc'] == 'No pairing exists'
|
|
512 |
params = {
|
|
513 |
'nameid': nameid,
|
|
514 |
'firstnames': 'spam eggs',
|
|
515 |
'lastname': 'bar',
|
|
516 |
'filenumber': '1' * 9,
|
|
517 |
'badgenumber': '2' * 9,
|
|
518 |
}
|
|
519 |
Pairing.objects.create(resource=dpark, **params)
|
|
520 |
get_service.return_value = MockedService(
|
|
521 |
replydata={'CodeRetour': '02', 'MessageRetour': 'Dossier inconnu'}
|
|
522 |
)
|
|
523 |
resp = app.get(url)
|
|
524 |
assert resp.json['err'] == 0
|
|
525 |
assert resp.json['data'] == []
|
|
526 |
replydata = {
|
|
527 |
'CodeRetour': '01',
|
|
528 |
'MessageRetour': 'Demande acceptée',
|
|
529 |
'NumeroDemande': '55555',
|
|
530 |
'Montant': 12500,
|
|
531 |
'TypePaiement': 10,
|
|
532 |
'NumeroTeledossierPhase1': 'E-8-0AA666BB',
|
|
533 |
}
|
|
534 |
get_service.return_value = MockedService(replydata=replydata)
|
|
535 |
resp = app.get(url)
|
|
536 |
data = resp.json['data'][0]
|
|
537 |
assert data['montant'] == 125
|
|
538 |
assert data['typepaiement'] == 10
|
|
539 |
assert data['typepaiement_text'] == 'Carte Bancaire via Internet'
|
|
540 |
assert data['numerodemande'] == '55555'
|
529 |
541 |
|
530 |
542 |
|
531 |
543 |
@pytest.mark.parametrize(
|
... | ... | |
536 |
548 |
('2018-06-11T23:59:00', '20180612'),
|
537 |
549 |
],
|
538 |
550 |
)
|
539 |
|
def test_payment_notification(dpark, app, transaction_datetime, expected_date):
|
|
551 |
def test_payment_notification(dpark, app, transaction_datetime, expected_date, get_service):
|
540 |
552 |
operation = mock.Mock(name='PLS_NOTIFCB')
|
541 |
553 |
service = mock.Mock(spec=['PLS_NOTIFCB'], PLS_NOTIFCB=operation)
|
542 |
|
create_service = mock.Mock(spec=[], return_value=service)
|
543 |
|
client = mock.NonCallableMock(spec=['create_service'], create_service=create_service)
|
544 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client', return_value=client):
|
545 |
|
nameid = 'abcd' * 8
|
546 |
|
filenumber = '1' * 9
|
547 |
|
params = {
|
|
554 |
get_service.return_value = service
|
|
555 |
|
|
556 |
nameid = 'abcd' * 8
|
|
557 |
filenumber = '1' * 9
|
|
558 |
params = {
|
|
559 |
'nameid': nameid,
|
|
560 |
'filenumber': filenumber,
|
|
561 |
'transaction_id': 'I123456789',
|
|
562 |
'transaction_datetime': transaction_datetime,
|
|
563 |
'total_amount': '125',
|
|
564 |
'application_id': '61718',
|
|
565 |
'application_external_id': 'E-8-N5UTAK6P',
|
|
566 |
}
|
|
567 |
url = '/dpark/test/notify-payment/'
|
|
568 |
resp = app.post_json(url, params=params)
|
|
569 |
assert resp.json['err'] == 1
|
|
570 |
assert resp.json['err_desc'] == 'No pairing exists'
|
|
571 |
Pairing.objects.create(
|
|
572 |
resource=dpark,
|
|
573 |
**{
|
548 |
574 |
'nameid': nameid,
|
|
575 |
'firstnames': 'spam eggs',
|
|
576 |
'lastname': 'bar',
|
549 |
577 |
'filenumber': filenumber,
|
550 |
|
'transaction_id': 'I123456789',
|
551 |
|
'transaction_datetime': transaction_datetime,
|
552 |
|
'total_amount': '125',
|
553 |
|
'application_id': '61718',
|
554 |
|
'application_external_id': 'E-8-N5UTAK6P',
|
555 |
|
}
|
556 |
|
url = '/dpark/test/notify-payment/'
|
557 |
|
resp = app.post_json(url, params=params)
|
558 |
|
assert resp.json['err'] == 1
|
559 |
|
assert resp.json['err_desc'] == 'No pairing exists'
|
560 |
|
Pairing.objects.create(
|
561 |
|
resource=dpark,
|
562 |
|
**{
|
563 |
|
'nameid': nameid,
|
564 |
|
'firstnames': 'spam eggs',
|
565 |
|
'lastname': 'bar',
|
566 |
|
'filenumber': filenumber,
|
567 |
|
'badgenumber': '2' * 9,
|
568 |
|
},
|
569 |
|
)
|
570 |
|
operation.return_value = mock.Mock(CodeRetour='02', MessageRetour='Dossier inconnu')
|
571 |
|
resp = app.post_json(url, params=params)
|
572 |
|
assert operation.call_args_list[-1].args[5] == expected_date
|
573 |
|
assert resp.json['err'] == 1
|
574 |
|
assert resp.json['err_desc'] == 'Dossier inconnu'
|
575 |
|
operation.return_value = mock.Mock(CodeRetour='01')
|
576 |
|
resp = app.post_json(url, params=params)
|
577 |
|
assert resp.json['data'] is True
|
|
578 |
'badgenumber': '2' * 9,
|
|
579 |
},
|
|
580 |
)
|
|
581 |
operation.return_value = mock.Mock(CodeRetour='02', MessageRetour='Dossier inconnu')
|
|
582 |
resp = app.post_json(url, params=params)
|
|
583 |
assert operation.call_args_list[-1].args[5] == expected_date
|
|
584 |
assert resp.json['err'] == 1
|
|
585 |
assert resp.json['err_desc'] == 'Dossier inconnu'
|
|
586 |
operation.return_value = mock.Mock(CodeRetour='01')
|
|
587 |
resp = app.post_json(url, params=params)
|
|
588 |
assert resp.json['data'] is True
|
578 |
589 |
|
579 |
590 |
|
580 |
591 |
@pytest.mark.parametrize('application_thirdparty_subscription', [True, False])
|
... | ... | |
867 |
878 |
('2018-06-11T23:59:00', '20180612'),
|
868 |
879 |
],
|
869 |
880 |
)
|
870 |
|
def test_payment_notification_double_plaque(dpark, app, transaction_datetime, expected_date):
|
|
881 |
def test_payment_notification_double_plaque(dpark, app, transaction_datetime, expected_date, get_service):
|
871 |
882 |
operation = mock.Mock(name='PLS_NOTIFCB2')
|
872 |
883 |
service = mock.Mock(spec=['PLS_NOTIFCB2'], PLS_NOTIFCB2=operation)
|
873 |
|
create_service = mock.Mock(spec=[], return_value=service)
|
874 |
|
client = mock.NonCallableMock(spec=['create_service'], create_service=create_service)
|
875 |
|
with mock.patch('passerelle.contrib.dpark.models.get_client', return_value=client):
|
876 |
|
nameid = 'abcd' * 8
|
877 |
|
filenumber = '1' * 9
|
878 |
|
params = {
|
|
884 |
get_service.return_value = service
|
|
885 |
|
|
886 |
nameid = 'abcd' * 8
|
|
887 |
filenumber = '1' * 9
|
|
888 |
params = {
|
|
889 |
'nameid': nameid,
|
|
890 |
'filenumber': filenumber,
|
|
891 |
'transaction_id': 'I123456789',
|
|
892 |
'transaction_datetime': transaction_datetime,
|
|
893 |
'total_amount': '125',
|
|
894 |
'application_id': '61718',
|
|
895 |
'application_external_id': 'E-8-N5UTAK6P',
|
|
896 |
'double_plaque': '1',
|
|
897 |
}
|
|
898 |
url = '/dpark/test/notify-payment/'
|
|
899 |
resp = app.post_json(url, params=params)
|
|
900 |
assert resp.json['err'] == 1
|
|
901 |
assert resp.json['err_desc'] == 'No pairing exists'
|
|
902 |
Pairing.objects.create(
|
|
903 |
resource=dpark,
|
|
904 |
**{
|
879 |
905 |
'nameid': nameid,
|
|
906 |
'firstnames': 'spam eggs',
|
|
907 |
'lastname': 'bar',
|
880 |
908 |
'filenumber': filenumber,
|
881 |
|
'transaction_id': 'I123456789',
|
882 |
|
'transaction_datetime': transaction_datetime,
|
883 |
|
'total_amount': '125',
|
884 |
|
'application_id': '61718',
|
885 |
|
'application_external_id': 'E-8-N5UTAK6P',
|
886 |
|
'double_plaque': '1',
|
887 |
|
}
|
888 |
|
url = '/dpark/test/notify-payment/'
|
889 |
|
resp = app.post_json(url, params=params)
|
890 |
|
assert resp.json['err'] == 1
|
891 |
|
assert resp.json['err_desc'] == 'No pairing exists'
|
892 |
|
Pairing.objects.create(
|
893 |
|
resource=dpark,
|
894 |
|
**{
|
895 |
|
'nameid': nameid,
|
896 |
|
'firstnames': 'spam eggs',
|
897 |
|
'lastname': 'bar',
|
898 |
|
'filenumber': filenumber,
|
899 |
|
'badgenumber': '2' * 9,
|
900 |
|
},
|
901 |
|
)
|
902 |
|
operation.return_value = mock.Mock(CodeRetour='02', MessageRetour='Dossier inconnu')
|
903 |
|
resp = app.post_json(url, params=params)
|
904 |
|
assert operation.call_args_list[-1].args[5] == expected_date
|
905 |
|
assert resp.json['err'] == 1
|
906 |
|
assert resp.json['err_desc'] == 'Dossier inconnu'
|
907 |
|
operation.return_value = mock.Mock(CodeRetour='01')
|
908 |
|
resp = app.post_json(url, params=params)
|
909 |
|
assert resp.json['data'] is True
|
|
909 |
'badgenumber': '2' * 9,
|
|
910 |
},
|
|
911 |
)
|
|
912 |
operation.return_value = mock.Mock(CodeRetour='02', MessageRetour='Dossier inconnu')
|
|
913 |
resp = app.post_json(url, params=params)
|
|
914 |
assert operation.call_args_list[-1].args[5] == expected_date
|
|
915 |
assert resp.json['err'] == 1
|
|
916 |
assert resp.json['err_desc'] == 'Dossier inconnu'
|
|
917 |
operation.return_value = mock.Mock(CodeRetour='01')
|
|
918 |
resp = app.post_json(url, params=params)
|
|
919 |
assert resp.json['data'] is True
|
910 |
|
-
|