Beispiel #1
0
    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)
Beispiel #2
0
	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')
Beispiel #3
0
    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)
Beispiel #4
0
	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")
Beispiel #5
0
    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")
Beispiel #6
0
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')
Beispiel #7
0
	def show (self, request, pk, fpk) :

		if (Friendship.existsPK(pk, fpk)) :
			return UsersViewSet().show(request, fpk)
		else :
			return Response("ERROR: Users are not friends")
Beispiel #8
0
    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')
Beispiel #9
0
    def show(self, request, pk, fpk):

        if (Friendship.existsPK(pk, fpk)):
            return UsersViewSet().show(request, fpk)
        else:
            return Response("ERROR: Users are not friends")