Example #1
0
    def test_friendship_actions(self):
        test_user1 = User.objects.get(username='******')
        test_user2 = User.objects.get(username='******')

        friends = UserFriends(test_user1)

        # Sending request
        self.client.login(username='******')
        self.client.post(reverse('send_friendship_request',
                args=['test_user2']))
        self.assertTrue(friends.sent_request_to(test_user2))

        # Accepting request
        self.client.login(username='******')
        self.client.post(reverse('accept_friendship_request',
                args=['test_user']))
        self.assertTrue(friends.is_friends_with(test_user2))

        # Ending friendship
        self.client.post(reverse('remove_friend',
                args=['test_user']))
        self.assertFalse(friends.is_friends_with(test_user2))

        # Refusing request
        self.client.post(reverse('send_friendship_request',
                args=['test_user']))
        self.client.login(username='******')
        self.client.post(reverse('refuse_friendship_request',
                args=['test_user2']))
        self.assertFalse(friends.has_request_from(test_user2))
Example #2
0
    def test_friendship_actions(self):
        test_user1 = User.objects.get(username="******")
        test_user2 = User.objects.get(username="******")

        friends = UserFriends(test_user1)

        # Sending request
        self.client.login(username="******")
        self.client.post(reverse("send_friendship_request", args=["test_user2"]))
        self.assertTrue(friends.sent_request_to(test_user2))

        # Accepting request
        self.client.login(username="******")
        self.client.post(reverse("accept_friendship_request", args=["test_user"]))
        self.assertTrue(friends.is_friends_with(test_user2))

        # Ending friendship
        self.client.post(reverse("remove_friend", args=["test_user"]))
        self.assertFalse(friends.is_friends_with(test_user2))

        # Refusing request
        self.client.post(reverse("send_friendship_request", args=["test_user"]))
        self.client.login(username="******")
        self.client.post(reverse("refuse_friendship_request", args=["test_user2"]))
        self.assertFalse(friends.has_request_from(test_user2))
Example #3
0
    def get_basic_variables(self):
        test_user1 = User.objects.get(username='******')
        test_user2 = User.objects.get(username='******')

        user_friends1 = UserFriends(test_user1)
        user_friends2 = UserFriends(test_user2)

        return test_user1, test_user2, user_friends1, user_friends2
Example #4
0
    def isRequestSent(self, sender, recipient):
        friends_sender = UserFriends(sender)
        friends_recipient = UserFriends(recipient)

        result_a = friends_sender.sent_request_to(recipient)
        result_b = friends_recipient.has_request_from(sender)
        self.assertEquals(result_a, result_b)
        self.assertEquals(result_a, recipient in [x.recipient.user for x in friends_sender.my_requests.all()])
        self.assertEquals(result_a, sender in [x.sender.user for x in friends_recipient.requests_for_me.all()])

        return result_a
Example #5
0
def friend_action(request, other_name, action):
    other_user = get_object_or_404(User.objects, username=other_name)
    friends = UserFriends(request.user)

    func = getattr(friends, action)
    if action in ["send_friendship_request", "remove_friend"]:
        func(other_user)
    else:
        friendship_request = friends.request_from(other_user)
        func(friendship_request)

    return redirect("view_profile", username=other_name)
Example #6
0
def profile_view(request, username=None):
    shown_user = None

    if username is None:
        shown_user = request.user
    else:
        shown_user = get_object_or_404(User.objects, username=username)

    exp = Experience(shown_user)
    friends = UserFriends(request.user)
    is_friend = friends.is_friends_with(shown_user)
    pending_incoming_friendship_request = friends.has_request_from(shown_user)
    sent_friendship_request = friends.sent_request_to(shown_user)

    has_portal = False
    if 'oioioi.portals' in settings.INSTALLED_APPS:
        from oioioi.portals.models import Portal
        if Portal.objects.filter(owner=shown_user).exists():
            has_portal = True

    sections = []
    for func in profile_registry.items:
        response = func(request, shown_user)

        if isinstance(response, HttpResponseRedirect):
            return response

        if isinstance(response, TemplateResponse):
            sections.append(response.render().content)
        else:
            sections.append(response)

    return TemplateResponse(
        request, 'gamification/profile.html', {
            'shown_user':
            shown_user,
            'is_my_friend':
            is_friend,
            'exp':
            exp,
            'exp_percentage':
            int(100 * exp.current_experience /
                exp.required_experience_to_lvlup),
            'has_portal':
            has_portal,
            'pending_incoming_friendship_request':
            pending_incoming_friendship_request,
            'sent_friendship_request':
            sent_friendship_request,
            'sections':
            sections
        })
