Skip to content

Commit 8944d1e

Browse files
feat: [AXM-288] Change response to represent Future assignments (#2550)
* feat: [AXM-288] Change response to represent Future assignments the same way as past assignments * refactor: [AXM-288] Refactor get_course_assignments Co-authored-by: monteri <[email protected]> * refactor: [AXM-288] Refactor get_course_assignments method --------- Co-authored-by: monteri <[email protected]>
1 parent 3a1ff13 commit 8944d1e

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

lms/djangoapps/mobile_api/users/serializers.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ def get_progress(self, model: CourseEnrollment) -> Dict[str, int]:
257257
"""
258258
return self.calculate_progress(model)
259259

260-
def get_course_assignments(self, model: CourseEnrollment) -> Optional[Dict[str, List[Dict[str, str]]]]:
260+
def get_course_assignments(self, model: CourseEnrollment) -> Dict[str, Optional[List[Dict[str, str]]]]:
261261
"""
262262
Returns the future assignment data and past assignments data for the user in the course.
263263
"""
@@ -267,20 +267,28 @@ def get_course_assignments(self, model: CourseEnrollment) -> Optional[Dict[str,
267267
self.context.get('request'),
268268
include_past_dates=True
269269
)
270-
next_assignment = None
271-
past_assignment = []
270+
past_assignments = []
271+
future_assignments = []
272272

273273
timezone = get_user_timezone_or_last_seen_timezone_or_utc(model.user)
274274
for assignment in sorted(assignments, key=lambda x: x.date):
275275
if assignment.date < datetime.now(timezone):
276-
past_assignment.append(assignment)
276+
past_assignments.append(assignment)
277277
else:
278-
next_assignment = DateSummarySerializer(assignment).data
279-
break
278+
if not assignment.complete:
279+
future_assignments.append(assignment)
280+
281+
if future_assignments:
282+
future_assignment_date = future_assignments[0].date.date()
283+
next_assignments = [
284+
assignment for assignment in future_assignments if assignment.date.date() == future_assignment_date
285+
]
286+
else:
287+
next_assignments = []
280288

281289
return {
282-
'future_assignment': next_assignment,
283-
'past_assignments': DateSummarySerializer(past_assignment, many=True).data,
290+
'future_assignments': DateSummarySerializer(next_assignments, many=True).data,
291+
'past_assignments': DateSummarySerializer(past_assignments, many=True).data,
284292
}
285293

286294
class Meta:

lms/djangoapps/mobile_api/users/tests.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,21 @@ def test_user_enrollment_api_v4_status_all(self):
902902
self.assertEqual(enrollments['results'][2]['course']['id'], str(old_course.id))
903903
self.assertNotIn('primary', response.data)
904904

905+
@patch('lms.djangoapps.mobile_api.users.serializers.cache.set', return_value=None)
906+
def test_response_contains_primary_enrollment_assignments_info(self, cache_mock: MagicMock):
907+
self.login()
908+
course = CourseFactory.create(org='edx', mobile_available=True)
909+
self.enroll(course.id)
910+
911+
response = self.api_response(api_version=API_V4)
912+
913+
self.assertEqual(response.status_code, status.HTTP_200_OK)
914+
self.assertIn('course_assignments', response.data['primary'])
915+
self.assertIn('past_assignments', response.data['primary']['course_assignments'])
916+
self.assertIn('future_assignments', response.data['primary']['course_assignments'])
917+
self.assertListEqual(response.data['primary']['course_assignments']['past_assignments'], [])
918+
self.assertListEqual(response.data['primary']['course_assignments']['future_assignments'], [])
919+
905920

906921
@override_settings(MKTG_URLS={'ROOT': 'dummy-root'})
907922
class TestUserEnrollmentCertificates(UrlResetMixin, MobileAPITestCase, MilestonesTestCaseMixin):

0 commit comments

Comments
 (0)