def test_handle_follow(self): ''' remote user wants to follow local user ''' activity = { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://example.com/users/rat/follows/123", "type": "Follow", "actor": "https://example.com/users/rat", "object": "https://example.com/user/mouse" } with patch('bookwyrm.models.activitypub_mixin.broadcast_task.delay'): incoming.handle_follow(activity) # notification created notification = models.Notification.objects.get() self.assertEqual(notification.user, self.local_user) self.assertEqual(notification.notification_type, 'FOLLOW') # the request should have been deleted requests = models.UserFollowRequest.objects.all() self.assertEqual(list(requests), []) # the follow relationship should exist follow = models.UserFollows.objects.get(user_object=self.local_user) self.assertEqual(follow.user_subject, self.remote_user)
def test_handle_follow_manually_approved(self): activity = { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://example.com/users/rat/follows/123", "type": "Follow", "actor": "https://example.com/users/rat", "object": "http://local.com/user/mouse" } self.local_user.manually_approves_followers = True self.local_user.save() with patch('bookwyrm.broadcast.broadcast_task.delay') as _: incoming.handle_follow(activity) # notification created notification = models.Notification.objects.get() self.assertEqual(notification.user, self.local_user) self.assertEqual(notification.notification_type, 'FOLLOW_REQUEST') # the request should exist request = models.UserFollowRequest.objects.get() self.assertEqual(request.user_subject, self.remote_user) self.assertEqual(request.user_object, self.local_user) # the follow relationship should not exist follow = models.UserFollows.objects.all() self.assertEqual(list(follow), [])
def test_nonexistent_user_follow(self): activity = { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://example.com/users/rat/follows/123", "type": "Follow", "actor": "https://example.com/users/rat", "object": "http://local.com/user/nonexistent-user" } incoming.handle_follow(activity) # do nothing notifications = models.Notification.objects.all() self.assertEqual(list(notifications), []) requests = models.UserFollowRequest.objects.all() self.assertEqual(list(requests), []) follows = models.UserFollows.objects.all() self.assertEqual(list(follows), [])