Example #7
0
    def areFriends(self, u1, u2):
        friends1 = UserFriends(u1)
        friends2 = UserFriends(u2)

        result_a = friends1.is_friends_with(u2)
        result_b = friends2.is_friends_with(u1)
        self.assertEquals(result_a, result_b)
        self.assertEquals(result_a,
             u1 in friends2.friends.select_related('user').all())
        self.assertEquals(result_a,
             u2 in friends1.friends.select_related('user').all())

        return result_a
Example #8
0
    def areFriends(self, u1, u2):
        friends1 = UserFriends(u1)
        friends2 = UserFriends(u2)

        result_a = friends1.is_friends_with(u2)
        result_b = friends2.is_friends_with(u1)

        # sanity checks
        self.assertEquals(result_a, result_b)  # symmetrical
        self.assertEquals(result_a, u1 in friends2.friends.all())
        self.assertEquals(result_a, u2 in friends1.friends.all())

        return result_a
Example #9
0
 def all_shared_with_me(self, user):
     allowed_sharing = UserFriends(user).friends
     if CODE_SHARING_PREFERENCES_DEFAULT is True:
         allowed_sharing = allowed_sharing.exclude(
             codesharingsettings__code_share_allowed=False
         )
     else:  # is False
         allowed_sharing = allowed_sharing.filter(
             codesharingsettings__code_share_allowed=True
         )
     result = Submission.objects.filter(
         submissionreport__userresultforproblem__user__in=allowed_sharing
     )
     return result
Example #10
0
def invite_list_section(request, user):
    if user != request.user:
        return ''

    requests = UserFriends(user).requests_for_me\
            .select_related('sender__user')

    if not requests.exists():
        return ''

    senders = (r.sender.user for r in requests.all())

    return render_to_string('gamification/profile/invites-list.html',
            {'users': senders})
Example #11
0
def invite_list_section(request, user):
    if user != request.user:
        return ''

    requests = UserFriends(user).requests_for_me\
            .select_related('sender__user')

    if not requests.exists():
        return ''

    senders = (r.sender.user for r in requests.all())

    return render_to_string('gamification/profile/invites-list.html',
                            {'users': senders})
Example #12
0
def friend_action(request, other_name, action):
    other_user = get_object_or_404(User.objects, username=other_name)
    friends = UserFriends(request.user)

    func = getattr(friends, action)
    try:
        if action in ['send_friendship_request', 'remove_friend']:
            func(other_user)
        else:
            friendship_request = friends.request_from(other_user)
            func(friendship_request)
    except ValueError as e:
        raise PermissionDenied(str(e))

    return redirect('view_profile', username=other_name)
Example #13
0
 def can_see_code(self, task, user_requester, user_sharing):
     if not user_requester.is_authenticated():
         return False
     if not UserFriends(user_requester).is_friends_with(user_sharing):
         return False
     return (CodeSharingSettings.objects.sharing_allowed(user_sharing) and
             self._has_submission(task, user_sharing))
Example #14
0
 def all_shared_with_me(self, user):
     if not user.is_authenticated():
         return Submission.objects.none()
     allowed_sharing = UserFriends(user).friends
     if CODE_SHARING_PREFERENCES_DEFAULT is True:
         allowed_sharing = allowed_sharing.exclude(
             codesharingsettings__code_share_allowed=False
         )
     else:  # is False
         allowed_sharing = allowed_sharing.filter(
             codesharingsettings__code_share_allowed=True
         )
     result = Submission.objects.filter(
         submissionreport__userresultforproblem__user__in=allowed_sharing
     )
     return result
Example #15
0
def profile_view(request, username=None):
    shown_user = None

    if username is None:
        shown_user = request.user
    else:
        shown_user = get_object_or_404(User.objects, username=username)

    exp = Experience(shown_user)
    friends = UserFriends(request.user)
    is_friend = friends.is_friends_with(shown_user)
    pending_incoming_friendship_request = friends.has_request_from(shown_user)
    sent_friendship_request = friends.sent_request_to(shown_user)

    has_portal = False
    if "oioioi.portals" in settings.INSTALLED_APPS:
        from oioioi.portals.models import Portal

        if Portal.objects.filter(owner=shown_user).exists():
            has_portal = True

    sections = []
    for func in profile_registry.items:
        response = func(request, shown_user)

        if isinstance(response, HttpResponseRedirect):
            return response

        if isinstance(response, TemplateResponse):
            sections.append(response.render().content)
        else:
            sections.append(response)

    return TemplateResponse(
        request,
        "gamification/profile.html",
        {
            "shown_user": shown_user,
            "is_my_friend": is_friend,
            "exp": exp,
            "exp_percentage": int(100 * exp.current_experience / exp.required_experience_to_lvlup),
            "has_portal": has_portal,
            "pending_incoming_friendship_request": pending_incoming_friendship_request,
            "sent_friendship_request": sent_friendship_request,
            "sections": sections,
        },
    )
