From 4e3c4aa62db25a2e1cb9404d971f376685fd02f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 6 Apr 2016 19:16:51 +0200 Subject: [PATCH] [Backport] Fix issue #4058: Remove memberships of deleted users --- ..._memberships_of_cancelled_users_acounts.py | 21 +++++++++++++++++++ taiga/users/models.py | 5 ++++- tests/integration/test_users.py | 15 +++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 taiga/projects/migrations/0040_remove_memberships_of_cancelled_users_acounts.py diff --git a/taiga/projects/migrations/0040_remove_memberships_of_cancelled_users_acounts.py b/taiga/projects/migrations/0040_remove_memberships_of_cancelled_users_acounts.py new file mode 100644 index 00000000..e666b4b9 --- /dev/null +++ b/taiga/projects/migrations/0040_remove_memberships_of_cancelled_users_acounts.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-04-06 15:46 +from __future__ import unicode_literals + +from django.db import migrations + + +def remove_memberships_of_cancelled_users_acounts(apps, schema_editor): + Membership = apps.get_model("projects", "Membership") + Membership.objects.filter(user__is_active=False).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0039_auto_20160322_1157'), + ] + + operations = [ + migrations.RunPython(remove_memberships_of_cancelled_users_acounts), + ] diff --git a/taiga/users/models.py b/taiga/users/models.py index e205e583..a0a9048b 100644 --- a/taiga/users/models.py +++ b/taiga/users/models.py @@ -280,9 +280,12 @@ class User(AbstractBaseUser, PermissionsMixin): self.save() self.auth_data.all().delete() - #Blocking all owned users + # Blocking all owned projects self.owned_projects.update(blocked_code=BLOCKED_BY_OWNER_LEAVING) + # Remove all memberships + self.memberships.all().delete() + class Role(models.Model): name = models.CharField(max_length=200, null=False, blank=False, diff --git a/tests/integration/test_users.py b/tests/integration/test_users.py index 360c6054..4e9da6e5 100644 --- a/tests/integration/test_users.py +++ b/tests/integration/test_users.py @@ -165,6 +165,21 @@ def test_delete_self_user_blocking_projects(client): assert project.blocked_code == project_choices.BLOCKED_BY_OWNER_LEAVING +def test_delete_self_user_remove_membership_projects(client): + project = f.ProjectFactory.create() + user = f.UserFactory.create() + f.create_membership(project=project, user=user) + + url = reverse('users-detail', kwargs={"pk": user.pk}) + + assert project.memberships.all().count() == 1 + + client.login(user) + response = client.delete(url) + + assert project.memberships.all().count() == 0 + + def test_cancel_self_user_with_valid_token(client): user = f.UserFactory.create() url = reverse('users-cancel')