Skip to content

Commit e8fbfee

Browse files
authored
Merge pull request #1668 from opengisch/QF-8457-remove-collaborators-when-org-member-removed
feat: remove project collaborations of users removed from an organization
2 parents c07840c + 4933198 commit e8fbfee

2 files changed

Lines changed: 34 additions & 0 deletions

File tree

docker-app/qfieldcloud/core/models.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,13 @@ def clean(self) -> None:
823823
def delete(self, *args, **kwargs) -> tuple[int, dict[str, int]]:
824824
super().delete(*args, **kwargs)
825825

826+
# delete the project colloborations of this deleted org member,
827+
# as they are no longer part of the organization.
828+
ProjectCollaborator.objects.filter(
829+
project__owner=self.organization,
830+
collaborator=self.member,
831+
).delete()
832+
826833
return TeamMember.objects.filter(
827834
team__team_organization=self.organization,
828835
member=self.member,

docker-app/qfieldcloud/core/tests/test_organization.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
OrganizationMember,
1616
Person,
1717
Project,
18+
ProjectCollaborator,
1819
)
1920

2021
from .utils import set_subscription, setup_subscription_plans
@@ -148,6 +149,32 @@ def test_delete_member(self):
148149
members = OrganizationMember.objects.all()
149150
self.assertEqual(len(members), 0)
150151

152+
def test_delete_member_removes_project_collaborators(self):
153+
# user2 is a member of organization1
154+
org_member = OrganizationMember.objects.create(
155+
organization=self.organization1,
156+
member=self.user2,
157+
role=OrganizationMember.Roles.MEMBER,
158+
)
159+
160+
project = Project.objects.create(
161+
name="the_project",
162+
owner=self.organization1,
163+
is_public=False,
164+
)
165+
# user2 is a collaborator on the project
166+
ProjectCollaborator.objects.create(
167+
project=project,
168+
collaborator=self.user2,
169+
role=ProjectCollaborator.Roles.EDITOR,
170+
)
171+
172+
self.assertEqual(ProjectCollaborator.objects.filter(project=project).count(), 1)
173+
174+
org_member.delete()
175+
176+
self.assertEqual(ProjectCollaborator.objects.filter(project=project).count(), 0)
177+
151178
def test_created_by_set_to_none_on_user_deletion(self):
152179
creator = Person.objects.create(username="creator")
153180
member = Person.objects.create(username="member")

0 commit comments

Comments
 (0)