feat: add course recommendations api unit tests [VAN-1104] (#31069)
This commit is contained in:
committed by
GitHub
parent
8f90ba5f32
commit
893c025d0c
@@ -230,3 +230,75 @@ class TestProgramsView(SharedModuleStoreTestCase, ProgramCacheMixin):
|
||||
response = self.client.get(self.url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data, [])
|
||||
|
||||
|
||||
class TestCourseRecommendationApiView(SharedModuleStoreTestCase):
|
||||
"""Unit tests for the course recommendations on dashboard page."""
|
||||
|
||||
password = 'test'
|
||||
url = reverse_lazy('learner_dashboard:v0:courses')
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.user = UserFactory()
|
||||
self.client.login(username=self.user.username, password=self.password)
|
||||
self.recommended_courses = ['MITx+6.00.1x', 'IBM+PY0101EN', 'HarvardX+CS50P', 'UQx+IELTSx', 'HarvardX+CS50x',
|
||||
'Harvard+CS50z', 'BabsonX+EPS03x', 'TUMx+QPLS2x', 'NYUx+FCS.NET.1', 'MichinX+101x']
|
||||
self.course_data = {
|
||||
'course_key': 'MITx+6.00.1x',
|
||||
'title': 'Introduction to Computer Science and Programming Using Python',
|
||||
'owners': [{'logo_image_url': 'https://prod-discovery.edx-cdn.org/organization/logos/2a73d2ce-c34a-4e08'
|
||||
'-822383bca9d2f01d-2cc8854c6fee.png'}],
|
||||
'marketing_url': 'https://www.edx.org/course/introduction-to-computer-science-and-programming-7'
|
||||
}
|
||||
|
||||
@mock.patch('lms.djangoapps.learner_dashboard.api.v0.views.get_personalized_course_recommendations', )
|
||||
@mock.patch('lms.djangoapps.learner_dashboard.api.v0.views.get_course_data')
|
||||
def test_no_recommendations_from_amplitude(self, mocked_get_course_data,
|
||||
mocked_get_personalized_course_recommendations):
|
||||
"""
|
||||
Verify API returns 400 if no course recommendations from amplitude.
|
||||
"""
|
||||
mocked_get_personalized_course_recommendations.return_value = [False, []]
|
||||
mocked_get_course_data.return_value = self.course_data
|
||||
|
||||
response = self.client.get(self.url)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertEqual(response.data, None)
|
||||
|
||||
@mock.patch('lms.djangoapps.learner_dashboard.api.v0.views.get_personalized_course_recommendations')
|
||||
@mock.patch('lms.djangoapps.learner_dashboard.api.v0.views.get_course_data')
|
||||
def test_get_course_recommendations(self, mocked_get_course_data,
|
||||
mocked_get_personalized_course_recommendations):
|
||||
"""
|
||||
Verify API returns course recommendations.
|
||||
"""
|
||||
mocked_get_personalized_course_recommendations.return_value = [False, self.recommended_courses]
|
||||
mocked_get_course_data.return_value = self.course_data
|
||||
expected_recommendations = 5
|
||||
|
||||
response = self.client.get(self.url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data.get('is_personalized_recommendation'), True)
|
||||
self.assertEqual(len(response.data.get('courses')), expected_recommendations)
|
||||
|
||||
@mock.patch('lms.djangoapps.learner_dashboard.api.v0.views.get_personalized_course_recommendations')
|
||||
@mock.patch('lms.djangoapps.learner_dashboard.api.v0.views.get_course_data')
|
||||
def test_get_enrollable_course_recommendations(self, mocked_get_course_data,
|
||||
mocked_get_personalized_course_recommendations):
|
||||
"""
|
||||
Verify API returns course recommendations for courses in which user is not enrolled.
|
||||
"""
|
||||
mocked_get_personalized_course_recommendations.return_value = [False, self.recommended_courses]
|
||||
mocked_get_course_data.return_value = self.course_data
|
||||
course_keys = ['course-v1:IBM+PY0101EN+Run_0', 'course-v1:UQx+IELTSx+Run_0', 'course-v1:MITx+6.00.1x+Run_0',
|
||||
'course-v1:HarvardX+CS50P+Run_0', 'course-v1:Harvard+CS50z+Run_0', 'course-v1:TUMx+QPLS2x+Run_0']
|
||||
expected_recommendations = 4
|
||||
# enrolling in 6 courses
|
||||
for course_key in course_keys:
|
||||
CourseEnrollmentFactory(course_id=course_key, user=self.user)
|
||||
|
||||
response = self.client.get(self.url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data.get('is_personalized_recommendation'), True)
|
||||
self.assertEqual(len(response.data.get('courses')), expected_recommendations)
|
||||
|
||||
Reference in New Issue
Block a user