Projet

Général

Profil

0002-cartads_cs-add-endpoint-to-join-existing-dossier-363.patch

Frédéric Péters, 24 septembre 2019 09:47

Télécharger (5,99 ko)

Voir les différences:

Subject: [PATCH 2/2] cartads_cs: add endpoint to join existing dossier
 (#36382)

 passerelle/apps/cartads_cs/models.py | 47 ++++++++++++++++++++++++++++
 tests/test_cartads_cs.py             | 46 +++++++++++++++++++++++++++
 2 files changed, 93 insertions(+)
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
-