1+ import os
12import shutil
23
34from grader_service .api .models .assignment_settings import AssignmentSettings
@@ -84,7 +85,7 @@ def test_generate_feedback_with_student_notebooks(tmp_path):
8485 input_dir , output_dir = _create_input_output_dirs (tmp_path , ["simple.ipynb" ])
8586
8687 _generate_test_submission (
87- input_dir , output_dir , assignment_settings_kwargs = {"allowed_files" : ["*" ]}
88+ input_dir , output_dir , assignment_settings_kwargs = {"allowed_files" : ["*.ipynb " ]}
8889 )
8990
9091 student_nb = output_dir / "student.ipynb"
@@ -95,7 +96,7 @@ def test_generate_feedback_with_student_notebooks(tmp_path):
9596 shutil .copyfile (output_dir / "gradebook.json" , output_dir2 / "gradebook.json" )
9697
9798 _autograde_test_submission (
98- str (output_dir ), str (output_dir2 ), assignment_settings_kwargs = {"allowed_files" : ["*" ]}
99+ str (output_dir ), str (output_dir2 ), assignment_settings_kwargs = {"allowed_files" : ["*.ipynb " ]}
99100 )
100101
101102 output_dir3 = tmp_path / "output_dir3"
@@ -107,7 +108,7 @@ def test_generate_feedback_with_student_notebooks(tmp_path):
107108 output_dir = str (output_dir3 ),
108109 file_pattern = "*.ipynb" ,
109110 config = None ,
110- assignment_settings = AssignmentSettings (allowed_files = ["*" ]),
111+ assignment_settings = AssignmentSettings (allowed_files = ["*.ipynb " ]),
111112 ).start ()
112113
113114 # Only the original notebook should be copied to the feedback
@@ -116,7 +117,7 @@ def test_generate_feedback_with_student_notebooks(tmp_path):
116117 assert not (output_dir3 / "student.html" ).exists ()
117118
118119
119- def test_generate_assignment_copy_with_dirs (tmp_path ):
120+ def test_generate_feedback_with_dirs (tmp_path ):
120121 input_dir , output_dir = _create_input_output_dirs (tmp_path , ["simple.ipynb" ])
121122
122123 dir_1 = input_dir / "dir_1"
@@ -161,3 +162,40 @@ def test_generate_assignment_copy_with_dirs(tmp_path):
161162 assert not (output_dir3 / "dir_1/dir_2" ).exists ()
162163 assert not (output_dir3 / "dir_1/dir_2/dir_3" ).exists ()
163164 assert not (output_dir3 / "dir_1/dir_2/dir_3/test.txt" ).exists ()
165+
166+
167+ def test_generate_feedback_with_missing_submission_file (tmp_path ):
168+ """Test that GenerateFeedback handles files missing in the student submission gracefully"""
169+ input_dir , output_dir = _create_input_output_dirs (tmp_path , ["simple.ipynb" ])
170+
171+ _generate_test_submission (
172+ input_dir , output_dir , assignment_settings_kwargs = {"allowed_files" : ["*.ipynb" ]}
173+ )
174+
175+ # Student didn't submit the required notebook, but instead submitted a different one
176+ os .remove (output_dir / "simple.ipynb" )
177+ student_nb = output_dir / "student.ipynb"
178+ student_nb .touch ()
179+
180+ output_dir2 = tmp_path / "output_dir2"
181+ output_dir2 .mkdir ()
182+ shutil .copyfile (output_dir / "gradebook.json" , output_dir2 / "gradebook.json" )
183+
184+ _autograde_test_submission (
185+ str (output_dir ), str (output_dir2 ), assignment_settings_kwargs = {"allowed_files" : ["*.ipynb" ]}
186+ )
187+
188+ output_dir3 = tmp_path / "output_dir3"
189+ output_dir3 .mkdir ()
190+ shutil .copyfile (output_dir2 / "gradebook.json" , output_dir3 / "gradebook.json" )
191+
192+ gf = GenerateFeedback (
193+ input_dir = str (output_dir2 ),
194+ output_dir = str (output_dir3 ),
195+ file_pattern = "*.ipynb" ,
196+ config = None ,
197+ assignment_settings = AssignmentSettings (allowed_files = ["*.ipynb" ]),
198+ )
199+ gf .start ()
200+
201+ assert gf .notebooks == []
0 commit comments