cartads_cs: keep track of original formdata (#36438)

This commit is contained in:
Frédéric Péters 2019-09-25 15:28:26 +02:00
parent 3ffc2d553c
commit 96fc053f7b
3 changed files with 36 additions and 5 deletions

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2019-09-25 13:27
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cartads_cs', '0008_auto_20190923_1712'),
]
operations = [
migrations.AddField(
model_name='cartadsdossier',
name='formdata_url',
field=models.CharField(max_length=200, null=True),
),
]

View File

@ -96,6 +96,7 @@ class CartaDSDossier(models.Model):
cartads_steps_cache = JSONField(default={})
last_update_datetime = models.DateTimeField(auto_now=True)
subscribers = models.ManyToManyField(CartaDSSubscriber, blank=True)
formdata_url = models.CharField(null=True, max_length=200)
class AbstractCartaDSCS(BaseResource):
@ -652,15 +653,19 @@ class AbstractCartaDSCS(BaseResource):
'name_id': {
'description': _('UUID of requester'),
},
'formdata_url': {
'description': _('URL of user form'),
},
})
def send(self, request, commune_id, type_dossier_id, objet_demande_id,
tracking_code, email, name_id=None):
tracking_code, email, name_id=None, formdata_url=None):
dossier = CartaDSDossier(
commune_id=commune_id,
type_dossier_id=type_dossier_id,
objet_demande_id=objet_demande_id,
tracking_code=tracking_code,
email=email,
formdata_url=formdata_url
)
dossier.save()
signer = Signer(salt='cart@ds_cs/dossier')
@ -995,8 +1000,11 @@ class AbstractCartaDSCS(BaseResource):
'description': _('Dossier Password'),
'example_value': '5A3E36FE-80D3-45E5-9323-7415E04D3B14',
},
'formdata_url': {
'description': _('URL of user form'),
},
})
def join(self, request, name_id, dossier_number, dossier_password):
def join(self, request, name_id, dossier_number, dossier_password, formdata_url=None):
client = self.soap_client(wsdl_url=self.get_wsdl_url('ServiceSuiviNumerique'))
try:
resp = client.service.ActiverServiceSuiviNumerique(
@ -1016,10 +1024,11 @@ class AbstractCartaDSCS(BaseResource):
id_dossier)
dossier.type_dossier_id = infos['CoTypeDossier']
dossier.commune_id = self.get_commune_id(infos['Commune'])
dossier.formdata_url = formdata_url
dossier.save()
dossier.subscribers.add(CartaDSSubscriber.objects.get_or_create(name_id=name_id)[0])
return {'err': 0, 'dossier_id': dossier.id}
return {'err': 0, 'dossier_id': dossier.id, 'formdata_url': dossier.formdata_url}
class CartaDSCS(AbstractCartaDSCS):

View File

@ -575,19 +575,21 @@ def test_join(connector, app, cached_data):
# new
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
client.return_value = mock.Mock(service=FakeService())
resp = app.get('/cartads-cs/test/join?name_id=3456&dossier_number=123&dossier_password=XXX')
resp = app.get('/cartads-cs/test/join?name_id=3456&dossier_number=123&dossier_password=XXX&formdata_url=https://etc.')
dossier = CartaDSDossier.objects.get(id=resp.json['dossier_id'])
assert dossier.commune_id == '2'
assert dossier.type_dossier_id == 'PC'
assert dossier.formdata_url == 'https://etc.'
# existing
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
client.return_value = mock.Mock(service=FakeService())
resp = app.get('/cartads-cs/test/join?name_id=2345&dossier_number=123&dossier_password=XXX')
resp = app.get('/cartads-cs/test/join?name_id=2345&dossier_number=123&dossier_password=XXX&formdata_url=other')
dossier = CartaDSDossier.objects.get(id=resp.json['dossier_id'])
assert CartaDSDossier.objects.count() == 1
assert dossier.commune_id == '2'
assert dossier.type_dossier_id == 'PC'
assert dossier.formdata_url == 'https://etc.'
assert [x.name_id for x in dossier.subscribers.all().order_by('name_id')] == ['2345', '3456']
# check /files API afterwards