def test_path_info_stripped_from_new_name(self): name_with_path = '../../hack/you' self.instructor_file.rename(name_with_path) self.instructor_file.refresh_from_db() expected_new_name = 'you' self.assertEqual(expected_new_name, self.instructor_file.name) with utils.ChangeDirectory(core_ut.get_project_files_dir(self.project)): self.assertTrue(os.path.isfile(expected_new_name))
def test_change_directory(self): new_dirname = 'my_dir' os.mkdir('my_dir') self.assertEqual(os.getcwd(), settings.MEDIA_ROOT) with utils.ChangeDirectory(new_dirname): self.assertEqual(os.path.join(settings.MEDIA_ROOT, new_dirname), os.getcwd()) self.assertEqual(os.getcwd(), settings.MEDIA_ROOT)
def test_valid_rename(self): original_last_modified = self.instructor_file.last_modified new_name = 'new_filename' self.instructor_file.rename(new_name) self.instructor_file.refresh_from_db() self.assertNotEqual(original_last_modified, self.instructor_file.last_modified) self.assertEqual(new_name, self.instructor_file.name) with utils.ChangeDirectory(core_ut.get_project_files_dir(self.project)): self.assertTrue(os.path.isfile(new_name))
def test_extra_files_discarded(self): files = [ SimpleUploadedFile('spam.cpp', b'blah'), SimpleUploadedFile('eggs.cpp', b'merp'), SimpleUploadedFile('test_spam.cpp', b'cheeese'), ] extra_files = [ SimpleUploadedFile('extra.cpp', b'merp'), SimpleUploadedFile('extra_extra.cpp', b'spam') ] submission = self._do_files_discarded_test(files, extra_files) with utils.ChangeDirectory(core_ut.get_submission_dir(submission)): for file_ in extra_files: self.assertFalse(os.path.exists(file_.name))
def test_valid_create(self): instructor_file = InstructorFile.objects.validate_and_create( project=self.project, file_obj=self.file_obj) self.assertEqual(self.file_obj.name, instructor_file.name) expected_abspath = os.path.join( core_ut.get_project_files_dir(self.project), self.file_obj.name) self.assertEqual(expected_abspath, instructor_file.abspath) self.assertEqual(self.file_obj.size, instructor_file.size) self.file_obj.seek(0) self.assertEqual(self.file_obj.read(), instructor_file.file_obj.read()) with utils.ChangeDirectory(core_ut.get_project_files_dir(self.project)): self.assertTrue(os.path.isfile(self.file_obj.name))
def _make_submission_archive( task: ag_models.DownloadTask, submission_fdbks: Iterator[SubmissionResultFeedback], num_submissions, dest_filename): with open(dest_filename, 'wb') as archive: with zipfile.ZipFile(archive, 'w') as z: for index, fdbk in enumerate(submission_fdbks): submission = fdbk.submission archive_dirname = ('_'.join(submission.group.member_names) + '-' + submission.timestamp.isoformat()) with utils.ChangeDirectory( core_ut.get_submission_dir(submission)): for filename in submission.submitted_filenames: target_name = os.path.join( '{}_{}'.format(task.project.course.name, task.project.name), archive_dirname, filename) z.write(filename, arcname=target_name) if index % _PROGRESS_UPDATE_FREQUENCY == 0: task.progress = (index / num_submissions) * 100 task.save() print('Updated task {} progress: {}'.format( task.pk, task.progress))
def test_valid_init(self): SimpleFileTuple = namedtuple('SimpleFileTuple', ['name', 'content']) files_to_submit = sorted([ SimpleFileTuple('spam.cpp', b'blah'), SimpleFileTuple('eggs.cpp', b'merp'), SimpleFileTuple('test_spam.cpp', b'cheeese') ]) now = timezone.now() submitter = 'steve' submission: ag_models.Submission = ag_models.Submission.objects.validate_and_create( group=self.group, submitted_files=[ SimpleUploadedFile(name, content) for name, content in files_to_submit ], submitter=submitter) submission.refresh_from_db() self.assertEqual(submitter, submission.submitter) self.assertEqual(submission.status, ag_models.Submission.GradingStatus.received) self.assertEqual(submission.error_msg, '') self.assertCountEqual(submission.missing_files, []) self.assertCountEqual((file_.name for file_ in files_to_submit), submission.submitted_filenames) self.assertTrue(submission.count_towards_daily_limit) self.assertFalse(submission.is_past_daily_limit) self.assertTrue(submission.count_towards_total_limit) self.assertFalse(submission.is_bonus_submission) self.assertEqual([], submission.does_not_count_for) self.assertLess(submission.timestamp - now, timezone.timedelta(seconds=2)) # Check file contents in the filesystem self.assertTrue(os.path.isdir(core_ut.get_submission_dir(submission))) with utils.ChangeDirectory(core_ut.get_submission_dir(submission)): self.assertTrue( os.path.isdir(constants.FILESYSTEM_RESULT_OUTPUT_DIRNAME)) for name, content in files_to_submit: self.assertEqual(name, submission.get_file(name).name) self.assertEqual(content, submission.get_file(name).read()) self.assertTrue(os.path.isfile(os.path.basename(name))) with open(name, 'rb') as f: self.assertEqual(content, f.read()) # Check submitted files using member accessors expected = sorted(files_to_submit) actual = sorted(submission.submitted_files, key=lambda file_: file_.name) for expected_file, loaded_file in zip(expected, actual): self.assertEqual(expected_file.name, os.path.basename(loaded_file.name)) self.assertEqual(expected_file.content, loaded_file.read())