From 962fc6edb1237be28651b678edb0c5c8adeaf1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Thu, 6 May 2021 11:51:40 +0200 Subject: [PATCH] caluire-axel: unlink endpoint (#53705) --- functests/caluire_axel/test_caluire_axel.py | 9 +++++++ passerelle/contrib/caluire_axel/models.py | 26 +++++++++++++++++++-- tests/test_caluire_axel.py | 16 +++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/functests/caluire_axel/test_caluire_axel.py b/functests/caluire_axel/test_caluire_axel.py index 45a47d0d..c62ae55d 100644 --- a/functests/caluire_axel/test_caluire_axel.py +++ b/functests/caluire_axel/test_caluire_axel.py @@ -19,3 +19,12 @@ def test_link(conn, user): pprint.pprint(res) assert res['err'] == 0 print('\n') + + print("Deleting link") + url = conn + '/unlink?NameID=%s' % name_id + resp = requests.post(url) + resp.raise_for_status() + res = resp.json() + assert res['err'] == 0 + pprint.pprint(res) + print('\n') diff --git a/passerelle/contrib/caluire_axel/models.py b/passerelle/contrib/caluire_axel/models.py index 406676fa..78dddab9 100644 --- a/passerelle/contrib/caluire_axel/models.py +++ b/passerelle/contrib/caluire_axel/models.py @@ -32,7 +32,7 @@ class CaluireAxel(BaseResource): ) category = _('Business Process Connectors') - _category_ordering = [_('Family')] + _category_ordering = [_('Family account')] class Meta: verbose_name = _('Caluire Axel') @@ -66,7 +66,7 @@ class CaluireAxel(BaseResource): raise APIError('Person not found', err_code='not-found') @endpoint( - display_category=_('Family'), + display_category=_('Family account'), display_order=1, description=_('Create link between user and Caluire Axel'), perm='can_access', @@ -108,6 +108,28 @@ class CaluireAxel(BaseResource): }, } + def get_link(self, name_id): + try: + return self.link_set.get(name_id=name_id) + except Link.DoesNotExist: + raise APIError('Person not found', err_code='not-found') + + @endpoint( + display_category=_('Family account'), + display_order=2, + description=_('Delete link between user and Caluire Axel'), + methods=['post'], + perm='can_access', + parameters={ + 'NameID': {'description': _('Publik ID')}, + }, + ) + def unlink(self, request, NameID): + link = self.get_link(NameID) + link_id = link.pk + link.delete() + return {'link': link_id, 'deleted': True, 'family_id': link.family_id} + class Link(models.Model): resource = models.ForeignKey(CaluireAxel, on_delete=models.CASCADE) diff --git a/tests/test_caluire_axel.py b/tests/test_caluire_axel.py index 109688ff..7fc01a3d 100644 --- a/tests/test_caluire_axel.py +++ b/tests/test_caluire_axel.py @@ -349,3 +349,19 @@ def test_link_endpoint(app, resource, link_params, place): assert resp.json['created'] is False # link already exists assert 'xml_request' in resp.json['data'] assert 'xml_response' in resp.json['data'] + + +def test_unlink_endpoint_no_result(app, resource): + resp = app.post('/caluire-axel/test/unlink?NameID=yyy') + assert resp.json['err_desc'] == "Person not found" + assert resp.json['err'] == 'not-found' + + +def test_unlink_endpoint(app, resource): + link = Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42') + resp = app.post('/caluire-axel/test/unlink?NameID=yyy') + assert Link.objects.exists() is False + assert resp.json['err'] == 0 + assert resp.json['link'] == link.pk + assert resp.json['family_id'] == 'XXX' + assert resp.json['deleted'] is True