MST-187 return course staff role data for ProgramCourseEnrollment get API

This commit is contained in:
Simon Chen
2020-04-10 15:13:43 -04:00
parent 4fa970f962
commit fe1ef21bcd
5 changed files with 140 additions and 14 deletions

View File

@@ -6,6 +6,7 @@ API Serializers
from rest_framework import serializers
from six import text_type
from lms.djangoapps.program_enrollments.api import is_course_staff_enrollment
from lms.djangoapps.program_enrollments.models import ProgramCourseEnrollment, ProgramEnrollment
from .constants import CourseRunProgressStatuses
@@ -78,6 +79,7 @@ class ProgramCourseEnrollmentSerializer(serializers.Serializer):
status = serializers.CharField()
account_exists = serializers.SerializerMethodField()
curriculum_uuid = serializers.SerializerMethodField()
course_staff = serializers.SerializerMethodField()
class Meta(object):
model = ProgramCourseEnrollment
@@ -91,6 +93,9 @@ class ProgramCourseEnrollmentSerializer(serializers.Serializer):
def get_curriculum_uuid(self, obj):
return text_type(obj.program_enrollment.curriculum_uuid)
def get_course_staff(self, obj):
return is_course_staff_enrollment(obj)
class ProgramCourseEnrollmentRequestSerializer(serializers.Serializer, InvalidStatusMixin):
"""

View File

@@ -35,7 +35,11 @@ from lms.djangoapps.program_enrollments.constants import ProgramCourseOperationS
from lms.djangoapps.program_enrollments.constants import ProgramOperationStatuses as ProgramStatuses
from lms.djangoapps.program_enrollments.exceptions import ProviderDoesNotExistException
from lms.djangoapps.program_enrollments.models import ProgramCourseEnrollment, ProgramEnrollment
from lms.djangoapps.program_enrollments.tests.factories import ProgramCourseEnrollmentFactory, ProgramEnrollmentFactory
from lms.djangoapps.program_enrollments.tests.factories import (
CourseAccessRoleAssignmentFactory,
ProgramCourseEnrollmentFactory,
ProgramEnrollmentFactory,
)
from openedx.core.djangoapps.catalog.cache import PROGRAM_CACHE_KEY_TPL, PROGRAMS_BY_ORGANIZATION_CACHE_KEY_TPL
from openedx.core.djangoapps.catalog.tests.factories import (
CourseFactory,
@@ -890,18 +894,27 @@ class ProgramCourseEnrollmentsGetTests(EnrollmentsDataMixin, APITestCase):
program_uuid=self.program_uuid, curriculum_uuid=self.curriculum_uuid, external_user_key='user-0',
)
program_enrollment_2 = ProgramEnrollmentFactory.create(
program_uuid=self.program_uuid, curriculum_uuid=self.other_curriculum_uuid, external_user_key='user-0',
program_uuid=self.program_uuid,
curriculum_uuid=self.other_curriculum_uuid,
external_user_key='user-0',
user=None
)
ProgramCourseEnrollmentFactory.create(
program_enrollment=program_enrollment_1,
course_key=self.course_id,
status='active',
)
ProgramCourseEnrollmentFactory.create(
CourseStaffRole(self.course_id).add_users(program_enrollment_1.user)
program_course_enrollment_2 = ProgramCourseEnrollmentFactory.create(
program_enrollment=program_enrollment_2,
course_key=self.course_id,
status='inactive',
)
CourseAccessRoleAssignmentFactory.create(
enrollment=program_course_enrollment_2
)
self.addCleanup(self.destroy_course_enrollments)
@@ -959,11 +972,11 @@ class ProgramCourseEnrollmentsGetTests(EnrollmentsDataMixin, APITestCase):
'results': [
{
'student_key': 'user-0', 'status': 'active', 'account_exists': True,
'curriculum_uuid': text_type(self.curriculum_uuid),
'curriculum_uuid': text_type(self.curriculum_uuid), 'course_staff': True
},
{
'student_key': 'user-0', 'status': 'inactive', 'account_exists': True,
'curriculum_uuid': text_type(self.other_curriculum_uuid),
'student_key': 'user-0', 'status': 'inactive', 'account_exists': False,
'curriculum_uuid': text_type(self.other_curriculum_uuid), 'course_staff': True
},
],
}
@@ -980,7 +993,7 @@ class ProgramCourseEnrollmentsGetTests(EnrollmentsDataMixin, APITestCase):
expected_results = [
{
'student_key': 'user-0', 'status': 'active', 'account_exists': True,
'curriculum_uuid': text_type(self.curriculum_uuid),
'curriculum_uuid': text_type(self.curriculum_uuid), 'course_staff': True
},
]
assert expected_results == response.data['results']
@@ -994,12 +1007,12 @@ class ProgramCourseEnrollmentsGetTests(EnrollmentsDataMixin, APITestCase):
assert status.HTTP_200_OK == next_response.status_code
next_expected_results = [
{
'student_key': 'user-0', 'status': 'inactive', 'account_exists': True,
'curriculum_uuid': text_type(self.other_curriculum_uuid),
'student_key': 'user-0', 'status': 'inactive', 'account_exists': False,
'curriculum_uuid': text_type(self.other_curriculum_uuid), 'course_staff': True
},
]
assert next_expected_results == next_response.data['results']
assert next_response.data['next'] is None
# there's going to be a 'cursor' query param, but we have no way of knowing it's value
assert next_response.data['previous'] is not None
assert self.get_url(course_id=self.course_id) in next_response.data['previous']