Example #16
0
def friend_action(request, other_name, action):
    other_user = get_object_or_404(User.objects, username=other_name)
    friends = UserFriends(request.user)

    func = getattr(friends, action)
    try:
        if action in ['send_friendship_request', 'remove_friend']:
            func(other_user)
        else:
            try:
                friendship_request = friends.request_from(other_user)
            except FriendshipRequest.DoesNotExist:
                return redirect('view_profile', username=other_name)
            func(friendship_request)
    except ValueError as e:
        raise PermissionDenied(str(e))

    return redirect('view_profile', username=other_name)
Example #17
0
    def test_friendship_actions(self):
        test_user1 = User.objects.get(username='******')
        test_user2 = User.objects.get(username='******')

        friends = UserFriends(test_user1)

        # Sending request
        self.client.login(username='******')
        self.client.post(
            reverse('send_friendship_request', args=['test_user2']))
        self.assertTrue(friends.sent_request_to(test_user2))

        # Accepting request
        self.client.login(username='******')
        self.client.post(
            reverse('accept_friendship_request', args=['test_user']))
        self.assertTrue(friends.is_friends_with(test_user2))

        # Ending friendship
        self.client.post(reverse('remove_friend', args=['test_user']))
        self.assertFalse(friends.is_friends_with(test_user2))

        # Refusing request
        self.client.post(reverse('send_friendship_request',
                                 args=['test_user']))
        self.client.login(username='******')
        self.client.post(
            reverse('refuse_friendship_request', args=['test_user2']))
        self.assertFalse(friends.has_request_from(test_user2))
Example #18
0
    def test_friends_list(self):
        test_user1 = User.objects.get(username='******')
        test_user2 = User.objects.get(username='******')

        url = reverse('view_current_profile')
        user_text = 'test_user2</h2></a>'

        # Check user profile
        self.client.login(username='******')
        response = self.client.get(url)
        self.assertNotIn(user_text, response.content)

        UserFriends(test_user1).send_friendship_request(test_user2)
        UserFriends(test_user2).send_friendship_request(test_user1)

        response = self.client.get(url)
        self.assertIn(user_text, response.content)

        # Check visibility from outside
        self.client.login(username='******')
        response = self.client.get(reverse('view_profile', args=['test_user']))
        self.assertNotIn(user_text, response.content)
Example #19
0
    def test_invite_list(self):
        test_user1 = User.objects.get(username='******')
        test_user2 = User.objects.get(username='******')

        url = reverse('view_current_profile')

        # Check visibility without an invite
        self.client.login(username='******')
        response = self.client.get(url)
        self.assertNotIn('Pending invites', response.content)
        self.assertNotIn('test_user2', response.content)

        # Check visibility with an invite
        UserFriends(test_user2).send_friendship_request(test_user1)
        response = self.client.get(url)
        self.assertIn('Pending invites', response.content)
        self.assertIn('test_user2', response.content)
Example #20
0
def friend_problems_tab(request):
    friends = UserFriends(request.user).friends

    rfps = UserResultForProblem.objects.filter(
        user__in=friends,
        submission_report__scorereport__score=F(
            'submission_report__scorereport__max_score'),
        submission_report__submission__problem_instance__contest__isnull=True
    ).select_related('submission_report__submission'
                     '__problem_instance__problem')

    submissions = [
        rfp.submission_report.submission
        for rfp in rfps[:MAX_SUGGESTIONS_FROM_FRIENDS]
    ]

    return render_to_string('gamification/miniprofile/tabs/problems.html',
                            {'submissions': submissions})
Example #21
0
    def areFriends(self, u1, u2):
        friends1 = UserFriends(u1)
        friends2 = UserFriends(u2)

        result_a = friends1.is_friends_with(u2)
        result_b = friends2.is_friends_with(u1)

        # sanity checks
        self.assertEquals(result_a, result_b)  # symmetrical
        self.assertEquals(result_a, u1 in friends2.friends.all())
        self.assertEquals(result_a, u2 in friends1.friends.all())

        return result_a
Example #22
0
    def isRequestSent(self, sender, recipient):
        friends_sender = UserFriends(sender)
        friends_recipient = UserFriends(recipient)

        result_a = friends_sender.sent_request_to(recipient)
        result_b = friends_recipient.has_request_from(sender)
        self.assertEquals(result_a, result_b)
        self.assertEquals(
            result_a, recipient
            in [x.recipient.user for x in friends_sender.my_requests.all()])
        self.assertEquals(
            result_a, sender in [
                x.sender.user for x in friends_recipient.requests_for_me.all()
            ])

        return result_a
Example #23
0
def friends_tab(request):
    return render_to_string(
        'gamification/miniprofile/tabs/friends.html',
        {'friends': UserFriends(request.user).friends.order_by('username')})
Example #24
0
def friend_list_section(request, user):
    if user != request.user:
        return ''

    return render_to_string('gamification/profile/friends-list.html',
                            {'users': UserFriends(user).friends})