def list(self, request): target = request.query_params.get('t', '') if target == 'requests': friendships = Friendship.objects.pending_received(request.user) users = Friendship.user_list_friends(request.user, friendships) return Response(data=UserSerializer(users, many=True).data) elif target == 'friends': friendships = Friendship.objects.current(request.user) users = Friendship.user_list_friends(request.user, friendships) return Response(data=UserSerializer(users, many=True).data) search = request.query_params.get('s', '') query = Q( Q(username__icontains=search) | Q(email__icontains=search) | Q(first_name__icontains=search) | Q(last_name__icontains=search) ) # Exclude users that share a friendship with the request user... friendships = Friendship.objects.get_friendships(request.user) friends = Friendship.user_list_friends(request.user, friendships) query &= ~Q(username__in=[f.username for f in friends]) users = User.objects.exclude(username=request.user.username).filter(query) return Response(data=UserSerializer(users, many=True).data)
def create (self, request, pk, fpk) : try : # Get Users me = User.objects.get(login=pk) newFriend = User.objects.get(login=fpk) # Check if users are already friends for actualFriend in me.friends.all() : if (actualFriend == newFriend) : # Users are already friends return Response('ERROR: Users are already friends') try : inverseRequestExists = FriendRequest.objects.get(fromUser=newFriend, toUser=me) # Friend has already sent request # Delete friend request and add friends inverseRequestExists.delete() f1 = Friendship(firstUser=me, secondUser=newFriend) f1.save() f2 = Friendship(firstUser=newFriend, secondUser=me) f2.save() serializer = FriendshipSerializer(f1) return Response(serializer.data) except exceptions.ObjectDoesNotExist : # No inverse relationship exists # We will search for an existing request from sender try : exists = FriendRequest.objects.get(fromUser=me, toUser=newFriend) # Already has sent request return Response('ERROR: Already sent request') except exceptions.ObjectDoesNotExist : # Haven't sent request request = FriendRequest(fromUser=me, toUser=newFriend) request.save() serializer = FriendRequestSerializer(request) return Response(serializer.data) except exceptions.MultipleObjectsReturned : # Many requests from me to same friend return Response('ERROR: # Many requests from me to same friend') except exceptions.MultipleObjectsReturned : # Many inverse relations have been sent return Response('ERROR: # Many inverse relations have been sent') except exceptions.ObjectDoesNotExist : # No users found return Response('ERROR: # No users found') except exceptions.MultipleObjectsReturned : # Multiple users found for same login return Response('ERROR: # Multiple users found for same login')
def test_user_with_friends_sees_friendship_events_in_feed(self): # John is a logged-in user. self.create_pre_authenticated_session( first_name='John', last_name='Carney', email='*****@*****.**', password='******' ) # He has sent a friend request to Regina, who has accepted the request. john = User.objects.get(username='******') regina = User.objects.create_user( first_name='Regina', last_name='Mcdonalid', email='*****@*****.**', username='******', password='******' ) friendship = Friendship.user_add_friend(john, friend=regina) friendship.accept() # He visits the homepage. self.browser.get(self.live_server_url + '/users/feed/') # He sees a list of events. event_list = self.browser.find_element_by_class_name('media-list') events = event_list.find_elements_by_class_name('media') # John sees a container describing the event of his friendship request to Regina. # The container has a label that reads "John added Regina as a friend" and there # is also a description with the date the friendship was created. event_1st = events[0] event_body = event_1st.find_element_by_class_name('media-body') self.assertIn('John added Regina as a friend', event_body.text) self.assertIn(date(friendship.created, getattr(settings, 'SHORT_DATE_FORMAT')), event_body.text) # He also sees a container describing the event of Regina accepting his friendship request. # The container has a label that reads "Regina accepted John's friendship" and there # is also a description with the date the friendship was updated. event_2nd = events[1] event_body = event_2nd.find_element_by_class_name('media-body') self.assertIn('Regina accepted John\'s friendship', event_body.text) self.assertIn(date(friendship.updated, getattr(settings, 'SHORT_DATE_FORMAT')), event_body.text)
def delete (self, request, pk, fpk) : if (Friendship.existsPK(pk, fpk)) : me = User.objects.get(login=pk) friend = User.objects.get(login=fpk) friendship1 = Friendship.objects.filter(firstUser=me, secondUser=friend).first() # Friendship Exists friendship2 = Friendship.objects.filter(firstUser=friend, secondUser=me).first() # Delete friendships friendship1.delete() friendship2.delete() return Response("Correct") else : return Response("Users are not friends")
def delete(self, request, pk, fpk): if (Friendship.existsPK(pk, fpk)): me = User.objects.get(login=pk) friend = User.objects.get(login=fpk) friendship1 = Friendship.objects.filter(firstUser=me, secondUser=friend).first() # Friendship Exists friendship2 = Friendship.objects.filter(firstUser=friend, secondUser=me).first() # Delete friendships friendship1.delete() friendship2.delete() return Response("Correct") else: return Response("Users are not friends")
def befriend(request): f = Friendship(from_user=request.user, to_user=User.objects.get(pk=request.POST.get('other_id'))) f.save() return redirect('cards:user_friends_list')
def show (self, request, pk, fpk) : if (Friendship.existsPK(pk, fpk)) : return UsersViewSet().show(request, fpk) else : return Response("ERROR: Users are not friends")
def create(self, request, pk, fpk): try: # Get Users me = User.objects.get(login=pk) newFriend = User.objects.get(login=fpk) # Check if users are already friends for actualFriend in me.friends.all(): if (actualFriend == newFriend): # Users are already friends return Response('ERROR: Users are already friends') try: inverseRequestExists = FriendRequest.objects.get( fromUser=newFriend, toUser=me) # Friend has already sent request # Delete friend request and add friends inverseRequestExists.delete() f1 = Friendship(firstUser=me, secondUser=newFriend) f1.save() f2 = Friendship(firstUser=newFriend, secondUser=me) f2.save() serializer = FriendshipSerializer(f1) return Response(serializer.data) except exceptions.ObjectDoesNotExist: # No inverse relationship exists # We will search for an existing request from sender try: exists = FriendRequest.objects.get(fromUser=me, toUser=newFriend) # Already has sent request return Response('ERROR: Already sent request') except exceptions.ObjectDoesNotExist: # Haven't sent request request = FriendRequest(fromUser=me, toUser=newFriend) request.save() serializer = FriendRequestSerializer(request) return Response(serializer.data) except exceptions.MultipleObjectsReturned: # Many requests from me to same friend return Response( 'ERROR: # Many requests from me to same friend') except exceptions.MultipleObjectsReturned: # Many inverse relations have been sent return Response( 'ERROR: # Many inverse relations have been sent') except exceptions.ObjectDoesNotExist: # No users found return Response('ERROR: # No users found') except exceptions.MultipleObjectsReturned: # Multiple users found for same login return Response('ERROR: # Multiple users found for same login')
def show(self, request, pk, fpk): if (Friendship.existsPK(pk, fpk)): return UsersViewSet().show(request, fpk) else: return Response("ERROR: Users are not friends")