Bug 2419 - The system tries sending emails to inactive users
parent
be163c894d
commit
91f51cddf9
|
@ -139,6 +139,10 @@ def _filter_by_permissions(obj, user):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _filter_notificable(user):
|
||||||
|
return user.is_active and not user.is_system
|
||||||
|
|
||||||
|
|
||||||
def get_users_to_notify(obj, *, discard_users=None) -> list:
|
def get_users_to_notify(obj, *, discard_users=None) -> list:
|
||||||
"""
|
"""
|
||||||
Get filtered set of users to notify for specified
|
Get filtered set of users to notify for specified
|
||||||
|
@ -168,7 +172,8 @@ def get_users_to_notify(obj, *, discard_users=None) -> list:
|
||||||
candidates = candidates - set(discard_users)
|
candidates = candidates - set(discard_users)
|
||||||
|
|
||||||
candidates = filter(partial(_filter_by_permissions, obj), candidates)
|
candidates = filter(partial(_filter_by_permissions, obj), candidates)
|
||||||
|
# Filter disabled and system users
|
||||||
|
candidates = filter(partial(_filter_notificable), candidates)
|
||||||
return frozenset(candidates)
|
return frozenset(candidates)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -109,14 +109,25 @@ def test_users_to_notify():
|
||||||
member3 = f.MembershipFactory.create(project=project, role=role1)
|
member3 = f.MembershipFactory.create(project=project, role=role1)
|
||||||
member4 = f.MembershipFactory.create(project=project, role=role1)
|
member4 = f.MembershipFactory.create(project=project, role=role1)
|
||||||
member5 = f.MembershipFactory.create(project=project, role=role2)
|
member5 = f.MembershipFactory.create(project=project, role=role2)
|
||||||
|
inactive_member1 = f.MembershipFactory.create(project=project, role=role1)
|
||||||
|
inactive_member1.user.is_active = False
|
||||||
|
inactive_member1.user.save()
|
||||||
|
system_member1 = f.MembershipFactory.create(project=project, role=role1)
|
||||||
|
system_member1.user.is_system = True
|
||||||
|
system_member1.user.save()
|
||||||
|
|
||||||
issue = f.IssueFactory.create(project=project, owner=member4.user)
|
issue = f.IssueFactory.create(project=project, owner=member4.user)
|
||||||
|
|
||||||
policy_model_cls = apps.get_model("notifications", "NotifyPolicy")
|
policy_model_cls = apps.get_model("notifications", "NotifyPolicy")
|
||||||
|
|
||||||
policy1 = policy_model_cls.objects.get(user=member1.user)
|
policy1 = policy_model_cls.objects.get(user=member1.user)
|
||||||
policy_model_cls.objects.get(user=member2.user)
|
policy2 = policy_model_cls.objects.get(user=member3.user)
|
||||||
policy3 = policy_model_cls.objects.get(user=member3.user)
|
policy3 = policy_model_cls.objects.get(user=inactive_member1.user)
|
||||||
|
policy3.notify_level = NotifyLevel.watch
|
||||||
|
policy3.save()
|
||||||
|
policy4 = policy_model_cls.objects.get(user=system_member1.user)
|
||||||
|
policy4.notify_level = NotifyLevel.watch
|
||||||
|
policy4.save()
|
||||||
|
|
||||||
history = MagicMock()
|
history = MagicMock()
|
||||||
history.owner = member2.user
|
history.owner = member2.user
|
||||||
|
@ -144,8 +155,8 @@ def test_users_to_notify():
|
||||||
assert users == {member1.user, member3.user, issue.get_owner()}
|
assert users == {member1.user, member3.user, issue.get_owner()}
|
||||||
|
|
||||||
# Test with watchers with ignore policy
|
# Test with watchers with ignore policy
|
||||||
policy3.notify_level = NotifyLevel.ignore
|
policy2.notify_level = NotifyLevel.ignore
|
||||||
policy3.save()
|
policy2.save()
|
||||||
|
|
||||||
issue.watchers.add(member3.user)
|
issue.watchers.add(member3.user)
|
||||||
users = services.get_users_to_notify(issue)
|
users = services.get_users_to_notify(issue)
|
||||||
|
@ -158,6 +169,16 @@ def test_users_to_notify():
|
||||||
assert len(users) == 2
|
assert len(users) == 2
|
||||||
assert users == {member1.user, issue.get_owner()}
|
assert users == {member1.user, issue.get_owner()}
|
||||||
|
|
||||||
|
# Test with inactive user
|
||||||
|
issue.watchers.add(inactive_member1.user)
|
||||||
|
assert len(users) == 2
|
||||||
|
assert users == {member1.user, issue.get_owner()}
|
||||||
|
|
||||||
|
# Test with system user
|
||||||
|
issue.watchers.add(system_member1.user)
|
||||||
|
assert len(users) == 2
|
||||||
|
assert users == {member1.user, issue.get_owner()}
|
||||||
|
|
||||||
|
|
||||||
def test_send_notifications_using_services_method(settings, mail):
|
def test_send_notifications_using_services_method(settings, mail):
|
||||||
settings.CHANGE_NOTIFICATIONS_MIN_INTERVAL = 1
|
settings.CHANGE_NOTIFICATIONS_MIN_INTERVAL = 1
|
||||||
|
|
Loading…
Reference in New Issue