Skip to content

Commit 979f87f

Browse files
sort by due_date - closes #87
1 parent aa4f6dc commit 979f87f

2 files changed

Lines changed: 84 additions & 1 deletion

File tree

courses/tests/test_course.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,3 +594,86 @@ def test_submissions_display_format(self):
594594
self.assertEqual(open_submission.project, self.open_project)
595595
self.assertEqual(open_submission.display_score, -1)
596596
self.assertEqual(open_submission.enrollment.student, self.user)
597+
598+
def test_homeworks_sorted_by_due_date(self):
599+
"""Test that homeworks are displayed in order of due date."""
600+
# Create homeworks with different due dates in non-chronological order
601+
homework_late = Homework.objects.create(
602+
slug="homework-late",
603+
course=self.course,
604+
title="Late Homework",
605+
description="Homework due later",
606+
due_date=timezone.now() + timezone.timedelta(days=30),
607+
state=HomeworkState.OPEN.value,
608+
)
609+
610+
homework_early = Homework.objects.create(
611+
slug="homework-early",
612+
course=self.course,
613+
title="Early Homework",
614+
description="Homework due earlier",
615+
due_date=timezone.now() + timezone.timedelta(days=5),
616+
state=HomeworkState.OPEN.value,
617+
)
618+
619+
homework_middle = Homework.objects.create(
620+
slug="homework-middle",
621+
course=self.course,
622+
title="Middle Homework",
623+
description="Homework due in the middle",
624+
due_date=timezone.now() + timezone.timedelta(days=15),
625+
state=HomeworkState.OPEN.value,
626+
)
627+
628+
# Add questions to each homework
629+
for hw in [homework_late, homework_early, homework_middle]:
630+
Question.objects.create(
631+
homework=hw,
632+
text=f"Question for {hw.title}",
633+
question_type=QuestionTypes.MULTIPLE_CHOICE.value,
634+
possible_answers=join_possible_answers(["A", "B", "C"]),
635+
correct_answer="1",
636+
)
637+
638+
# Test as unauthenticated user
639+
url = reverse("course", kwargs={"course_slug": self.course.slug})
640+
response = self.client.get(url)
641+
642+
self.assertEqual(response.status_code, 200)
643+
644+
# Get homeworks from context
645+
homeworks = response.context["homeworks"]
646+
647+
# Verify we have all homeworks (original 3 + new 3)
648+
self.assertEqual(len(homeworks), 6)
649+
650+
# Check that homeworks are sorted by due_date
651+
# The first homework should be the one with the earliest due date
652+
# among the new homeworks we created
653+
homework_slugs = [hw.slug for hw in homeworks]
654+
655+
# Find the positions of our new homeworks in the sorted list
656+
early_pos = homework_slugs.index("homework-early")
657+
middle_pos = homework_slugs.index("homework-middle")
658+
late_pos = homework_slugs.index("homework-late")
659+
660+
# Verify they are in chronological order (early < middle < late)
661+
self.assertLess(early_pos, middle_pos)
662+
self.assertLess(middle_pos, late_pos)
663+
664+
# Test as authenticated user
665+
self.client.login(**credentials)
666+
response = self.client.get(url)
667+
668+
self.assertEqual(response.status_code, 200)
669+
homeworks = response.context["homeworks"]
670+
671+
# Verify the same ordering for authenticated users
672+
homework_slugs = [hw.slug for hw in homeworks]
673+
early_pos = homework_slugs.index("homework-early")
674+
middle_pos = homework_slugs.index("homework-middle")
675+
late_pos = homework_slugs.index("homework-late")
676+
677+
self.assertLess(early_pos, middle_pos)
678+
self.assertLess(middle_pos, late_pos)
679+

courses/views/course.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ def get_homeworks_for_course(course: Course, user) -> List[Homework]:
192192
homeworks = (
193193
Homework.objects.filter(course=course)
194194
.prefetch_related(submissions_prefetch)
195-
.order_by("id")
195+
.order_by("due_date")
196196
)
197197

198198
for hw in homeworks:

0 commit comments

Comments
 (0)