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))
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))
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
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
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)
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 })
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
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
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
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})
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)
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))
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
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, }, )
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)
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))
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)
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)
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})
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
def friends_tab(request): return render_to_string( 'gamification/miniprofile/tabs/friends.html', {'friends': UserFriends(request.user).friends.order_by('username')})
def friend_list_section(request, user): if user != request.user: return '' return render_to_string('gamification/profile/friends-list.html', {'users': UserFriends(user).friends})