From 363609e7be1bdcaabc4cb9e9c21829835b3b6a16 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 12 Feb 2021 16:16:22 -0800 Subject: [PATCH] Fixes follows Yikes --- bookwyrm/tests/views/test_follow.py | 45 ++++++++++++++++++++++++++++- bookwyrm/views/follow.py | 5 +++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index e6c7e46fb..943ffcf82 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -40,7 +40,7 @@ class BookViews(TestCase): parent_work=self.work ) - def test_handle_follow(self): + def test_handle_follow_remote(self): ''' send a follow request ''' request = self.factory.post('', {'user': self.remote_user.username}) request.user = self.local_user @@ -56,6 +56,49 @@ class BookViews(TestCase): self.assertEqual(rel.status, 'follow_request') + def test_handle_follow_local_manually_approves(self): + ''' send a follow request ''' + rat = models.User.objects.create_user( + 'rat@local.com', 'rat@rat.com', 'ratword', + local=True, localname='rat', + remote_id='https://example.com/users/rat', + manually_approves_followers=True, + ) + request = self.factory.post('', {'user': rat}) + request.user = self.local_user + self.assertEqual(models.UserFollowRequest.objects.count(), 0) + + with patch('bookwyrm.models.activitypub_mixin.broadcast_task.delay'): + views.follow(request) + rel = models.UserFollowRequest.objects.get() + + self.assertEqual(rel.user_subject, self.local_user) + self.assertEqual(rel.user_object, rat) + self.assertEqual(rel.status, 'follow_request') + + + + def test_handle_follow_local(self): + ''' send a follow request ''' + rat = models.User.objects.create_user( + 'rat@local.com', 'rat@rat.com', 'ratword', + local=True, localname='rat', + remote_id='https://example.com/users/rat', + ) + request = self.factory.post('', {'user': rat}) + request.user = self.local_user + self.assertEqual(models.UserFollowRequest.objects.count(), 0) + + with patch('bookwyrm.models.activitypub_mixin.broadcast_task.delay'): + views.follow(request) + + rel = models.UserFollows.objects.get() + + self.assertEqual(rel.user_subject, self.local_user) + self.assertEqual(rel.user_object, rat) + self.assertEqual(rel.status, 'follows') + + def test_handle_unfollow(self): ''' send an unfollow ''' request = self.factory.post('', {'user': self.remote_user.username}) diff --git a/bookwyrm/views/follow.py b/bookwyrm/views/follow.py index f5b2ddd58..c59f2e6d2 100644 --- a/bookwyrm/views/follow.py +++ b/bookwyrm/views/follow.py @@ -17,10 +17,13 @@ def follow(request): except models.User.DoesNotExist: return HttpResponseBadRequest() - models.UserFollowRequest.objects.get_or_create( + rel, _ = models.UserFollowRequest.objects.get_or_create( user_subject=request.user, user_object=to_follow, ) + + if to_follow.local and not to_follow.manually_approves_followers: + rel.accept() return redirect(to_follow.local_path)