[Backport] Issue #2916: When leaving a project I lose all my watched stuff (even from different projects)
parent
a1b9ced71a
commit
ed8075acc3
|
@ -19,6 +19,7 @@ from django.conf import settings
|
||||||
|
|
||||||
from taiga.projects.services.tags_colors import update_project_tags_colors_handler, remove_unused_tags
|
from taiga.projects.services.tags_colors import update_project_tags_colors_handler, remove_unused_tags
|
||||||
from taiga.projects.notifications.services import create_notify_policy_if_not_exists
|
from taiga.projects.notifications.services import create_notify_policy_if_not_exists
|
||||||
|
from taiga.base.utils.db import get_typename_for_model_class
|
||||||
|
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
|
@ -53,7 +54,13 @@ def update_watchers_on_membership_post_delete(sender, instance, using, **kwargs)
|
||||||
# instance.user can contain pointer to now
|
# instance.user can contain pointer to now
|
||||||
# removed object from a database.
|
# removed object from a database.
|
||||||
for model in models:
|
for model in models:
|
||||||
model.watchers.through.objects.filter(user_id=instance.user_id).delete()
|
#filter(project=instance.project)
|
||||||
|
filter = {
|
||||||
|
"user_id": instance.user_id,
|
||||||
|
"%s__project"%(model._meta.model_name): instance.project,
|
||||||
|
}
|
||||||
|
|
||||||
|
model.watchers.through.objects.filter(**filter).delete()
|
||||||
|
|
||||||
|
|
||||||
def create_notify_policy(sender, instance, using, **kwargs):
|
def create_notify_policy(sender, instance, using, **kwargs):
|
||||||
|
|
|
@ -212,6 +212,22 @@ def test_leave_project_invalid_membership(client):
|
||||||
assert response.status_code == 404
|
assert response.status_code == 404
|
||||||
|
|
||||||
|
|
||||||
|
def test_leave_project_respect_watching_items(client):
|
||||||
|
user = f.UserFactory.create()
|
||||||
|
project = f.ProjectFactory.create()
|
||||||
|
role = f.RoleFactory.create(project=project, permissions=["view_project"])
|
||||||
|
f.MembershipFactory.create(project=project, user=user, role=role)
|
||||||
|
issue = f.IssueFactory(owner=user)
|
||||||
|
issue.watchers=[user]
|
||||||
|
issue.save()
|
||||||
|
|
||||||
|
client.login(user)
|
||||||
|
url = reverse("projects-leave", args=(project.id,))
|
||||||
|
response = client.post(url)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert list(issue.watchers.all()) == [user]
|
||||||
|
|
||||||
|
|
||||||
def test_delete_membership_only_owner(client):
|
def test_delete_membership_only_owner(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create()
|
project = f.ProjectFactory.create()
|
||||||
|
|
Loading…
Reference in New Issue