Skip to content

Commit 759a9bb

Browse files
authored
feat: add is_enrolled field to learners endpoint response (#38405)
1 parent 544a6ab commit 759a9bb

3 files changed

Lines changed: 30 additions & 7 deletions

File tree

lms/djangoapps/instructor/tests/views/test_api_v2.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from rest_framework import status
99
from rest_framework.test import APIClient
1010

11-
from common.djangoapps.student.tests.factories import InstructorFactory, UserFactory
11+
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, InstructorFactory, UserFactory
1212
from lms.djangoapps.courseware.models import StudentModule
1313
from lms.djangoapps.instructor_task.models import InstructorTask
1414
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
@@ -46,12 +46,30 @@ def test_get_learner_by_username(self):
4646
'student_id': self.student.id,
4747
})
4848

49-
self.assertEqual(response.status_code, status.HTTP_200_OK) # noqa: PT009
49+
assert response.status_code == status.HTTP_200_OK
5050
data = response.json()
51-
self.assertEqual(data['username'], 'john_harvard') # noqa: PT009
52-
self.assertEqual(data['email'], '[email protected]') # noqa: PT009
53-
self.assertEqual(data['full_name'], 'John Harvard') # noqa: PT009
54-
self.assertEqual(data['progress_url'], expected_progress_url) # noqa: PT009
51+
assert data['username'] == 'john_harvard'
52+
assert data['email'] == '[email protected]'
53+
assert data['full_name'] == 'John Harvard'
54+
assert data['progress_url'] == expected_progress_url
55+
assert not data['is_enrolled']
56+
57+
def test_get_learner_by_username_enrolled(self):
58+
"""Test that is_enrolled is true for users enrolled in the course"""
59+
CourseEnrollmentFactory(
60+
is_active=True,
61+
course_id=self.course.id,
62+
user=self.student
63+
)
64+
url = reverse('instructor_api_v2:learner_detail', kwargs={
65+
'course_id': str(self.course.id),
66+
'email_or_username': self.student.username
67+
})
68+
response = self.client.get(url)
69+
70+
assert response.status_code == status.HTTP_200_OK
71+
data = response.json()
72+
assert data['is_enrolled']
5573

5674
def test_get_learner_by_email(self):
5775
"""Test retrieving learner info by email"""

lms/djangoapps/instructor/views/api_v2.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,8 @@ class LearnerView(DeveloperErrorViewMixin, APIView):
16841684
"username": "john_harvard",
16851685
"email": "[email protected]",
16861686
"full_name": "John Harvard",
1687-
"progress_url": "https://example.com/courses/course-v1:edX+DemoX+Demo_Course/progress/john_harvard/"
1687+
"progress_url": "https://example.com/courses/course-v1:edX+DemoX+Demo_Course/progress/42/",
1688+
"is_enrolled": true
16881689
}
16891690
```
16901691
"""
@@ -1754,6 +1755,7 @@ def get(self, request, course_id, email_or_username):
17541755
'email': student.email,
17551756
'full_name': student.profile.name,
17561757
'progress_url': progress_url,
1758+
'is_enrolled': CourseEnrollment.is_enrolled(student, course_key),
17571759
}
17581760

17591761
serializer = LearnerSerializer(learner_data)

lms/djangoapps/instructor/views/serializers_v2.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,9 @@ class LearnerSerializer(serializers.Serializer):
761761
required=False,
762762
help_text="URL to learner's progress page"
763763
)
764+
is_enrolled = serializers.BooleanField(
765+
help_text="Whether the learner has an active enrollment in the course"
766+
)
764767

765768

766769
class GraderSerializer(serializers.Serializer):

0 commit comments

Comments
 (0)