0002-cartads_cs-add-endpoint-to-join-existing-dossier-363.patch
passerelle/apps/cartads_cs/models.py | ||
---|---|---|
316 | 316 |
cache = CartaDSDataCache.objects.get(data_type='communes') |
317 | 317 |
return cache.data_values |
318 | 318 | |
319 |
def get_commune_id(self, commune_name): |
|
320 |
for info in self.communes(request=None)['data']: |
|
321 |
if info['text'] == commune_name: |
|
322 |
return info['id'] |
|
323 |
return None |
|
324 | ||
319 | 325 |
@endpoint(description=_('Get list of file types'), |
320 | 326 |
parameters={ |
321 | 327 |
'commune_id': COMMUNE_ID_PARAM, |
... | ... | |
974 | 980 |
} for x in files] |
975 | 981 |
} |
976 | 982 | |
983 |
@endpoint(perm='can_access', |
|
984 |
description=_('Join dossier'), |
|
985 |
parameters={ |
|
986 |
'name_id': { |
|
987 |
'description': _('UUID of requester'), |
|
988 |
'example_value': '3eb56fc' |
|
989 |
}, |
|
990 |
'dossier_number': { |
|
991 |
'description': _('Dossier Number'), |
|
992 |
'example_value': 'PC 069 012 23 45678', |
|
993 |
}, |
|
994 |
'dossier_password': { |
|
995 |
'description': _('Dossier Password'), |
|
996 |
'example_value': '5A3E36FE-80D3-45E5-9323-7415E04D3B14', |
|
997 |
}, |
|
998 |
}) |
|
999 |
def join(self, request, name_id, dossier_number, dossier_password): |
|
1000 |
client = self.soap_client(wsdl_url=self.get_wsdl_url('ServiceSuiviNumerique')) |
|
1001 |
try: |
|
1002 |
resp = client.service.ActiverServiceSuiviNumerique( |
|
1003 |
self.get_token(), |
|
1004 |
dossier_number, |
|
1005 |
dossier_password) |
|
1006 |
except zeep.exceptions.Fault as e: |
|
1007 |
self.logger.error('error joining dossier %s (%r)', dossier_number, e.message) |
|
1008 |
raise APIError('error joining dossier (wrong password?)') |
|
1009 |
id_dossier = int(resp) |
|
1010 |
dossier, created = CartaDSDossier.objects.get_or_create(cartads_id_dossier=id_dossier) |
|
1011 |
if created: |
|
1012 |
dossier.cartads_numero_dossier = dossier_number |
|
1013 |
client_dossier = self.soap_client(wsdl_url=self.get_wsdl_url('ServiceRechercheDossier')) |
|
1014 |
infos = client_dossier.service.GetInfosDossier( |
|
1015 |
self.client_name, |
|
1016 |
id_dossier) |
|
1017 |
dossier.type_dossier_id = infos['CoTypeDossier'] |
|
1018 |
dossier.commune_id = self.get_commune_id(infos['Commune']) |
|
1019 |
dossier.save() |
|
1020 | ||
1021 |
dossier.subscribers.add(CartaDSSubscriber.objects.get_or_create(name_id=name_id)[0]) |
|
1022 |
return {'err': 0, 'dossier_id': dossier.id} |
|
1023 | ||
977 | 1024 | |
978 | 1025 |
class CartaDSCS(AbstractCartaDSCS): |
979 | 1026 |
category = _('Misc') |
tests/test_cartads_cs.py | ||
---|---|---|
161 | 161 |
assert _soapheaders |
162 | 162 |
return None |
163 | 163 | |
164 |
def ActiverServiceSuiviNumerique(self, toke, dossier_number, dossier_password): |
|
165 |
return 123 |
|
166 | ||
167 |
def GetInfosDossier(self, client_name, id_dossier): |
|
168 |
assert id_dossier == 123 |
|
169 |
return OrderedDict([ |
|
170 |
(u'AdresseTerrain', u'all\xe9e des Fleurs'), |
|
171 |
(u'CoTypeDossier', 'PC'), |
|
172 |
(u'Commune', u'AIGREFEUILLE SUR MAINE'), |
|
173 |
(u'DateDepot', datetime.datetime(2019, 9, 19, 0, 0)), |
|
174 |
(u'IdDossier', 478864L), |
|
175 |
(u'NomDossier', 'PC 069 085 19 00010'), |
|
176 |
(u'TypeDossier', 'Permis de construire')]) |
|
177 | ||
164 | 178 | |
165 | 179 |
def pdf_mock(url, request): |
166 | 180 |
return {'content': '%PDF...', 'status_code': 200} |
... | ... | |
553 | 567 |
# missing status |
554 | 568 |
resp = app.get('/cartads-cs/test/files?name_id=1234&status=Attente DOC') |
555 | 569 |
assert len(resp.json['data']) == 0 |
570 | ||
571 | ||
572 |
def test_join(connector, app, cached_data): |
|
573 |
CartaDSDossier.objects.all().delete() |
|
574 | ||
575 |
# new |
|
576 |
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client: |
|
577 |
client.return_value = mock.Mock(service=FakeService()) |
|
578 |
resp = app.get('/cartads-cs/test/join?name_id=3456&dossier_number=123&dossier_password=XXX') |
|
579 |
dossier = CartaDSDossier.objects.get(id=resp.json['dossier_id']) |
|
580 |
assert dossier.commune_id == '2' |
|
581 |
assert dossier.type_dossier_id == 'PC' |
|
582 | ||
583 |
# existing |
|
584 |
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client: |
|
585 |
client.return_value = mock.Mock(service=FakeService()) |
|
586 |
resp = app.get('/cartads-cs/test/join?name_id=2345&dossier_number=123&dossier_password=XXX') |
|
587 |
dossier = CartaDSDossier.objects.get(id=resp.json['dossier_id']) |
|
588 |
assert CartaDSDossier.objects.count() == 1 |
|
589 |
assert dossier.commune_id == '2' |
|
590 |
assert dossier.type_dossier_id == 'PC' |
|
591 |
assert [x.name_id for x in dossier.subscribers.all().order_by('name_id')] == ['2345', '3456'] |
|
592 | ||
593 |
# check /files API afterwards |
|
594 |
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client: |
|
595 |
client.return_value = mock.Mock(service=FakeService()) |
|
596 |
resp = app.get('/cartads-cs/test/files?name_id=1234') |
|
597 |
assert len(resp.json['data']) == 0 |
|
598 |
resp = app.get('/cartads-cs/test/files?name_id=2345') |
|
599 |
assert len(resp.json['data']) == 1 |
|
600 |
resp = app.get('/cartads-cs/test/files?name_id=3456') |
|
601 |
assert len(resp.json['data']) == 1 |
|
556 |
- |