def progress(self): contest = getattr(self.request, 'contest', False) if contest: return Progress( 0, settings.FBAPP['config'].get('movies_to_rate_for_progress', 6) ) return Progress( Rating.count_for_user(self.user), settings.RECOMMENDATIONS_MIN_VOTES_USER )
def rating_progress(context, user): vote_cnt = user.is_authenticated() and Rating.count_for_user(user) or 0 MIN_VOTES = settings.RECOMMENDATIONS_MIN_VOTES_USER count = min(vote_cnt, MIN_VOTES) left = MIN_VOTES - count percent = int(round(count * 100.0 / MIN_VOTES)) return { 'count':count, 'left':left, 'percent':percent, }
def test_anonymous_rating(self): from django.core.urlresolvers import reverse self.client = self.client_class() self.assertTrue(Film.objects.tagged('dramat')) rate_url = reverse('rate_films') response = self.client.get(rate_url) to_rate = list(response.context['films']) self.assertTrue(to_rate) request = response.context['request'] username = request.unique_user.username self.assertTrue(username.startswith('tmp-')) self.assertNotEquals(username, 'tmp-anonymous') self.assertFalse(request.unique_user.id) self.assertFalse(User.objects.filter(username__startswith='tmp-', is_active=False)) self.client.post('/ajax/rate-film/', {'film_id':to_rate[0].id, 'rating':10}) user = User.objects.get(username__startswith='tmp-', is_active=False) username = user.username for i, film in enumerate(to_rate[1:]): self.client.post('/ajax/rate-film/', {'film_id':film.id, 'rating':i+1}) cnt = len(to_rate) self.assertEquals(cnt, 6) self.assertEquals(Rating.count_for_user(user), cnt) left = max(0, settings.RECOMMENDATIONS_MIN_VOTES_USER - cnt) if left: for i in range(left / settings.RATING_FILMS_NUMBER + 1): response = self.client.get(rate_url) for film in list(response.context['films']): self.client.post('/ajax/rate-film/', {'film_id':film.id, 'rating':5}) left -= 1 if not left: break # extra fetch to make sure few films are marked as seen response = self.client.get(rate_url) to_rate = list(response.context['films']) data = {'prev_film_ids': ','.join(str(f.id) for f in to_rate)} self.client.post(rate_url, data) self.assertEquals(Rating.count_for_user(user), settings.RECOMMENDATIONS_MIN_VOTES_USER) self.assertTrue(Profile.objects.get(user=user).recommendations_status in (Profile.FAST_RECOMMENDATIONS, Profile.NORMAL_RECOMMENDATIONS)) self.assertFalse(UserActivity.objects.all()) response = self.client.post(reverse('acct_signup'), { 'email': '*****@*****.**', 'username': '******', 'password1': 'abcdef123', 'password2': 'abcdef123', }) self.assertEquals(response.status_code, 302) self.assertTrue(response['Location'].endswith(reverse('main_page'))) user = User.objects.get(username='******') self.assertEquals(len(rating_helper.get_user_ratings(user.id)), settings.RECOMMENDATIONS_MIN_VOTES_USER) self.assertTrue(len(rating_helper.get_seen_films(user))) # check if user has public rating activities activities = UserActivity.objects.filter(activity_type=UserActivity.TYPE_RATING, user=user) self.assertTrue(activities) # make sure temporary username was updated self.assertFalse(activities.filter(username__startswith='tmp-'))
def progress(self): return Progress( Rating.count_for_user(self.user), 1000 )