@@ -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+
0 commit comments