From a567bd4e613c6aa7d8c692ba1e271c9207cc0126 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 16 Oct 2020 14:14:07 -0700 Subject: [PATCH] Simplifies outgoing follow logic --- bookwyrm/incoming.py | 2 +- bookwyrm/outgoing.py | 4 +++- bookwyrm/tests/outgoing/test_follow.py | 19 ++++++++++++++++++- bookwyrm/view_actions.py | 2 +- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/bookwyrm/incoming.py b/bookwyrm/incoming.py index d348e43a..57ed0220 100644 --- a/bookwyrm/incoming.py +++ b/bookwyrm/incoming.py @@ -143,7 +143,7 @@ def handle_follow(activity): 'FOLLOW', related_user=actor ) - outgoing.handle_accept(actor, to_follow, relationship) + outgoing.handle_accept(relationship) else: # Accept will be triggered manually status_builder.create_notification( diff --git a/bookwyrm/outgoing.py b/bookwyrm/outgoing.py index 2c4c6def..0a09a101 100644 --- a/bookwyrm/outgoing.py +++ b/bookwyrm/outgoing.py @@ -80,8 +80,10 @@ def handle_unfollow(user, to_unfollow): to_unfollow.followers.remove(user) -def handle_accept(user, to_follow, follow_request): +def handle_accept(follow_request): ''' send an acceptance message to a follow request ''' + user = follow_request.user_subject + to_follow = follow_request.user_object with transaction.atomic(): relationship = models.UserFollows.from_request(follow_request) follow_request.delete() diff --git a/bookwyrm/tests/outgoing/test_follow.py b/bookwyrm/tests/outgoing/test_follow.py index 7932d9c1..4ecf3a91 100644 --- a/bookwyrm/tests/outgoing/test_follow.py +++ b/bookwyrm/tests/outgoing/test_follow.py @@ -3,7 +3,7 @@ from django.test import TestCase from bookwyrm import models, outgoing -class OutgoingFollow(TestCase): +class Following(TestCase): def setUp(self): self.remote_user = models.User.objects.create_user( 'rat', 'rat@rat.com', 'ratword', @@ -29,9 +29,26 @@ class OutgoingFollow(TestCase): self.assertEqual(rel.user_object, self.remote_user) self.assertEqual(rel.status, 'follow_request') + def test_handle_unfollow(self): self.remote_user.followers.add(self.local_user) self.assertEqual(self.remote_user.followers.count(), 1) outgoing.handle_unfollow(self.local_user, self.remote_user) self.assertEqual(self.remote_user.followers.count(), 0) + + + def test_handle_accept(self): + rel = models.UserFollowRequest.objects.create( + user_subject=self.local_user, + user_object=self.remote_user + ) + rel_id = rel.id + + outgoing.handle_accept(rel) + # request should be deleted + self.assertEqual( + models.UserFollowRequest.objects.filter(id=rel_id).count(), 0 + ) + # follow relationship should exist + self.assertEqual(self.remote_user.followers.first(), self.local_user) diff --git a/bookwyrm/view_actions.py b/bookwyrm/view_actions.py index 992a270d..a4814ff0 100644 --- a/bookwyrm/view_actions.py +++ b/bookwyrm/view_actions.py @@ -473,7 +473,7 @@ def accept_follow_request(request): # Request already dealt with. pass else: - outgoing.handle_accept(requester, request.user, follow_request) + outgoing.handle_accept(follow_request) return redirect('/user/%s' % request.user.localname)