Commit ac43a015 by Waheed Ahmed

Course team admin dropdown fallback to username if full_name not set.

ECOM-6976
parent e4ad2a6d
...@@ -32,10 +32,14 @@ class CourseUserRoleSerializer(serializers.ModelSerializer): ...@@ -32,10 +32,14 @@ class CourseUserRoleSerializer(serializers.ModelSerializer):
class GroupUserSerializer(serializers.ModelSerializer): class GroupUserSerializer(serializers.ModelSerializer):
"""Serializer for the `User` model used in OrganizationGroupUserView. """ """Serializer for the `User` model used in OrganizationGroupUserView. """
full_name = serializers.SerializerMethodField('get_user_full_name')
class Meta: class Meta:
model = User model = User
fields = ('id', 'full_name', ) fields = ('id', 'full_name',)
def get_user_full_name(self, obj):
return obj.get_full_name() or obj.username
class UpdateCourseKeySerializer(serializers.ModelSerializer): class UpdateCourseKeySerializer(serializers.ModelSerializer):
......
...@@ -38,13 +38,24 @@ class CourseUserRoleSerializerTests(TestCase): ...@@ -38,13 +38,24 @@ class CourseUserRoleSerializerTests(TestCase):
class GroupUserSerializerTests(TestCase): class GroupUserSerializerTests(TestCase):
def test_date(self):
def test_data_with_full_name(self):
""" Verify that UserSerializer serialize the user object. """
user = UserFactory(full_name='Test User')
serializer = GroupUserSerializer(user)
expected = {'id': user.id, 'full_name': user.full_name}
self.assertDictEqual(serializer.data, expected)
def test_data_without_full_name(self):
""" Verify that UserSerializer serialize the user object. """ """ Verify that UserSerializer serialize the user object. """
user = UserFactory(full_name="test user") user = UserFactory(full_name='', first_name='', last_name='')
serializer = GroupUserSerializer(user) serializer = GroupUserSerializer(user)
self.assertDictEqual(serializer.data, {'id': user.id, 'full_name': user.full_name}) expected = {'id': user.id, 'full_name': user.username}
self.assertDictEqual(serializer.data, expected)
class UpdateCourseKeySerializerTests(TestCase): class UpdateCourseKeySerializerTests(TestCase):
......
...@@ -163,17 +163,17 @@ class OrganizationGroupUserViewTests(TestCase): ...@@ -163,17 +163,17 @@ class OrganizationGroupUserViewTests(TestCase):
organization_extension = factories.OrganizationExtensionFactory() organization_extension = factories.OrganizationExtensionFactory()
self.org_user1 = UserFactory.create(full_name="org user1") self.org_user1 = UserFactory.create(full_name="org user1")
self.org_user2 = UserFactory.create(full_name="org user2") self.org_user2 = UserFactory.create(first_name='', last_name='', full_name='')
organization_extension.group.user_set.add(self.org_user1) organization_extension.group.user_set.add(*[self.org_user1, self.org_user2])
organization_extension.group.user_set.add(self.org_user2)
self.organization = organization_extension.organization self.organization = organization_extension.organization
def test_get_organization_user_group(self): def test_get_organization_user_group(self):
""" Verify that view returns list of users associated with the group """ Verify that view returns list of users associated with the group
related to given organization id. related to given organization id.
""" """
response = self.client.get(path=self._get_organization_group_user_url(self.organization.id), response = self.client.get(
content_type=JSON_CONTENT_TYPE) path=self._get_organization_group_user_url(self.organization.id), content_type=JSON_CONTENT_TYPE
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
expected_results = [ expected_results = [
...@@ -183,7 +183,7 @@ class OrganizationGroupUserViewTests(TestCase): ...@@ -183,7 +183,7 @@ class OrganizationGroupUserViewTests(TestCase):
}, },
{ {
"id": self.org_user2.id, "id": self.org_user2.id,
"full_name": self.org_user2.full_name "full_name": self.org_user2.username
} }
] ]
......
...@@ -20,7 +20,7 @@ from course_discovery.apps.publisher.models import ( ...@@ -20,7 +20,7 @@ from course_discovery.apps.publisher.models import (
class UserModelChoiceField(forms.ModelChoiceField): class UserModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj): def label_from_instance(self, obj):
return obj.get_full_name() return obj.get_full_name() or obj.username
class PersonModelMultipleChoice(forms.ModelMultipleChoiceField): class PersonModelMultipleChoice(forms.ModelMultipleChoiceField):
......
...@@ -12,18 +12,31 @@ class UserModelChoiceFieldTests(TestCase): ...@@ -12,18 +12,31 @@ class UserModelChoiceFieldTests(TestCase):
Tests for the publisher model "UserModelChoiceField". Tests for the publisher model "UserModelChoiceField".
""" """
def setUp(self):
super(UserModelChoiceFieldTests, self).setUp()
self.course_form = CustomCourseForm()
def test_course_form(self): def test_course_form(self):
""" """
Verify that UserModelChoiceField returns `full_name` as choice label. Verify that UserModelChoiceField returns `full_name` as choice label.
""" """
course_form = CustomCourseForm()
user = UserFactory(username='test_user', full_name='Test Full Name') user = UserFactory(username='test_user', full_name='Test Full Name')
course_form.fields['team_admin'].queryset = User.objects.all() self._assert_choice_label(user.full_name)
course_form.fields['team_admin'].empty_label = None
def test_team_admin_without_full_name(self):
"""
Verify that UserModelChoiceField returns `username` if `full_name` empty.
"""
user = UserFactory(username='test_user', full_name='', first_name='', last_name='')
self._assert_choice_label(user.username)
def _assert_choice_label(self, expected_name):
self.course_form.fields['team_admin'].queryset = User.objects.all()
self.course_form.fields['team_admin'].empty_label = None
# we need to loop through choices because it is a ModelChoiceIterator # we need to loop through choices because it is a ModelChoiceIterator
for __, choice_label in course_form.fields['team_admin'].choices: for __, choice_label in self.course_form.fields['team_admin'].choices:
self.assertEqual(choice_label, user.full_name) self.assertEqual(choice_label, expected_name)
class PersonModelMultipleChoiceTests(TestCase): class PersonModelMultipleChoiceTests(TestCase):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment