mirror of
https://github.com/wagtail/wagtail.git
synced 2024-11-30 01:46:24 +01:00
Fix commenting thread notifications being sent to non-thread users
This commit is contained in:
parent
335ece5f96
commit
5fe901e5d8
@ -2100,6 +2100,7 @@ class TestCommenting(TestCase, WagtailTestUtils):
|
||||
self.subscriber = self.create_user('subscriber')
|
||||
self.non_subscriber = self.create_user('non-subscriber')
|
||||
self.non_subscriber_2 = self.create_user('non-subscriber-2')
|
||||
self.never_emailed_user = self.create_user('never-emailed')
|
||||
|
||||
PageSubscription.objects.create(
|
||||
page=self.child_page,
|
||||
@ -2113,6 +2114,23 @@ class TestCommenting(TestCase, WagtailTestUtils):
|
||||
comment_notifications=True
|
||||
)
|
||||
|
||||
# Add comment and reply on a different page for the never_emailed_user
|
||||
# They should never be notified
|
||||
comment_on_other_page = Comment.objects.create(
|
||||
page=self.root_page,
|
||||
user=self.never_emailed_user,
|
||||
text='a comment'
|
||||
)
|
||||
|
||||
CommentReply.objects.create(
|
||||
user=self.never_emailed_user,
|
||||
comment=comment_on_other_page,
|
||||
text='a reply'
|
||||
)
|
||||
|
||||
def assertNeverEmailedWrongUser(self):
|
||||
self.assertNotIn(self.never_emailed_user.email, [to for email in mail.outbox for to in email.to])
|
||||
|
||||
def test_new_comment(self):
|
||||
post_data = {
|
||||
'title': "I've been edited!",
|
||||
@ -2144,6 +2162,7 @@ class TestCommenting(TestCase, WagtailTestUtils):
|
||||
|
||||
# Check notification email
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertNeverEmailedWrongUser()
|
||||
self.assertEqual(mail.outbox[0].to, [self.subscriber.email])
|
||||
self.assertEqual(mail.outbox[0].subject, 'test@email.com has updated comments on "I\'ve been edited! (simple page)"')
|
||||
self.assertIn('New comments:\n - "A test comment"\n\n', mail.outbox[0].body)
|
||||
@ -2283,6 +2302,7 @@ class TestCommenting(TestCase, WagtailTestUtils):
|
||||
|
||||
# Check notification email
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
self.assertNeverEmailedWrongUser()
|
||||
# The non subscriber created the comment, so should also get an email
|
||||
self.assertEqual(mail.outbox[0].to, [self.non_subscriber.email])
|
||||
self.assertEqual(mail.outbox[0].subject, 'test@email.com has updated comments on "I\'ve been edited! (simple page)"')
|
||||
@ -2337,6 +2357,7 @@ class TestCommenting(TestCase, WagtailTestUtils):
|
||||
|
||||
# Check notification email
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertNeverEmailedWrongUser()
|
||||
self.assertEqual(mail.outbox[0].to, [self.subscriber.email])
|
||||
self.assertEqual(mail.outbox[0].subject, 'test@email.com has updated comments on "I\'ve been edited! (simple page)"')
|
||||
self.assertIn('Deleted comments:\n - "A test comment"\n\n', mail.outbox[0].body)
|
||||
@ -2398,6 +2419,7 @@ class TestCommenting(TestCase, WagtailTestUtils):
|
||||
|
||||
# Check notification email
|
||||
self.assertEqual(len(mail.outbox), 3)
|
||||
self.assertNeverEmailedWrongUser()
|
||||
|
||||
recipients = [mail.to for mail in mail.outbox]
|
||||
# The other non subscriber replied in the thread, so should get an email
|
||||
|
@ -141,11 +141,11 @@ class EditView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
|
||||
# Get subscribers to individual threads
|
||||
replies = CommentReply.objects.filter(comment_id__in=relevant_comment_ids)
|
||||
comments = Comment.objects.filter(id__in=relevant_comment_ids)
|
||||
thread_users = get_user_model().objects.exclude(pk=self.request.user.pk).exclude(pk__in=subscribers.values_list('user_id', flat=True)).prefetch_related(
|
||||
thread_users = get_user_model().objects.exclude(pk=self.request.user.pk).exclude(pk__in=subscribers.values_list('user_id', flat=True)).filter(
|
||||
Q(comment_replies__comment_id__in=relevant_comment_ids) | Q(**{('%s__pk__in' % COMMENTS_RELATION_NAME): relevant_comment_ids})
|
||||
).prefetch_related(
|
||||
Prefetch('comment_replies', queryset=replies),
|
||||
Prefetch(COMMENTS_RELATION_NAME, queryset=comments)
|
||||
).exclude(
|
||||
Q(comment_replies__isnull=True) & Q(**{('%s__isnull' % COMMENTS_RELATION_NAME): True})
|
||||
)
|
||||
|
||||
# Skip if no recipients
|
||||
|
Loading…
Reference in New Issue
Block a user