Skip to content

Commit

Permalink
[Bug 1094313] Add question, answer, and solution counts to profiles.
Browse files Browse the repository at this point in the history
  • Loading branch information
mythmon committed Dec 16, 2014
1 parent bfee50c commit 946138e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
20 changes: 18 additions & 2 deletions kitsune/users/api.py
Expand Up @@ -19,6 +19,7 @@
from rest_framework.authtoken.models import Token

from kitsune.access.decorators import login_required
from kitsune.questions.utils import num_answers, num_solutions, num_questions
from kitsune.sumo.api import DateTimeUTCField, GenericAPIException, PermissionMod
from kitsune.sumo.decorators import json_view
from kitsune.users.helpers import profile_avatar
Expand Down Expand Up @@ -144,6 +145,9 @@ class ProfileSerializer(serializers.ModelSerializer):
settings = (PermissionMod(UserSettingSerializer, permissions=[OnlySelf])
(many=True, read_only=True))
helpfulness = serializers.Field(source='answer_helpfulness')
answer_count = serializers.SerializerMethodField('get_answer_count')
question_count = serializers.SerializerMethodField('get_question_count')
solution_count = serializers.SerializerMethodField('get_solution_count')
# These are write only fields. It is very important they stays that way!
password = serializers.WritableField(source='user.password', write_only=True)

Expand All @@ -166,14 +170,26 @@ class Meta:
'email',
'settings',
'helpfulness',
'question_count',
'answer_count',
'solution_count',
# Password and email are here so they can be involved in write
# operations. They is marked as write-only above, so will not be
# visible.
'password',
]

def get_avatar_url(self, obj):
return profile_avatar(obj.user)
def get_avatar_url(self, profile):
return profile_avatar(profile.user)

def get_question_count(self, profile):
return num_questions(profile.user)

def get_answer_count(self, profile):
return num_answers(profile.user)

def get_solution_count(self, profile):
return num_solutions(profile.user)

def restore_object(self, attrs, instance=None):
"""
Expand Down
15 changes: 14 additions & 1 deletion kitsune/users/tests/test_api.py
Expand Up @@ -10,7 +10,7 @@
from kitsune.sumo.helpers import urlparams
from kitsune.sumo.tests import TestCase
from kitsune.sumo.urlresolvers import reverse
from kitsune.questions.tests import answer, answervote
from kitsune.questions.tests import question, answer, answervote
from kitsune.users import api
from kitsune.users.models import Profile
from kitsune.users.tests import user, profile, setting
Expand Down Expand Up @@ -166,6 +166,19 @@ def test_helpfulness(self):
serializer = api.ProfileSerializer(instance=p)
eq_(serializer.data['helpfulness'], 3)

def test_counts(self):
p = profile()
u = p.user
q = question(creator=u, save=True)
answer(creator=u, save=True)
q.solution = answer(question=q, creator=u, save=True)
q.save()

serializer = api.ProfileSerializer(instance=p)
eq_(serializer.data['question_count'], 1)
eq_(serializer.data['answer_count'], 2)
eq_(serializer.data['solution_count'], 1)


class TestUserView(TestCase):

Expand Down

0 comments on commit 946138e

Please sign in to comment.