cartads cs: add endpoint to unsubscribe from dossier (#36692)

This commit is contained in:
Frédéric Péters 2019-10-04 14:18:46 +02:00
parent e153f5c6c8
commit 918e4b40cf
2 changed files with 47 additions and 0 deletions

View File

@ -1058,6 +1058,33 @@ class AbstractCartaDSCS(BaseResource):
return {'err': 0, 'dossier_id': dossier.id, 'formdata_url': dossier.formdata_url}
@endpoint(perm='can_access',
description=_('Unsubscribe from dossier'),
parameters={
'name_id': {
'description': _('UUID of requester'),
'example_value': '3eb56fc'
},
'dossier_number': {
'description': _('Dossier Number'),
'example_value': 'PC 069 012 23 45678',
},
})
def unsubscribe(self, request, name_id, dossier_number):
try:
dossier = CartaDSDossier.objects.get(cartads_numero_dossier=dossier_number)
except CartaDSDossier.DoesNotExist:
raise APIError('dossier does not exist')
try:
subscriber = CartaDSSubscriber.objects.get(name_id=name_id)
except CartaDSSubscriber.DoesNotExist:
raise APIError('subscriber does not exist')
if subscriber not in dossier.subscribers.all():
raise APIError('subscriber not subscribed to that dossier')
dossier.subscribers.remove(subscriber)
return {'err': 0, 'dossier_id': dossier.id}
class CartaDSCS(AbstractCartaDSCS):
category = _('Misc')
class Meta:

View File

@ -616,3 +616,23 @@ def test_join(connector, app, cached_data):
assert len(resp.json['data']) == 1
resp = app.get('/cartads-cs/test/files?name_id=3456')
assert len(resp.json['data']) == 1
def test_unsubscribe(connector, app, cached_data):
test_join(connector, app, cached_data)
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/files?name_id=3456')
assert len(resp.json['data']) == 1
resp = app.get('/cartads-cs/test/unsubscribe?name_id=3456&dossier_number=123')
resp = app.get('/cartads-cs/test/files?name_id=3456')
assert len(resp.json['data']) == 0
# error cases
resp = app.get('/cartads-cs/test/unsubscribe?name_id=3456&dossier_number=123')
assert resp.json['err'] == 1
resp = app.get('/cartads-cs/test/unsubscribe?name_id=4567&dossier_number=123')
assert resp.json['err'] == 1
resp = app.get('/cartads-cs/test/unsubscribe?name_id=4567&dossier_number=434')
assert resp.json['err'] == 1