diff --git a/taiga/projects/api.py b/taiga/projects/api.py index ad41a173..5f5532f8 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -242,7 +242,7 @@ class MembershipViewSet(ModelCrudViewSet): return Response(status=status.HTTP_204_NO_CONTENT) def pre_delete(self, obj): - if not services.can_user_leave_project(obj.user, obj.project): + if obj.user is not None and not services.can_user_leave_project(obj.user, obj.project): raise exc.BadRequest(_("At least one of the user must be an active admin")) def pre_save(self, obj): diff --git a/tests/integration/test_memberships.py b/tests/integration/test_memberships.py index a77013e4..90fd1e97 100644 --- a/tests/integration/test_memberships.py +++ b/tests/integration/test_memberships.py @@ -184,3 +184,14 @@ def test_api_delete_membership(client): response = client.json.delete(url) assert response.status_code == 204 + + +def test_api_delete_membership_without_user(client): + membership_owner = f.MembershipFactory(is_owner=True) + membership_without_user_one = f.MembershipFactory(project=membership_owner.project, user=None) + membership_without_user_two = f.MembershipFactory(project=membership_owner.project, user=None) + client.login(membership_owner.user) + url = reverse("memberships-detail", args=[membership_without_user_one.id]) + response = client.json.delete(url) + + assert response.status_code == 204